diff options
524 files changed, 2822 insertions, 1849 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c5cd006a289..0afd59ab007 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -669,8 +669,8 @@ gitlab:assets:compile: - //@gitlab/gitlabhq - //@gitlab/gitlab-ee tags: - - gitlab-org-delivery - - high-cpu + - docker + - gitlab-org karma: <<: *dedicated-no-docs-pull-cache-job diff --git a/CHANGELOG.md b/CHANGELOG.md index e220d61b316..feda5e0835b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,253 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.8.0 (2019-02-22) + +### Security (7 changes, 1 of them is from the community) + +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !2793 +- Update Helm to 2.12.2 to address Helm client vulnerability. !24418 (Takuya Noguchi) +- Use sanitized user status message for user popover. +- Validate bundle files before unpacking them. +- Alias GitHub and BitBucket OAuth2 callback URLs. +- Fixed XSS content in KaTex links. +- Disallows unauthorized users from accessing the pipelines section. + +### Removed (2 changes, 1 of them is from the community) + +- Removed deprecated Redcarpet markdown engine. +- Remove Cancel all jobs button in general jobs list view. (Jordi Llull) + +### Fixed (84 changes, 20 of them are from the community) + +- Fix ambiguous brackets in task lists. !18514 (Jared Deckard <jared.deckard@gmail.com>) +- Fix lost line number when navigating to a specific line in a protected file before authenticating. !19165 (Scott Escue) +- Fix suboptimal handling of checkbox and radio input events causing group general settings submit button to stay disabled after changing its visibility. !23022 +- Fix upcoming milestones filter not including group milestones. !23098 (Heinrich Lee Yu) +- Update runner admin page to make description field larger. !23593 (Sascha Reynolds) +- Fix Bitbucket Server import not allowing personal projects. !23601 +- Fix bug causing repository mirror settings UI to break. !23712 +- Fix foreground color for labels to ensure consistency of label appearance. !23873 (Nathan Friend) +- Resolve In Merge Request diff screen, master is not a hyperlink. !23874 +- Show the correct error page when access is denied. !23932 +- Increase reliability and performance of toggling task items. !23938 +- Modify file restore to rectify tar issue. !24000 +- Fix default visibility_level for new projects. !24120 (Fabian Schneider @fabsrc) +- Footnotes now render properly in markdown. !24168 +- Emoji and cancel button are taller than input in set user status modal. !24173 (Dhiraj Bodicherla) +- Adjusts duplicated line when commenting on unfolded diff lines (in the bottom). !24201 +- Adjust height of "Add list" dropdown in issue boards. !24227 +- Improves restriction of multiple Kubernetes clusters through API. !24251 +- Fix files/blob api endpoints content disposition. !24267 +- Cleanup stale +deleted repo paths on project removal (adjusts project removal bug). !24269 +- Handle regular job dependencies next to parallelized job dependencies. !24273 +- Proper align Projects dropdown on issue boards page. !24277 (Johann Hubert Sonntagbauer) +- Resolve When merging an MR, the squash checkbox isnt always supported. !24296 +- Fix Bitbucket Server importer error handling. !24343 +- Fix syntax highlighting for suggested changes preview. !24358 +- API: Support dots in wiki slugs. !24383 (Robert Schilling) +- Show CI artifact file size with 3 significant digits on 'browse job artifacts' page. !24387 +- API: Support username with dots. !24395 (Robert Schilling) +- API: Fix default_branch_protection admin setting. !24398 (Robert Schilling) +- Remove unwanted margin above suggested changes. !24419 +- Prevent checking protected_ref? for ambiguous refs. !24437 +- Update metrics environment dropdown to show complete option set. !24441 +- Fix empty labels of CI builds for gitlab-pages on pipeline page. !24451 +- Do not run spam checks on confidential issues. !24453 +- Upgrade KaTeX to version 0.10.0. !24478 (Andrew Harmon) +- Avoid overwriting default jaeger values with nil. !24482 +- Display SAML failure messages instead of expecting CSRF token. !24509 +- Adjust vertical alignment for project visibility icons. !24511 (Martin Hobert) +- Load initUserInternalRegexPlaceholder only when required. !24522 +- Hashed Storage: `AfterRenameService` was receiving the wrong `old_path` under some circunstances. !24526 +- Resolve Runners IPv6 address overlaps other values. !24531 +- Fix 404s with snippet uploads in object storage. !24550 +- Fixed oversized custom project notification selector dropdown. !24557 +- Allow users with full private access to read private personal snippets. !24560 +- Resolve Pipeline stages job action button icon is not aligned. !24577 +- Fix cluster page non-interactive on form validation error. !24583 +- Fix 404s for snippet uploads when relative URL root used. !24588 +- Fix markdown table border. !24601 +- Fix CSS grid on a new Project/Group Milestone. !24614 (Takuya Noguchi) +- Prevent unload when Recaptcha is open. !24625 +- Clean up unicorn sampler metric labels. !24626 (bjk-gitlab) +- Support bamboo api polymorphism. !24680 (Alex Lossent) +- Ensure Cert Manager works with Auto DevOps URLs greater than 64 bytes. !24683 +- Fix failed LDAP logins when nil user_id present. !24749 +- fix display comment avatars issue in IE 11. !24777 (Gokhan Apaydin) +- Fix template labels not being created on new projects. !24803 +- Fix cluster installation processing spinner. !24814 +- Append prioritized label before pagination. !24815 +- Resolve UI bug adding group members with lower permissions. !24820 +- Make `ActionController::Parameters` serializable for sidekiq jobs. !24864 +- Fix Jira Service password validation on project integration services. !24896 (Daniel Juarez) +- Fix potential Addressable::URI::InvalidURIError. !24908 +- Update Workhorse to v8.2.0. !24909 +- Encode Content-Disposition filenames. !24919 +- Avoid race conditions when creating GpgSignature. !24939 +- Create the source branch for a GitHub import. !25064 +- Fix suggested changes syntax highlighting. !25116 +- Fix counts in milestones dashboard. !25230 +- Fixes incorrect TLD validation errors for Kubernetes cluster domain. !25262 +- Fix 403 errors when adding an assignee list in project boards. !25263 +- Prevent Auto DevOps from trying to deploy without a domain name. !25308 +- Fix uninitialized constant with GitLab Pages. +- Increase line height of project summaries. (gfyoung) +- Remove extra space between MR tab bar and sticky file headers. +- Correct spacing for comparison page. +- Update CI YAML param table with include. +- Return bottom border on MR Tabs. +- Fixes z-index and margins of archived alert in job page. +- Fixes archived sticky top bar without perfomance bar. +- Fixed rebase button not showing in merge request widget. +- Fixed double tooltips on note awards buttons. +- Allow suggestions to be copied and pasted as GFM. +- Fix bug that caused Suggestion Markdown toolbar button to insert snippet with leading +/-/<space>. +- Moved primary button for labels to follow the design patterns used on rest of the site. (Martin Hobert) + +### Changed (37 changes, 11 of them are from the community) + +- Change spawning of tooltips to be top by default. !21223 +- Standardize filter value capitlization in filter bar in both issues and boards pages. !23846 (obahareth) +- Refresh group overview to match project overview. !23866 +- Build number does not need to be tweaked anymore for the TeamCity integration to work properly. !23898 +- Added empty project illustration and updated text to user profile overview. !23973 (Fernando Arias) +- Modified Knative list view to provide more details. !24072 (Chris Baumbauer) +- Move cancel & new issue button on job page. !24074 +- Make issuable empty states actionable. !24077 +- Fix code search when text is larger than max gRPC message size. !24111 +- Update string structure for available group runners. !24187 (George Tsiolis) +- Remove multilingual translation from the word "in" in the job details sidebar. !24192 (Nathan Friend) +- Fix duplicate project disk path in BackfillLegacyProjectRepositories. !24213 +- Ensured links to a comment or system note anchor resolves to the right note if a user has a discussion filter. !24228 +- Remove expansion hover animation from pipeline status icon buttons. !24268 (Nathan Friend) +- Redesigned related merge requests in issue page. !24270 +- Return the maximum group access level in the projects API. !24403 +- Update project topics styling to use badges design. !24415 +- Display "commented" only for commit discussions on merge requests. !24427 +- Upgrade js-regex gem to version 3.1. !24433 (rroger) +- Prevent Sidekiq arguments over 10 KB in size from being logged to JSON. !24493 +- Added Avatar in the settings sidebar. !24515 (Yoginth) +- Refresh empty states for profile page tabs. !24549 +- remove red/green colors from diff view of no-color syntax theme. !24582 (khm) +- Get remote IP address of runner. !24624 +- Update last_activity_on for Users on some main GET endpoints. !24642 +- Update metrics dashboard graph design. !24653 +- Update to GitLab SVG icon from Font Awesome in profile for location and work. !24671 (Yoginth) +- Add template for Android with Fastlane. !24722 +- Display timestamps to messages printed by gitlab:backup:restore rake tasks. (Will Chandler) +- Show MR statistics in diff comparisons. +- Make possible to toggle file tree while scrolling through diffs. +- Use delete instead of remove when referring to `git branch -D`. +- Add folder header to files in merge request tree list. +- Added fuzzy file finder to merge requests. +- Collapse directory structure in merge request file tree. +- Adds skeleton loading to releases page. +- Support multiple outputs in jupyter notebooks. + +### Performance (8 changes, 1 of them is from the community) + +- Remove unused button classes `btn-create` and `comment-btn`. !23232 (George Tsiolis) +- [API] Omit `X-Total` and `X-Total-Pages` headers when items count is more than 10,000. !23931 +- Improve efficiency of GitHub importer by reducing amount of locks needed. !24102 +- Improve milestone queries using subqueries instead of separate queries for ids. !24325 +- Efficiently remove expired artifacts in `ExpireBuildArtifactsWorker`. !24450 +- Eliminate N+1 queries in /api/groups/:id. !24513 +- Use deployment relation to get an environment name. !24890 +- Do not reload daemon if configuration file of pages does not change. + +### Added (35 changes, 18 of them are from the community) + +- Add badge count to projects. !18425 (George Tsiolis) +- API: Add support for group labels. !21368 (Robert Schilling) +- Add setting for first day of the week. !22755 (Fabian Schneider @fabsrc) +- Pages for subgroups. !23505 +- Add support for customer provided encryption keys for Amazon S3 remote backups. !23797 (Pepijn Van Eeckhoudt) +- Add Knative detailed view. !23863 (Chris Baumbauer) +- Add group full path to project's shared_with_groups. !24052 (Mathieu Parent) +- Added feature to specify a custom Auto DevOps chart repository. !24162 (walkafwalka) +- Add flat-square badge style. !24172 (Fabian Schneider @fabsrc) +- Display last activity and created at datetimes for users. !24181 +- Allow setting of feature gates per project. !24184 +- Save issues/merge request sorting options to backend. !24198 +- Added support for custom hosts/domains to Auto DevOps. !24248 (walkafwalka) +- Adds milestone search. !24265 (Jacopo Beschi @jacopo-beschi) +- Allow merge request diffs to be placed into an object store. !24276 +- Add Container Registry API with cleanup function. !24303 +- GitLab now supports the profile and email scopes from OpenID Connect. !24335 (Goten Xiao) +- Add 'in' filter that modifies scope of 'search' filter to issues and merge requests API. !24350 (Hiroyuki Sato) +- Add `with_programming_language` filter for projects to API. !24377 (Dylan MacKenzie) +- API: Support searching for tags. !24385 (Robert Schilling) +- Document graphicsmagick installation for source installation. !24404 (Alexis Reigel) +- Redirect GET projects/:id to project page. !24467 +- Indicate on Issue Status if an Issue was Moved. !24470 +- Redeploy Auto DevOps deployment on variable updates. !24498 (walkafwalka) +- Don't create new merge request pipeline without commits. !24503 (Hiroyuki Sato) +- Add GitLab Pages predefined CI variables 'CI_PAGES_DOMAIN' and 'CI_PAGES_URL'. !24504 (Adrian Moisey) +- Moves domain setting from Auto DevOps to Cluster's page. !24580 +- API allows setting the squash commit message when squashing a merge request. !24784 +- Added ability to upgrade cluster applications. !24789 +- Add argument iids for issues in GraphQL. !24802 +- Add repositories count to usage ping data. !24823 +- Add support for extensionless pages URLs. !24876 +- Add templates for most popular Pages templates. !24906 +- Introduce Internal API for searching environment names. !24923 +- Allow admins to invalidate markdown texts by setting local markdown version. + +### Other (50 changes, 18 of them are from the community) + +- Externalize strings from `/app/views/projects/project_members`. !23227 (Tao Wang) +- Add CSS & JS global flags to represent browser and platform. !24017 +- Fix deprecation: Passing an argument to force an association to reload is now deprecated. !24136 (Jasper Maes) +- Cleanup legacy artifact background migration. !24144 +- Bump kubectl in Auto DevOps to 1.11.6. !24176 +- Conditionally initialize the global opentracing tracer. !24186 +- Remove horizontal whitespace on user profile overview on small breakpoints. !24189 +- Bump nginx-ingress chart to 1.1.2. !24203 +- Use monospace font for registry table tag id and tag name. !24205 +- Rename project tags to project topics. !24219 +- Add uniqueness validation to url column in Releases::Link model. !24223 +- Update sidekiq-cron to 1.0.4 and use fugit to replace rufus-scheduler to parse cron syntax. !24235 +- Adds inter-service OpenTracing propagation. !24239 +- Fixes Auto DevOps title on CI/CD admin settings. !24249 +- Upgrade kubeclient to 4.2.2 and swap out monkey-patch to disallow redirects. !24284 +- i18n: externalize strings from 'app/views/search'. !24297 (Tao Wang) +- Fix several ActionController::Parameters deprecations. !24332 (Jasper Maes) +- Remove all `$theme-gray-{weight}` variables in favor of `$gray-{weight}`. !24333 (George Tsiolis) +- Update gitlab-styles to 2.5.1. !24336 (Jasper Maes) +- Modifies environment scope UI on cluster page. !24376 +- Extract process_name from GitLab::Sentry. !24422 +- Upgrade Gitaly to 1.13.0. !24429 +- Actually set raise_on_unfiltered_parameters to true. !24443 (Jasper Maes) +- Refactored NoteableDiscussion by extracting ResolveDiscussionButton. !24505 (Martin Hobert) +- Extracted JumpToNextDiscussionButton to its own component. !24506 (Martin Hobert) +- Extracted ReplyPlaceholder to its own component. !24507 (Martin Hobert) +- Block emojis and symbol characters from users full names. !24523 +- Update GitLab Runner Helm Chart to 0.1.45. !24564 +- Updated docs for fields in pushing mirror from GitLab to GitHub. !24566 (Joseph Yu) +- Upgrade gitlab-workhorse to 8.1.0. !24571 +- Externalize strings from `/app/views/sent_notifications`. !24576 (George Tsiolis) +- Adds tracing support for ActiveRecord notifications. !24604 +- Externalize strings from `/app/views/projects/ci`. !24617 (George Tsiolis) +- Move permission check of manual actions of deployments. !24660 +- Externalize strings from `/app/views/clusters`. !24666 (George Tsiolis) +- Update UI for admin appearance settings. !24685 +- Externalize strings from `/app/views/projects/pages_domains`. !24723 (George Tsiolis) +- Externalize strings from `/app/views/projects/milestones`. !24726 (George Tsiolis) +- Add OpenTracing instrumentation for Action View Render events. !24728 +- Expose version for each application in cluster_status JSON endpoint. !24791 +- Externalize strings from `/app/views/instance_statistics`. !24809 (George Tsiolis) +- Update cluster application version on updated and installed status. !24810 +- Project list UI improvements. !24855 +- Externalize strings from `/app/views/email_rejection_mailer`. !24869 (George Tsiolis) +- Update Gitaly to v1.17.0. !24873 +- Update Workhorse to v8.3.0. !24959 +- Upgrade gitaly to 1.18.0. !24981 +- Update Workhorse to v8.3.1. +- Upgraded Codesandbox smooshpack package. +- Creates mixin to reduce code duplication between CE and EE in graph component. + + ## 11.7.5 (2019-02-06) ### Fixed (8 changes) @@ -184,7 +184,7 @@ gem 're2', '~> 1.1.1' # Misc -gem 'version_sorter', '~> 2.1.0' +gem 'version_sorter', '~> 2.2.4' # Export Ruby Regex to Javascript gem 'js_regex', '~> 3.1' diff --git a/Gemfile.lock b/Gemfile.lock index 243a5209ad6..841f85dc7e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -916,7 +916,7 @@ GEM validates_hostname (1.0.6) activerecord (>= 3.0) activesupport (>= 3.0) - version_sorter (2.1.0) + version_sorter (2.2.4) virtus (1.0.5) axiom-types (~> 0.1) coercible (~> 1.0) @@ -1172,7 +1172,7 @@ DEPENDENCIES unicorn (~> 5.4.1) unicorn-worker-killer (~> 0.4.4) validates_hostname (~> 1.0.6) - version_sorter (~> 2.1.0) + version_sorter (~> 2.2.4) virtus (~> 1.0.1) vmstat (~> 2.3.0) webmock (~> 3.5.1) @@ -1 +1 @@ -11.8.0-pre +11.9.0-pre diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js index 57ec6603d80..4d05f46ed17 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js @@ -96,6 +96,11 @@ export default class FilteredSearchDropdownManager { gl: DropdownNonUser, element: this.container.querySelector('#js-dropdown-wip'), }, + confidential: { + reference: null, + gl: DropdownNonUser, + element: this.container.querySelector('#js-dropdown-confidential'), + }, status: { reference: null, gl: NullDropdown, diff --git a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js index b70da240833..48534bdf815 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_token_keys.js +++ b/app/assets/javascripts/filtered_search/filtered_search_token_keys.js @@ -72,6 +72,23 @@ export default class FilteredSearchTokenKeys { ); } + addExtraTokensForIssues() { + const confidentialToken = { + key: 'confidential', + type: 'string', + param: '', + symbol: '', + icon: 'eye-slash', + tag: 'Yes or No', + lowercaseValueOnSubmit: true, + uppercaseTokenName: false, + capitalizeTokenValue: true, + }; + + this.tokenKeys.push(confidentialToken); + this.tokenKeysWithAlternative.push(confidentialToken); + } + addExtraTokensForMergeRequests() { const wipToken = { key: 'wip', diff --git a/app/assets/javascripts/issuable_suggestions/index.js b/app/assets/javascripts/issuable_suggestions/index.js index 2c80cf1797a..40916c9d27f 100644 --- a/app/assets/javascripts/issuable_suggestions/index.js +++ b/app/assets/javascripts/issuable_suggestions/index.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; -import defaultClient from '~/lib/graphql'; +import createDefaultClient from '~/lib/graphql'; import App from './components/app.vue'; Vue.use(VueApollo); @@ -10,7 +10,7 @@ export default function() { const issueTitle = document.getElementById('issue_title'); const { projectPath } = el.dataset; const apolloProvider = new VueApollo({ - defaultClient, + defaultClient: createDefaultClient(), }); return new Vue({ diff --git a/app/assets/javascripts/lib/graphql.js b/app/assets/javascripts/lib/graphql.js index 20a0f142d9e..64e4e899f44 100644 --- a/app/assets/javascripts/lib/graphql.js +++ b/app/assets/javascripts/lib/graphql.js @@ -1,9 +1,11 @@ import ApolloClient from 'apollo-boost'; import csrf from '~/lib/utils/csrf'; -export default new ApolloClient({ - uri: `${gon.relative_url_root}/api/graphql`, - headers: { - [csrf.headerKey]: csrf.token, - }, -}); +export default (clientState = {}) => + new ApolloClient({ + uri: `${gon.relative_url_root}/api/graphql`, + headers: { + [csrf.headerKey]: csrf.token, + }, + clientState, + }); diff --git a/app/assets/javascripts/lib/utils/common_utils.js b/app/assets/javascripts/lib/utils/common_utils.js index 29fe460017e..a73cdb73690 100644 --- a/app/assets/javascripts/lib/utils/common_utils.js +++ b/app/assets/javascripts/lib/utils/common_utils.js @@ -456,21 +456,6 @@ export const historyPushState = newUrl => { export const parseBoolean = value => (value && value.toString()) === 'true'; /** - * Converts permission provided as strings to booleans. - * - * @param {String} string - * @returns {Boolean} - */ -export const convertPermissionToBoolean = permission => { - if (process.env.NODE_ENV !== 'production') { - // eslint-disable-next-line no-console - console.warn('convertPermissionToBoolean is deprecated! Please use parseBoolean instead.'); - } - - return parseBoolean(permission); -}; - -/** * @callback backOffCallback * @param {Function} next * @param {Function} stop diff --git a/app/assets/javascripts/lib/utils/poll.js b/app/assets/javascripts/lib/utils/poll.js index 198711cf427..a900ff34bf5 100644 --- a/app/assets/javascripts/lib/utils/poll.js +++ b/app/assets/javascripts/lib/utils/poll.js @@ -63,6 +63,10 @@ export default class Poll { const headers = normalizeHeaders(response.headers); const pollInterval = parseInt(headers[this.intervalHeader], 10); if (pollInterval > 0 && successCodes.indexOf(response.status) !== -1 && this.canPoll) { + if (this.timeoutID) { + clearTimeout(this.timeoutID); + } + this.timeoutID = setTimeout(() => { this.makeRequest(); }, pollInterval); @@ -101,15 +105,25 @@ export default class Poll { } /** - * Restarts polling after it has been stoped + * Enables polling after it has been stopped */ - restart(options) { - // update data + enable(options) { if (options && options.data) { this.options.data = options.data; } this.canPoll = true; + + if (options && options.response) { + this.checkConditions(options.response); + } + } + + /** + * Restarts polling after it has been stopped and makes a request + */ + restart(options) { + this.enable(options); this.makeRequest(); } } diff --git a/app/assets/javascripts/monitoring/components/charts/area.vue b/app/assets/javascripts/monitoring/components/charts/area.vue index 14c02db7bcc..9e031b03579 100644 --- a/app/assets/javascripts/monitoring/components/charts/area.vue +++ b/app/assets/javascripts/monitoring/components/charts/area.vue @@ -139,8 +139,7 @@ export default { return this.graphData.queries.map(query => query.label).join(', '); }, yAxisLabel() { - const [query] = this.graphData.queries; - return `${this.graphData.y_label} (${query.unit})`; + return `${this.graphData.y_label}`; }, }, watch: { diff --git a/app/assets/javascripts/pages/groups/issues/index.js b/app/assets/javascripts/pages/groups/issues/index.js index 736c6a62610..21ec3f9f9ba 100644 --- a/app/assets/javascripts/pages/groups/issues/index.js +++ b/app/assets/javascripts/pages/groups/issues/index.js @@ -4,6 +4,8 @@ import { FILTERED_SEARCH } from '~/pages/constants'; import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys'; document.addEventListener('DOMContentLoaded', () => { + IssuableFilteredSearchTokenKeys.addExtraTokensForIssues(); + initFilteredSearch({ page: FILTERED_SEARCH.ISSUES, isGroupDecendent: true, diff --git a/app/assets/javascripts/pages/projects/issues/index/index.js b/app/assets/javascripts/pages/projects/issues/index/index.js index a56c0bb6be8..bb91e38cb64 100644 --- a/app/assets/javascripts/pages/projects/issues/index/index.js +++ b/app/assets/javascripts/pages/projects/issues/index/index.js @@ -9,6 +9,8 @@ import { FILTERED_SEARCH } from '~/pages/constants'; import { ISSUABLE_INDEX } from '~/pages/projects/constants'; document.addEventListener('DOMContentLoaded', () => { + IssuableFilteredSearchTokenKeys.addExtraTokensForIssues(); + initFilteredSearch({ page: FILTERED_SEARCH.ISSUES, filteredSearchTokenKeys: IssuableFilteredSearchTokenKeys, diff --git a/app/assets/javascripts/pipelines/components/pipelines_actions.vue b/app/assets/javascripts/pipelines/components/pipelines_actions.vue index a250e3236f5..244d332f38f 100644 --- a/app/assets/javascripts/pipelines/components/pipelines_actions.vue +++ b/app/assets/javascripts/pipelines/components/pipelines_actions.vue @@ -78,11 +78,11 @@ export default { <gl-button :class="{ disabled: isActionDisabled(action) }" :disabled="isActionDisabled(action)" - class="js-pipeline-action-link no-btn btn" + class="js-pipeline-action-link no-btn btn d-flex align-items-center justify-content-between flex-wrap" @click="onClickAction(action)" > {{ action.name }} - <span v-if="action.scheduled_at" class="pull-right"> + <span v-if="action.scheduled_at"> <icon name="clock" /> <gl-countdown :end-date-string="action.scheduled_at" /> </span> diff --git a/app/assets/javascripts/pipelines/mixins/pipelines.js b/app/assets/javascripts/pipelines/mixins/pipelines.js index 32bfa47e5f2..74ca3071364 100644 --- a/app/assets/javascripts/pipelines/mixins/pipelines.js +++ b/app/assets/javascripts/pipelines/mixins/pipelines.js @@ -94,8 +94,7 @@ export default { this.isLoading = false; this.successCallback(response); - // restart polling - this.poll.restart({ data: this.requestData }); + this.poll.enable({ data: this.requestData, response }); }) .catch(() => { this.isLoading = false; diff --git a/app/assets/javascripts/projects/project_new.js b/app/assets/javascripts/projects/project_new.js index d65e73a3f9c..f021698a7ea 100644 --- a/app/assets/javascripts/projects/project_new.js +++ b/app/assets/javascripts/projects/project_new.js @@ -145,6 +145,26 @@ const bindEvents = () => { text: 'Pages/Hexo', icon: '.template-option .icon-hexo', }, + nfhugo: { + text: 'Netlify/Hugo', + icon: '.template-option .icon-netlify', + }, + nfjekyll: { + text: 'Netlify/Jekyll', + icon: '.template-option .icon-netlify', + }, + nfplainhtml: { + text: 'Netlify/Plain HTML', + icon: '.template-option .icon-netlify', + }, + nfgitbook: { + text: 'Netlify/GitBook', + icon: '.template-option .icon-netlify', + }, + nfhexo: { + text: 'Netlify/Hexo', + icon: '.template-option .icon-netlify', + }, }; const selectedTemplate = templates[value]; diff --git a/app/assets/javascripts/releases/store/actions.js b/app/assets/javascripts/releases/store/actions.js index baa2251403e..b5c4d54ac33 100644 --- a/app/assets/javascripts/releases/store/actions.js +++ b/app/assets/javascripts/releases/store/actions.js @@ -11,7 +11,7 @@ export const requestReleases = ({ commit }) => commit(types.REQUEST_RELEASES); /** * Fetches the main endpoint. * Will dispatch requestNamespace action before starting the request. - * Will dispatch receiveNamespaceSuccess if the request is successfull + * Will dispatch receiveNamespaceSuccess if the request is successful * Will dispatch receiveNamesapceError if the request returns an error * * @param {String} projectId diff --git a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue index abbbe19c5ef..57c4dfbe3b7 100644 --- a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue +++ b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.vue @@ -315,7 +315,7 @@ export default { :endpoint="mr.testResultsPath" /> - <div class="mr-widget-section p-0"> + <div class="mr-widget-section"> <component :is="componentName" :mr="mr" :service="service" /> <section v-if="shouldRenderCollaborationStatus" class="mr-info-list mr-links"> diff --git a/app/assets/javascripts/vue_shared/components/select2_select.vue b/app/assets/javascripts/vue_shared/components/select2_select.vue index 19c5da0461a..3074ea859cc 100644 --- a/app/assets/javascripts/vue_shared/components/select2_select.vue +++ b/app/assets/javascripts/vue_shared/components/select2_select.vue @@ -1,5 +1,6 @@ <script> import $ from 'jquery'; +import 'select2/select2'; export default { name: 'Select2Select', diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index bdf20866197..83ad8766cb5 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -40,16 +40,6 @@ @import "components/**/*"; /* - * Code highlight - */ -@import "highlight/dark"; -@import "highlight/monokai"; -@import "highlight/solarized_dark"; -@import "highlight/solarized_light"; -@import "highlight/white"; -@import "highlight/none"; - -/* * Styles for JS behaviors. */ @import "behaviors"; diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss index 62d471bc30c..555ea276c6c 100644 --- a/app/assets/stylesheets/framework.scss +++ b/app/assets/stylesheets/framework.scss @@ -65,3 +65,4 @@ @import 'framework/terms'; @import 'framework/read_more'; @import 'framework/flex_grid'; +@import 'framework/system_messages'; diff --git a/app/assets/stylesheets/framework/markdown_area.scss b/app/assets/stylesheets/framework/markdown_area.scss index 961de8402ef..d6c4e68f68f 100644 --- a/app/assets/stylesheets/framework/markdown_area.scss +++ b/app/assets/stylesheets/framework/markdown_area.scss @@ -149,14 +149,6 @@ margin: 10px 0; } - // Border around images in issue and MR comments. - img:not(.emoji) { - border: 1px solid $white-normal; - padding: 5px; - margin: 5px 0; - // Ensure that image does not exceed viewport - max-height: calc(100vh - 100px); - } table:not(.js-syntax-highlight) { @include markdown-table; diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index b9d0c0d4d96..3b0869e31a9 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -113,11 +113,6 @@ } } -@mixin dark-diff-match-line { - color: $dark-diff-match-bg; - background: $dark-diff-match-color; -} - @mixin webkit-prefix($property, $value) { #{'-webkit-' + $property}: $value; #{$property}: $value; diff --git a/app/assets/stylesheets/framework/system_messages.scss b/app/assets/stylesheets/framework/system_messages.scss new file mode 100644 index 00000000000..3d66136938f --- /dev/null +++ b/app/assets/stylesheets/framework/system_messages.scss @@ -0,0 +1,110 @@ +.header-message, +.footer-message { + padding: 0 15px; + border: 1px solid transparent; + border-radius: 0; + position: fixed; + left: 0; + width: 100%; + text-align: center; + margin: 0; + z-index: 1000; + + p { + @include str-truncated(100%); + margin-top: 0; + margin-bottom: 0; + } +} + +.header-message { + top: 0; + height: $system-header-height; + line-height: $system-header-height; +} + +.footer-message { + bottom: 0; + height: $system-footer-height; + line-height: $system-footer-height; +} + +.with-performance-bar { + .header-message { + top: $performance-bar-height; + } +} + +// System Header +.with-system-header { + // main navigation + // login page + .navbar-gitlab, + .fixed-top { + top: $system-header-height; + } + + // left sidebar eg: project page + // right sidebar eg: MR page + .nav-sidebar, + .right-sidebar { + top: $system-header-height + $header-height; + } + + .content-wrapper { + margin-top: $system-header-height + $header-height; + } + + // Performance Bar + // System Header + &.with-performance-bar { + // main navigation + header.navbar-gitlab { + top: $performance-bar-height + $system-header-height; + } + + .layout-page { + margin-top: $header-height + $performance-bar-height + $system-header-height; + } + + // left sidebar eg: project page + // right sidebar eg: MR page + .nav-sidebar, + .right-sidebar { + top: $header-height + $performance-bar-height + $system-header-height; + } + } +} + +// System Footer +.with-system-footer { + // left sidebar eg: project page + // right sidebar eg: mr page + .nav-sidebar, + .right-sidebar, + // navless pages' footer eg: login page + // navless pages' footer border eg: login page + &.devise-layout-html body .footer-container, + &.devise-layout-html body hr.footer-fixed { + bottom: $system-footer-height; + } +} + +.fullscreen-layout { + .header-message, + .footer-message { + position: static; + top: auto; + bottom: auto; + } + + .content-wrapper { + .with-system-header & { + margin-top: 0; + } + + .with-system-footer & { + margin-top: 0; + } + } +} diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss index bf85acdc0d6..1b36c1f4862 100644 --- a/app/assets/stylesheets/framework/typography.scss +++ b/app/assets/stylesheets/framework/typography.scss @@ -371,6 +371,16 @@ code { .md:not(.use-csslab) { @include md-typography; + + &:not(.wiki) { + img:not(.emoji) { + border: 1px solid $white-normal; + padding: 5px; + margin: 5px 0; + // Ensure that image does not exceed viewport + max-height: calc(100vh - 100px); + } + } } /** diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index dc1a73ed923..27c54cb0b75 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -276,6 +276,8 @@ $general-hover-transition-duration: 100ms; $general-hover-transition-curve: linear; $highlight-changes-color: rgb(235, 255, 232); $performance-bar-height: 35px; +$system-header-height: 35px; +$system-footer-height: $system-header-height; $flash-height: 52px; $context-header-height: 60px; $breadcrumb-min-height: 48px; diff --git a/app/assets/stylesheets/highlight/common.scss b/app/assets/stylesheets/highlight/common.scss new file mode 100644 index 00000000000..2b0794759d5 --- /dev/null +++ b/app/assets/stylesheets/highlight/common.scss @@ -0,0 +1,18 @@ +@import "../framework/variables"; + +@mixin diff-background($background, $idiff, $border) { + background: $background; + + &.line_content span.idiff { + background: $idiff; + } + + &.diff-line-num { + border-color: $border; + } +} + +@mixin dark-diff-match-line { + color: $dark-diff-match-bg; + background: $dark-diff-match-color; +} diff --git a/app/assets/stylesheets/highlight/dark.scss b/app/assets/stylesheets/highlight/themes/dark.scss index ca9a2a673f5..16893dd047e 100644 --- a/app/assets/stylesheets/highlight/dark.scss +++ b/app/assets/stylesheets/highlight/themes/dark.scss @@ -1,5 +1,7 @@ /* https://github.com/MozMorris/tomorrow-pygments */ +@import "../common"; + /* * Dark syntax colors */ diff --git a/app/assets/stylesheets/highlight/monokai.scss b/app/assets/stylesheets/highlight/themes/monokai.scss index bc3761d1e47..37fe61b925c 100644 --- a/app/assets/stylesheets/highlight/monokai.scss +++ b/app/assets/stylesheets/highlight/themes/monokai.scss @@ -1,5 +1,7 @@ /* https://github.com/richleland/pygments-css/blob/master/monokai.css */ +@import "../common"; + /* * Monokai Colors */ diff --git a/app/assets/stylesheets/highlight/none.scss b/app/assets/stylesheets/highlight/themes/none.scss index 4bedb6a8e5b..b4217aac37a 100644 --- a/app/assets/stylesheets/highlight/none.scss +++ b/app/assets/stylesheets/highlight/themes/none.scss @@ -2,7 +2,7 @@ * None Syntax Colors */ - +@import "../common"; @mixin match-line { color: $black-transparent; diff --git a/app/assets/stylesheets/highlight/solarized_dark.scss b/app/assets/stylesheets/highlight/themes/solarized-dark.scss index de7b9424340..a4e9eda22c9 100644 --- a/app/assets/stylesheets/highlight/solarized_dark.scss +++ b/app/assets/stylesheets/highlight/themes/solarized-dark.scss @@ -1,5 +1,7 @@ /* https://gist.github.com/qguv/7936275 */ +@import "../common"; + /* * Solarized dark colors */ diff --git a/app/assets/stylesheets/highlight/solarized_light.scss b/app/assets/stylesheets/highlight/themes/solarized-light.scss index 84a92d0320a..b604d1ccb6c 100644 --- a/app/assets/stylesheets/highlight/solarized_light.scss +++ b/app/assets/stylesheets/highlight/themes/solarized-light.scss @@ -1,5 +1,7 @@ /* https://gist.github.com/qguv/7936275 */ +@import "../common"; + /* * Solarized light syntax colors */ diff --git a/app/assets/stylesheets/highlight/themes/white.scss b/app/assets/stylesheets/highlight/themes/white.scss new file mode 100644 index 00000000000..7239086f649 --- /dev/null +++ b/app/assets/stylesheets/highlight/themes/white.scss @@ -0,0 +1,3 @@ +.code.white { + @import "../white_base"; +} diff --git a/app/assets/stylesheets/highlight/white.scss b/app/assets/stylesheets/highlight/white.scss deleted file mode 100644 index 355c8d223f7..00000000000 --- a/app/assets/stylesheets/highlight/white.scss +++ /dev/null @@ -1,3 +0,0 @@ -.code.white { - @import "white_base"; -} diff --git a/app/assets/stylesheets/highlight/white_base.scss b/app/assets/stylesheets/highlight/white_base.scss index c636abbdfad..23ec3380ce9 100644 --- a/app/assets/stylesheets/highlight/white_base.scss +++ b/app/assets/stylesheets/highlight/white_base.scss @@ -1,5 +1,7 @@ /* https://github.com/aahan/pygments-github-style */ +@import "./common"; + /* * White Syntax Colors */ diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index ae0768592e0..d001dff7986 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -602,18 +602,6 @@ } } -@mixin diff-background($background, $idiff, $border) { - background: $background; - - &.line_content span.idiff { - background: $idiff; - } - - &.diff-line-num { - border-color: $border; - } -} - .files { .diff-file:last-child { margin-bottom: 0; diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 883c856870f..cfd3faab122 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -82,7 +82,6 @@ } .mr-widget-body, -.mr-widget-section, .mr-widget-content, .mr-widget-footer { padding: $gl-padding; diff --git a/app/controllers/admin/appearances_controller.rb b/app/controllers/admin/appearances_controller.rb index e3226c86b0b..2b9cae21da2 100644 --- a/app/controllers/admin/appearances_controller.rb +++ b/app/controllers/admin/appearances_controller.rb @@ -74,6 +74,10 @@ class Admin::AppearancesController < Admin::ApplicationController favicon_cache new_project_guidelines updated_by + header_message + footer_message + message_background_color + message_font_color ] end end diff --git a/app/controllers/clusters/clusters_controller.rb b/app/controllers/clusters/clusters_controller.rb index 3bd91b71d92..68a2a83f0de 100644 --- a/app/controllers/clusters/clusters_controller.rb +++ b/app/controllers/clusters/clusters_controller.rb @@ -24,7 +24,7 @@ class Clusters::ClustersController < Clusters::BaseController # Note: We are paginating through an array here but this should OK as: # # In CE, we can have a maximum group nesting depth of 21, so including - # project cluster, we can have max 22 clusters for a group hierachy. + # project cluster, we can have max 22 clusters for a group hierarchy. # In EE (Premium) we can have any number, as multiple clusters are # supported, but the number of clusters are fairly low currently. # diff --git a/app/controllers/concerns/issuable_collections.rb b/app/controllers/concerns/issuable_collections.rb index 07d0bf16d93..c529aabf797 100644 --- a/app/controllers/concerns/issuable_collections.rb +++ b/app/controllers/concerns/issuable_collections.rb @@ -91,6 +91,7 @@ module IssuableCollections options = { scope: params[:scope], state: params[:state], + confidential: Gitlab::Utils.to_boolean(params[:confidential]), sort: set_sort_order } diff --git a/app/controllers/concerns/lfs_request.rb b/app/controllers/concerns/lfs_request.rb index 5572c3cee2d..57e444319e0 100644 --- a/app/controllers/concerns/lfs_request.rb +++ b/app/controllers/concerns/lfs_request.rb @@ -123,7 +123,7 @@ module LfsRequest (authentication_abilities || []).include?(capability) end - # Overriden in EE + # Overridden in EE def limit_exceeded? false end diff --git a/app/controllers/concerns/notes_actions.rb b/app/controllers/concerns/notes_actions.rb index 0319948a12f..b4fee93713b 100644 --- a/app/controllers/concerns/notes_actions.rb +++ b/app/controllers/concerns/notes_actions.rb @@ -6,7 +6,6 @@ module NotesActions extend ActiveSupport::Concern included do - prepend_before_action :normalize_create_params, only: [:create] before_action :set_polling_interval_header, only: [:index] before_action :require_noteable!, only: [:index, :create] before_action :authorize_admin_note!, only: [:update, :destroy] @@ -44,12 +43,7 @@ module NotesActions # rubocop:disable Gitlab/ModuleWithInstanceVariables def create - create_params = note_params.merge( - merge_request_diff_head_sha: params[:merge_request_diff_head_sha], - in_reply_to_discussion_id: params[:in_reply_to_discussion_id] - ) - - @note = Notes::CreateService.new(note_project, current_user, create_params).execute + @note = Notes::CreateService.new(note_project, current_user, create_note_params).execute respond_to do |format| format.json do @@ -78,7 +72,7 @@ module NotesActions # rubocop:disable Gitlab/ModuleWithInstanceVariables def update - @note = Notes::UpdateService.new(project, current_user, note_params).execute(note) + @note = Notes::UpdateService.new(project, current_user, update_note_params).execute(note) prepare_notes_for_rendering([@note]) respond_to do |format| @@ -196,24 +190,36 @@ module NotesActions return access_denied! unless can?(current_user, :admin_note, note) end - def note_params + def create_note_params params.require(:note).permit( - :project_id, - :noteable_type, - :noteable_id, - :commit_id, - :noteable, :type, - :note, - :attachment, + :line_code, # LegacyDiffNote + :position # DiffNote + ).tap do |create_params| + create_params.merge!( + params.permit(:merge_request_diff_head_sha, :in_reply_to_discussion_id) + ) - # LegacyDiffNote - :line_code, + # These params are also sent by the client but we need to set these based on + # target_type and target_id because we're checking permissions based on that + create_params[:noteable_type] = params[:target_type].classify + + case params[:target_type] + when 'commit' + create_params[:commit_id] = params[:target_id] + when 'merge_request' + create_params[:noteable_id] = params[:target_id] + # Notes on MergeRequest can have an extra `commit_id` context + create_params[:commit_id] = params.dig(:note, :commit_id) + else + create_params[:noteable_id] = params[:target_id] + end + end + end - # DiffNote - :position - ) + def update_note_params + params.require(:note).permit(:note) end def set_polling_interval_header @@ -248,15 +254,6 @@ module NotesActions DiscussionSerializer.new(project: project, noteable: noteable, current_user: current_user, note_entity: ProjectNoteEntity) end - # Avoids checking permissions in the wrong object - this ensures that the object we checked permissions for - # is the object we're actually creating a note in. - def normalize_create_params - params[:note].try do |note| - note[:noteable_id] = params[:target_id] - note[:noteable_type] = params[:target_type].classify - end - end - def note_project strong_memoize(:note_project) do next nil unless project diff --git a/app/controllers/snippets/notes_controller.rb b/app/controllers/snippets/notes_controller.rb index 091bcb1253d..eee14b0faf4 100644 --- a/app/controllers/snippets/notes_controller.rb +++ b/app/controllers/snippets/notes_controller.rb @@ -26,10 +26,6 @@ class Snippets::NotesController < ApplicationController # rubocop: enable CodeReuse/ActiveRecord alias_method :noteable, :snippet - def note_params - super.merge(noteable_id: params[:snippet_id]) - end - def finder_params params.merge(last_fetched_at: last_fetched_at, target_id: snippet.id, target_type: 'personal_snippet') end diff --git a/app/finders/group_descendants_finder.rb b/app/finders/group_descendants_finder.rb index 96a36db7ec8..ec340f38450 100644 --- a/app/finders/group_descendants_finder.rb +++ b/app/finders/group_descendants_finder.rb @@ -134,7 +134,7 @@ class GroupDescendantsFinder def subgroups return Group.none unless Group.supports_nested_objects? - # When filtering subgroups, we want to find all matches withing the tree of + # When filtering subgroups, we want to find all matches within the tree of # descendants to show to the user groups = if params[:filter] subgroups_matching_filter diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 23af2e0521c..5870f158690 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -94,6 +94,7 @@ class IssuableFinder items = by_scope(items) items = by_created_at(items) items = by_updated_at(items) + items = by_closed_at(items) items = by_state(items) items = by_group(items) items = by_assignee(items) @@ -353,6 +354,13 @@ class IssuableFinder items end + def by_closed_at(items) + items = items.closed_after(params[:closed_after]) if params[:closed_after].present? + items = items.closed_before(params[:closed_before]) if params[:closed_before].present? + + items + end + # rubocop: disable CodeReuse/ActiveRecord def by_state(items) case params[:state].to_s diff --git a/app/finders/issues_finder.rb b/app/finders/issues_finder.rb index a0504ca0879..cb44575d6f1 100644 --- a/app/finders/issues_finder.rb +++ b/app/finders/issues_finder.rb @@ -69,7 +69,16 @@ class IssuesFinder < IssuableFinder end def filter_items(items) - by_due_date(super) + issues = super + issues = by_due_date(issues) + issues = by_confidential(issues) + issues + end + + def by_confidential(items) + return items if params[:confidential].nil? + + params[:confidential] ? items.confidential_only : items.public_only end def by_due_date(items) diff --git a/app/graphql/resolvers/issues_resolver.rb b/app/graphql/resolvers/issues_resolver.rb index fd1b46ba860..b98d8bd1fff 100644 --- a/app/graphql/resolvers/issues_resolver.rb +++ b/app/graphql/resolvers/issues_resolver.rb @@ -9,7 +9,30 @@ module Resolvers argument :iids, [GraphQL::ID_TYPE], required: false, description: 'The list of IIDs of issues, e.g., [1, 2]' - + argument :state, Types::IssuableStateEnum, + required: false, + description: "Current state of Issue" + argument :label_name, GraphQL::STRING_TYPE.to_list_type, + required: false, + description: "Labels applied to the Issue" + argument :created_before, Types::TimeType, + required: false, + description: "Issues created before this date" + argument :created_after, Types::TimeType, + required: false, + description: "Issues created after this date" + argument :updated_before, Types::TimeType, + required: false, + description: "Issues updated before this date" + argument :updated_after, Types::TimeType, + required: false, + description: "Issues updated after this date" + argument :closed_before, Types::TimeType, + required: false, + description: "Issues closed before this date" + argument :closed_after, Types::TimeType, + required: false, + description: "Issues closed after this date" argument :search, GraphQL::STRING_TYPE, required: false argument :sort, Types::Sort, diff --git a/app/graphql/types/issuable_state_enum.rb b/app/graphql/types/issuable_state_enum.rb new file mode 100644 index 00000000000..f2f6d6c6cab --- /dev/null +++ b/app/graphql/types/issuable_state_enum.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Types + class IssuableStateEnum < BaseEnum + graphql_name 'IssuableState' + description 'State of a GitLab issue or merge request' + + value 'opened' + value 'closed' + value 'locked' + end +end diff --git a/app/graphql/types/issue_state_enum.rb b/app/graphql/types/issue_state_enum.rb new file mode 100644 index 00000000000..6521407fc9d --- /dev/null +++ b/app/graphql/types/issue_state_enum.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Types + class IssueStateEnum < IssuableStateEnum + graphql_name 'IssueState' + description 'State of a GitLab issue' + end +end diff --git a/app/graphql/types/issue_type.rb b/app/graphql/types/issue_type.rb index a8f2f7914a8..87f6b1f8278 100644 --- a/app/graphql/types/issue_type.rb +++ b/app/graphql/types/issue_type.rb @@ -11,7 +11,7 @@ module Types field :iid, GraphQL::ID_TYPE, null: false field :title, GraphQL::STRING_TYPE, null: false field :description, GraphQL::STRING_TYPE, null: true - field :state, GraphQL::STRING_TYPE, null: false + field :state, IssueStateEnum, null: false field :author, Types::UserType, null: false, diff --git a/app/graphql/types/merge_request_state_enum.rb b/app/graphql/types/merge_request_state_enum.rb new file mode 100644 index 00000000000..92f52726ab3 --- /dev/null +++ b/app/graphql/types/merge_request_state_enum.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Types + class MergeRequestStateEnum < IssuableStateEnum + graphql_name 'MergeRequestState' + description 'State of a GitLab merge request' + + value 'merged' + end +end diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb index 7e63d4022b1..7827b6e3717 100644 --- a/app/graphql/types/merge_request_type.rb +++ b/app/graphql/types/merge_request_type.rb @@ -12,7 +12,7 @@ module Types field :iid, GraphQL::ID_TYPE, null: false field :title, GraphQL::STRING_TYPE, null: false field :description, GraphQL::STRING_TYPE, null: true - field :state, GraphQL::STRING_TYPE, null: true + field :state, MergeRequestStateEnum, null: false field :created_at, Types::TimeType, null: false field :updated_at, Types::TimeType, null: false field :source_project, Types::ProjectType, null: true diff --git a/app/helpers/appearances_helper.rb b/app/helpers/appearances_helper.rb index 7fbbbb04154..023e44258b7 100644 --- a/app/helpers/appearances_helper.rb +++ b/app/helpers/appearances_helper.rb @@ -40,4 +40,36 @@ module AppearancesHelper render 'shared/logo_type.svg' end end + + def header_message + return unless current_appearance&.show_header? + + class_names = [] + class_names << 'with-performance-bar' if performance_bar_enabled? + + render_message(:header_message, class_names) + end + + def footer_message + return unless current_appearance&.show_footer? + + render_message(:footer_message) + end + + private + + def render_message(field_sym, class_names = []) + class_names << field_sym.to_s.dasherize + + content_tag :div, class: class_names, style: message_style do + markdown_field(current_appearance, field_sym) + end + end + + def message_style + style = [] + style << "background-color: #{current_appearance.message_background_color};" + style << "color: #{current_appearance.message_font_color}" + style.join + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 9efa84b02f0..ffa5719fefb 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -214,12 +214,19 @@ module ApplicationHelper class_names = [] class_names << 'issue-boards-page' if current_controller?(:boards) class_names << 'with-performance-bar' if performance_bar_enabled? - + class_names << system_message_class class_names end - # EE feature: System header and footer, unavailable in CE def system_message_class + class_names = [] + + return class_names unless appearance + + class_names << 'with-system-header' if appearance.show_header? + class_names << 'with-system-footer' if appearance.show_footer? + + class_names end # Returns active css class when condition returns true @@ -292,4 +299,10 @@ module ApplicationHelper snippets: snippets_project_autocomplete_sources_path(object) } end + + private + + def appearance + ::Appearance.current + end end diff --git a/app/helpers/count_helper.rb b/app/helpers/count_helper.rb index 13839474e1f..62bb2e4da23 100644 --- a/app/helpers/count_helper.rb +++ b/app/helpers/count_helper.rb @@ -13,7 +13,7 @@ module CountHelper # memberships, and deducting 1 for each root of the fork network. # This might be inacurate as the root of the fork network might have been deleted. # - # This makes querying this information a lot more effecient and it should be + # This makes querying this information a lot more efficient and it should be # accurate enough for the instance wide statistics def approximate_fork_count_with_delimiters(count_data) fork_network_count = count_data[ForkNetwork] diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index 39f661b5f0c..bd53add80ca 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -227,6 +227,10 @@ module LabelsHelper "#{action} at #{level} level" end + def labels_sorted_by_title(labels) + labels.sort_by(&:title) + end + # Required for Banzai::Filter::LabelReferenceFilter module_function :render_colored_label, :text_color_for_bg, :escape_once end diff --git a/app/models/appearance.rb b/app/models/appearance.rb index ff1ecfda684..b9ad676ca47 100644 --- a/app/models/appearance.rb +++ b/app/models/appearance.rb @@ -8,12 +8,19 @@ class Appearance < ActiveRecord::Base cache_markdown_field :description cache_markdown_field :new_project_guidelines + cache_markdown_field :header_message, pipeline: :broadcast_message + cache_markdown_field :footer_message, pipeline: :broadcast_message validates :logo, file_size: { maximum: 1.megabyte } validates :header_logo, file_size: { maximum: 1.megabyte } + validates :message_background_color, allow_blank: true, color: true + validates :message_font_color, allow_blank: true, color: true validate :single_appearance_row, on: :create + default_value_for :message_background_color, '#E75E40' + default_value_for :message_font_color, '#FFFFFF' + mount_uploader :logo, AttachmentUploader mount_uploader :header_logo, AttachmentUploader mount_uploader :favicon, FaviconUploader @@ -41,6 +48,14 @@ class Appearance < ActiveRecord::Base logo_system_path(favicon, 'favicon') end + def show_header? + header_message.present? + end + + def show_footer? + footer_message.present? + end + private def logo_system_path(logo, mount_type) diff --git a/app/models/ci/build_trace_chunk.rb b/app/models/ci/build_trace_chunk.rb index da08214963f..33e61cd2111 100644 --- a/app/models/ci/build_trace_chunk.rb +++ b/app/models/ci/build_trace_chunk.rb @@ -18,7 +18,7 @@ module Ci FailedToPersistDataError = Class.new(StandardError) # Note: The ordering of this enum is related to the precedence of persist store. - # The bottom item takes the higest precedence, and the top item takes the lowest precedence. + # The bottom item takes the highest precedence, and the top item takes the lowest precedence. enum data_store: { redis: 1, database: 2, diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb index f17da0bb7b1..941551dadaa 100644 --- a/app/models/clusters/applications/runner.rb +++ b/app/models/clusters/applications/runner.rb @@ -3,7 +3,7 @@ module Clusters module Applications class Runner < ActiveRecord::Base - VERSION = '0.1.45'.freeze + VERSION = '0.2.0'.freeze self.table_name = 'clusters_applications_runners' diff --git a/app/models/concerns/closed_at_filterable.rb b/app/models/concerns/closed_at_filterable.rb new file mode 100644 index 00000000000..239c2e47611 --- /dev/null +++ b/app/models/concerns/closed_at_filterable.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module ClosedAtFilterable + extend ActiveSupport::Concern + + included do + scope :closed_before, ->(date) { where(scoped_table[:closed_at].lteq(date)) } + scope :closed_after, ->(date) { where(scoped_table[:closed_at].gteq(date)) } + + def self.scoped_table + arel_table.alias(table_name) + end + end +end diff --git a/app/models/concerns/fast_destroy_all.rb b/app/models/concerns/fast_destroy_all.rb index 1e3afd641ed..f862031bce0 100644 --- a/app/models/concerns/fast_destroy_all.rb +++ b/app/models/concerns/fast_destroy_all.rb @@ -11,7 +11,7 @@ # it is difficult to accomplish it. # # This module defines a format to use `delete_all` and delete associated external data. -# Here is an exmaple +# Here is an example # # Situation # - `Project` has many `Ci::BuildTraceChunk` through `Ci::Build` diff --git a/app/models/concerns/iid_routes.rb b/app/models/concerns/iid_routes.rb index b7f99e845ca..3eeb29b6595 100644 --- a/app/models/concerns/iid_routes.rb +++ b/app/models/concerns/iid_routes.rb @@ -4,7 +4,7 @@ module IidRoutes ## # This automagically enforces all related routes to use `iid` instead of `id` # If you want to use `iid` for some routes and `id` for other routes, this module should not to be included, - # instead you should define `iid` or `id` explictly at each route generators. e.g. pipeline_path(project.id, pipeline.iid) + # instead you should define `iid` or `id` explicitly at each route generators. e.g. pipeline_path(project.id, pipeline.iid) def to_param iid.to_s end diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 0a77fbeba08..429a63f83cc 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -23,6 +23,7 @@ module Issuable include Sortable include CreatedAtFilterable include UpdatedAtFilterable + include ClosedAtFilterable # This object is used to gather issuable meta data for displaying # upvotes, downvotes, notes and closing merge requests count for issues and merge requests diff --git a/app/models/issue.rb b/app/models/issue.rb index 182c5d3d4b0..0b46e949052 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -66,6 +66,7 @@ class Issue < ActiveRecord::Base scope :preload_associations, -> { preload(:labels, project: :namespace) } scope :public_only, -> { where(confidential: false) } + scope :confidential_only, -> { where(confidential: true) } after_save :expire_etag_cache after_save :ensure_metrics, unless: :imported? diff --git a/app/models/network/graph.rb b/app/models/network/graph.rb index 6da3bb7bfb7..ecbeb24ee0a 100644 --- a/app/models/network/graph.rb +++ b/app/models/network/graph.rb @@ -40,9 +40,12 @@ module Network # Get commits from repository # def collect_commits - find_commits(count_to_display_commit_in_center).map do |commit| - # Decorate with app/model/network/commit.rb - Network::Commit.new(commit) + # https://gitlab.com/gitlab-org/gitlab-ce/issues/58013 + Gitlab::GitalyClient.allow_n_plus_1_calls do + find_commits(count_to_display_commit_in_center).map do |commit| + # Decorate with app/model/network/commit.rb + Network::Commit.new(commit) + end end end diff --git a/app/models/notification_recipient.rb b/app/models/notification_recipient.rb index 9f16eefe074..481c1d963c6 100644 --- a/app/models/notification_recipient.rb +++ b/app/models/notification_recipient.rb @@ -153,7 +153,7 @@ class NotificationRecipient user.global_notification_setting end - # Returns the notificaton_setting of the lowest group in hierarchy with non global level + # Returns the notification_setting of the lowest group in hierarchy with non global level def closest_non_global_group_notification_settting return unless @group return if indexed_group_notification_settings.empty? diff --git a/app/models/project.rb b/app/models/project.rb index c72d3a3b725..62e73e2ef9f 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -248,10 +248,10 @@ class Project < ActiveRecord::Base has_many :container_repositories, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_many :commit_statuses - # The relation :all_pipelines is intented to be used when we want to get the + # The relation :all_pipelines is intended to be used when we want to get the # whole list of pipelines associated to the project has_many :all_pipelines, class_name: 'Ci::Pipeline', inverse_of: :project - # The relation :ci_pipelines is intented to be used when we want to get only + # The relation :ci_pipelines is intended to be used when we want to get only # those pipeline which are directly related to CI. There are # other pipelines, like webide ones, that we won't retrieve # if we use this relation. @@ -1206,7 +1206,7 @@ class Project < ActiveRecord::Base "#{web_url}.git" end - # Is overriden in EE + # Is overridden in EE def lfs_http_url_to_repo(_) http_url_to_repo end diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index c4f69175de3..35a0efcd0a1 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -112,10 +112,10 @@ module Ci def extra_options(options = {}) # In Ruby 2.4, even when options is empty, f(**options) doesn't work when f # doesn't have any parameters. We reproduce the Ruby 2.5 behavior by - # checking explicitely that no arguments are given. + # checking explicitly that no arguments are given. raise ArgumentError if options.any? - {} # overriden in EE + {} # overridden in EE end end end diff --git a/app/services/ci/pipeline_trigger_service.rb b/app/services/ci/pipeline_trigger_service.rb index 4ba3f5fb8ba..2dbb7c3917d 100644 --- a/app/services/ci/pipeline_trigger_service.rb +++ b/app/services/ci/pipeline_trigger_service.rb @@ -38,11 +38,11 @@ module Ci end def create_pipeline_from_job(job) - # overriden in EE + # overridden in EE end def job_from_token - # overriden in EE + # overridden in EE end def variables diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index 092fd64574d..f387c749a21 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -235,6 +235,6 @@ class GitPushService < BaseService private def pipeline_options - {} # to be overriden in EE + {} # to be overridden in EE end end diff --git a/app/services/git_tag_push_service.rb b/app/services/git_tag_push_service.rb index 6fef5b3ed1d..e39b3603c6c 100644 --- a/app/services/git_tag_push_service.rb +++ b/app/services/git_tag_push_service.rb @@ -61,6 +61,6 @@ class GitTagPushService < BaseService end def pipeline_options - {} # to be overriden in EE + {} # to be overridden in EE end end diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb index 55a3b9fa7b1..99ead467f74 100644 --- a/app/services/groups/create_service.rb +++ b/app/services/groups/create_service.rb @@ -33,7 +33,7 @@ module Groups private def after_build_hook(group, params) - # overriden in EE + # overridden in EE end def create_chat_team? diff --git a/app/services/groups/update_service.rb b/app/services/groups/update_service.rb index 9ff1da270e2..787445180f0 100644 --- a/app/services/groups/update_service.rb +++ b/app/services/groups/update_service.rb @@ -31,7 +31,7 @@ module Groups private def before_assignment_hook(group, params) - # overriden in EE + # overridden in EE end def after_update diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index ec6c306227b..ea8ac7e4656 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -360,7 +360,7 @@ module SystemNoteService # author - User performing the change # branch_type - 'source' or 'target' # old_branch - old branch name - # new_branch - new branch nmae + # new_branch - new branch name # # Example Note text: # diff --git a/app/views/admin/appearances/_form.html.haml b/app/views/admin/appearances/_form.html.haml index 77e84abd76e..a5f34d0dab2 100644 --- a/app/views/admin/appearances/_form.html.haml +++ b/app/views/admin/appearances/_form.html.haml @@ -42,6 +42,7 @@ %br Images with incorrect dimensions are not resized automatically, and may result in unexpected behavior. + = render partial: 'admin/appearances/system_header_footer_form', locals: { form: f } %hr .row diff --git a/app/views/admin/appearances/_system_header_footer_form.html.haml b/app/views/admin/appearances/_system_header_footer_form.html.haml new file mode 100644 index 00000000000..ca9d6adebeb --- /dev/null +++ b/app/views/admin/appearances/_system_header_footer_form.html.haml @@ -0,0 +1,24 @@ +- form = local_assigns.fetch(:form) + +%hr +.row + .col-lg-4.profile-settings-sidebar + %h4.prepend-top-0 + = _('System header and footer') + + .col-lg-8 + .form-group + = form.label :header_message, _('Header message'), class: 'col-form-label label-bold' + = form.text_area :header_message, placeholder: _('State your message to activate'), class: "form-control js-autosize" + .form-group + = form.label :footer_message, _('Footer message'), class: 'col-form-label label-bold' + = form.text_area :footer_message, placeholder: _('State your message to activate'), class: "form-control js-autosize" + .form-group.js-toggle-colors-container + %button.btn.btn-link.js-toggle-colors-link{ type: 'button' } + = _('Customize colors') + .form-group.js-toggle-colors-container.hide + = form.label :message_background_color, _('Background Color'), class: 'col-form-label label-bold' + = form.color_field :message_background_color, class: "form-control" + .form-group.js-toggle-colors-container.hide + = form.label :message_font_color, _('Font Color'), class: 'col-form-label label-bold' + = form.color_field :message_font_color, class: "form-control" diff --git a/app/views/admin/runners/_runner.html.haml b/app/views/admin/runners/_runner.html.haml index ec57eb1ed08..4641986cb56 100644 --- a/app/views/admin/runners/_runner.html.haml +++ b/app/views/admin/runners/_runner.html.haml @@ -44,7 +44,7 @@ .table-section.section-5 .table-mobile-header{ role: 'rowheader' }= _('Jobs') .table-mobile-content - = runner.builds.count(:all) + = limited_counter_with_delimiter(runner.builds) .table-section.section-10.section-wrap .table-mobile-header{ role: 'rowheader' }= _('Tags') diff --git a/app/views/dashboard/_snippets_head.html.haml b/app/views/dashboard/_snippets_head.html.haml index 8d99f84755a..a05d0190efb 100644 --- a/app/views/dashboard/_snippets_head.html.haml +++ b/app/views/dashboard/_snippets_head.html.haml @@ -1,9 +1,9 @@ .page-title-holder %h1.page-title= _('Snippets') - - if current_user + - if current_user && current_user.snippets.any? || @snippets.any? .page-title-controls - = link_to "New snippet", new_snippet_path, class: "btn btn-success", title: "New snippet" + = link_to _("New snippet"), new_snippet_path, class: "btn btn-success", title: _("New snippet") .top-area %ul.nav-links.nav.nav-tabs diff --git a/app/views/dashboard/snippets/index.html.haml b/app/views/dashboard/snippets/index.html.haml index 6eb067da95c..b649fe91c24 100644 --- a/app/views/dashboard/snippets/index.html.haml +++ b/app/views/dashboard/snippets/index.html.haml @@ -3,6 +3,14 @@ - header_title "Snippets", dashboard_snippets_path = render 'dashboard/snippets_head' -= render partial: 'snippets/snippets_scope_menu', locals: { include_private: true } +- if current_user.snippets.exists? + = render partial: 'snippets/snippets_scope_menu', locals: { include_private: true } -= render partial: 'snippets/snippets', locals: { link_project: true } +.d-block.d-sm-none + + = link_to _("New snippet"), new_snippet_path, class: "btn btn-success btn-block", title: _("New snippet") + +- if current_user.snippets.exists? + = render partial: 'shared/snippets/list', locals: { link_project: true } +- else + = render 'shared/empty_states/snippets', button_path: new_snippet_path diff --git a/app/views/explore/snippets/index.html.haml b/app/views/explore/snippets/index.html.haml index 94fc4ac21d2..d23c8301b10 100644 --- a/app/views/explore/snippets/index.html.haml +++ b/app/views/explore/snippets/index.html.haml @@ -7,4 +7,4 @@ - else = render 'explore/head' -= render partial: 'snippets/snippets', locals: { link_project: true } += render partial: 'shared/snippets/list', locals: { link_project: true } diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index 0bb2363f65a..11e83ddfe64 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -38,6 +38,8 @@ = stylesheet_link_tag 'performance_bar' if performance_bar_enabled? = stylesheet_link_tag 'csslab' if Feature.enabled?(:csslab) + = stylesheet_link_tag "highlight/themes/#{user_color_scheme}", media: "all" + = Gon::Base.render_data - if content_for?(:library_javascripts) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 4373240001e..043cca6ad38 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -5,7 +5,9 @@ = render "layouts/init_auto_complete" if @gfm_form = render "layouts/init_client_detection_flags" = render 'peek/bar' - = render partial: "layouts/header/default", locals: { project: @project, group: @group } + = header_message + = render partial: "layouts/header/default", locals: { project: @project, group: @group } = render 'layouts/page', sidebar: sidebar, nav: nav + = footer_message = yield :scripts_body diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml index 6003d973c88..2f3c13aaf6e 100644 --- a/app/views/layouts/devise.html.haml +++ b/app/views/layouts/devise.html.haml @@ -2,6 +2,7 @@ %html.devise-layout-html{ class: system_message_class } = render "layouts/head" %body.ui-indigo.login-page.application.navless.qa-login-page{ data: { page: body_data_page } } + = header_message .page-wrap = render "layouts/header/empty" .login-page-broadcast @@ -34,3 +35,4 @@ = link_to _("Explore"), explore_root_path = link_to _("Help"), help_path = link_to _("About GitLab"), "https://about.gitlab.com/" + = footer_message diff --git a/app/views/layouts/devise_empty.html.haml b/app/views/layouts/devise_empty.html.haml index 663e5b24368..6c9c8aa4431 100644 --- a/app/views/layouts/devise_empty.html.haml +++ b/app/views/layouts/devise_empty.html.haml @@ -2,6 +2,7 @@ %html{ lang: "en", class: system_message_class } = render "layouts/head" %body.ui-indigo.login-page.application.navless + = header_message = render "layouts/header/empty" = render "layouts/broadcast" .container.navless-container @@ -15,3 +16,4 @@ = link_to _("Explore"), explore_root_path = link_to _("Help"), help_path = link_to _("About GitLab"), "https://about.gitlab.com/" + = footer_message diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml index c64ad1c8147..91c51d5e091 100644 --- a/app/views/projects/branches/_branch.html.haml +++ b/app/views/projects/branches/_branch.html.haml @@ -53,9 +53,8 @@ = _('Merge request') - if branch.name != @repository.root_ref - = link_to project_compare_index_path(@project, from: @repository.root_ref, to: branch.name), + = link_to project_compare_path(@project, @repository.root_ref, branch.name), class: "btn btn-default #{'prepend-left-10' unless merge_project}", - method: :post, title: s_('Branches|Compare') do = s_('Branches|Compare') diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index 31c72f2f759..ce7c7091c93 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -36,7 +36,7 @@ = issue.due_date.to_s(:medium) - if issue.labels.any? - - issue.labels.each do |label| + - labels_sorted_by_title(issue.labels).each do |label| = link_to_label(label, subject: issue.project, css_class: 'label-link') .issuable-meta diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml index ac29cd8f679..90916191d97 100644 --- a/app/views/projects/merge_requests/_merge_request.html.haml +++ b/app/views/projects/merge_requests/_merge_request.html.haml @@ -34,7 +34,7 @@ = merge_request.target_branch - if merge_request.labels.any? - - merge_request.labels.each do |label| + - labels_sorted_by_title(merge_request.labels).each do |label| = link_to_label(label, subject: merge_request.project, type: :merge_request, css_class: 'label-link') .issuable-meta diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml index 69a47faabed..9c2efd6aa35 100644 --- a/app/views/projects/pipelines/_info.html.haml +++ b/app/views/projects/pipelines/_info.html.haml @@ -23,7 +23,7 @@ - if @pipeline.queued_duration = "(queued for #{time_interval_in_words(@pipeline.queued_duration)})" - .well-segment + .well-segment.qa-pipeline-badges .icon-container = sprite_icon('flag') - if @pipeline.latest? diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml index a4974d89c1a..7682d01a5a1 100644 --- a/app/views/projects/snippets/index.html.haml +++ b/app/views/projects/snippets/index.html.haml @@ -1,12 +1,16 @@ - page_title _("Snippets") -- if current_user - .top-area - - include_private = @project.team.member?(current_user) || current_user.admin? - = render partial: 'snippets/snippets_scope_menu', locals: { subject: @project, include_private: include_private } +- if @snippets.exists? + - if current_user + .top-area + - include_private = @project.team.member?(current_user) || current_user.admin? + = render partial: 'snippets/snippets_scope_menu', locals: { subject: @project, include_private: include_private } - .nav-controls - if can?(current_user, :create_project_snippet, @project) - = link_to _("New snippet"), new_project_snippet_path(@project), class: "btn btn-success", title: _("New snippet") + .nav-controls + - if can?(current_user, :create_project_snippet, @project) + = link_to _("New snippet"), new_project_snippet_path(@project), class: "btn btn-success", title: _("New snippet") -= render 'snippets/snippets' + = render 'shared/snippets/list' +- else + = render 'shared/empty_states/snippets', button_path: new_namespace_project_snippet_path(@project.namespace, @project) diff --git a/app/views/projects/snippets/new.html.haml b/app/views/projects/snippets/new.html.haml index 26b333d4ecf..d64e3a49a81 100644 --- a/app/views/projects/snippets/new.html.haml +++ b/app/views/projects/snippets/new.html.haml @@ -1,8 +1,8 @@ - add_to_breadcrumbs _("Snippets"), project_snippets_path(@project) - breadcrumb_title _("New") -- page_title _("New Snippets") +- page_title _("New Snippet") %h3.page-title - = _('New Snippet') + = _("New Snippet") %hr = render "shared/snippets/form", url: project_snippets_path(@project, @snippet) diff --git a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml index 422be28737c..755fd3a17d3 100644 --- a/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml +++ b/app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml @@ -1,5 +1,5 @@ - if show_auto_devops_implicitly_enabled_banner?(project, current_user) - .auto-devops-implicitly-enabled-banner.alert.alert-warning + .qa-auto-devops-banner.auto-devops-implicitly-enabled-banner.alert.alert-warning - more_information_link = link_to _('More information'), help_page_path('topics/autodevops/index.md'), target: '_blank', class: 'alert-link' - auto_devops_message = s_("AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if no alternative CI configuration file is found. %{more_information_link}") % { more_information_link: more_information_link } = auto_devops_message.html_safe diff --git a/app/views/shared/empty_states/_snippets.html.haml b/app/views/shared/empty_states/_snippets.html.haml new file mode 100644 index 00000000000..a1a16b9d067 --- /dev/null +++ b/app/views/shared/empty_states/_snippets.html.haml @@ -0,0 +1,20 @@ +- button_path = local_assigns.fetch(:button_path, false) + +.row.empty-state + .col-12 + .svg-content + = image_tag 'illustrations/snippets_empty.svg' + .text-content + - if current_user + %h4 + = s_('SnippetsEmptyState|Snippets are small pieces of code or notes that you want to keep.') + %p + = s_('SnippetsEmptyState|They can be either public or private.') + .text-center + = link_to s_('SnippetsEmptyState|New snippet'), button_path, class: 'btn btn-success', title: s_('SnippetsEmptyState|New snippet'), id: 'new_snippet_link' + - unless current_page?(dashboard_snippets_path) + = link_to s_('SnippetsEmptyState|Explore public snippets'), explore_snippets_path, class: 'btn btn-default', title: s_('SnippetsEmptyState|Explore public snippets') + - else + %h4.text-center= s_('SnippetsEmptyState|There are no snippets to show.') + + diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml index 588659c7e9c..bdba47ed14d 100644 --- a/app/views/shared/issuable/_search_bar.html.haml +++ b/app/views/shared/issuable/_search_bar.html.haml @@ -128,6 +128,14 @@ %li.filter-dropdown-item{ data: { value: 'no', capitalize: true } } %button.btn.btn-link{ type: 'button' } = _('No') + #js-dropdown-confidential.filtered-search-input-dropdown-menu.dropdown-menu + %ul.filter-dropdown{ data: { dropdown: true } } + %li.filter-dropdown-item{ data: { value: 'yes', capitalize: true } } + %button.btn.btn-link{ type: 'button' } + = _('Yes') + %li.filter-dropdown-item{ data: { value: 'no', capitalize: true } } + %button.btn.btn-link{ type: 'button' } + = _('No') = render_if_exists 'shared/issuable/filter_weight', type: type diff --git a/app/views/shared/snippets/_list.html.haml b/app/views/shared/snippets/_list.html.haml new file mode 100644 index 00000000000..5d2152eb411 --- /dev/null +++ b/app/views/shared/snippets/_list.html.haml @@ -0,0 +1,12 @@ +- remote = local_assigns.fetch(:remote, false) +- link_project = local_assigns.fetch(:link_project, false) + +- if @snippets.exists? + .snippets-list-holder + %ul.content-list + = render partial: 'shared/snippets/snippet', collection: @snippets, locals: { link_project: link_project } + + = paginate @snippets, theme: 'gitlab', remote: remote + +- else + .nothing-here-block= s_("SnippetsEmptyState|No snippets found") diff --git a/app/views/snippets/index.html.haml b/app/views/snippets/index.html.haml index 4f418e2381f..f5fe75bed5a 100644 --- a/app/views/snippets/index.html.haml +++ b/app/views/snippets/index.html.haml @@ -10,4 +10,4 @@ = link_to user_path(@user) do = _("%{user_name} profile page") % { user_name: @user.name } -= render 'snippets' += render 'shared/snippets/list' diff --git a/changelogs/unreleased/19745-forms-with-task-lists-can-be-overwritten-when-editing-simultaneously.yml b/changelogs/unreleased/19745-forms-with-task-lists-can-be-overwritten-when-editing-simultaneously.yml deleted file mode 100644 index b1177e1717e..00000000000 --- a/changelogs/unreleased/19745-forms-with-task-lists-can-be-overwritten-when-editing-simultaneously.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Increase reliability and performance of toggling task items -merge_request: 23938 -author: -type: fixed diff --git a/changelogs/unreleased/2105-add-setting-for-first-day-of-the-week.yml b/changelogs/unreleased/2105-add-setting-for-first-day-of-the-week.yml deleted file mode 100644 index f4a52b1aacd..00000000000 --- a/changelogs/unreleased/2105-add-setting-for-first-day-of-the-week.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add setting for first day of the week -merge_request: 22755 -author: Fabian Schneider @fabsrc -type: added diff --git a/changelogs/unreleased/24680-support-bamboo-api-polymorphism.yml b/changelogs/unreleased/24680-support-bamboo-api-polymorphism.yml deleted file mode 100644 index 5117195cd0c..00000000000 --- a/changelogs/unreleased/24680-support-bamboo-api-polymorphism.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Support bamboo api polymorphism" -merge_request: 24680 -author: Alex Lossent -type: fixed
\ No newline at end of file diff --git a/changelogs/unreleased/24875-label.yml b/changelogs/unreleased/24875-label.yml deleted file mode 100644 index 1f9d2222edf..00000000000 --- a/changelogs/unreleased/24875-label.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Append prioritized label before pagination -merge_request: 24815 -author: -type: fixed diff --git a/changelogs/unreleased/25043-empty-states.yml b/changelogs/unreleased/25043-empty-states.yml deleted file mode 100644 index 529a8b3206f..00000000000 --- a/changelogs/unreleased/25043-empty-states.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make issuable empty states actionable -merge_request: 24077 -author: -type: changed diff --git a/changelogs/unreleased/25569-changing-wording-to-delete-when-referring-to-removing-a-branch.yml b/changelogs/unreleased/25569-changing-wording-to-delete-when-referring-to-removing-a-branch.yml deleted file mode 100644 index 02a667073ca..00000000000 --- a/changelogs/unreleased/25569-changing-wording-to-delete-when-referring-to-removing-a-branch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use delete instead of remove when referring to `git branch -D` -merge_request: !23966 -author: -type: changed diff --git a/changelogs/unreleased/26375-markdown-footnotes-not-working.yml b/changelogs/unreleased/26375-markdown-footnotes-not-working.yml deleted file mode 100644 index 86adef84a2a..00000000000 --- a/changelogs/unreleased/26375-markdown-footnotes-not-working.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Footnotes now render properly in markdown -merge_request: 24168 -author: -type: fixed diff --git a/changelogs/unreleased/28500-empty-states-for-profile-page.yml b/changelogs/unreleased/28500-empty-states-for-profile-page.yml deleted file mode 100644 index 53f840521ae..00000000000 --- a/changelogs/unreleased/28500-empty-states-for-profile-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refresh empty states for profile page tabs -merge_request: 24549 -author: -type: changed diff --git a/changelogs/unreleased/30120-add-flat-square-badge-style.yml b/changelogs/unreleased/30120-add-flat-square-badge-style.yml deleted file mode 100644 index a542a58d3fc..00000000000 --- a/changelogs/unreleased/30120-add-flat-square-badge-style.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add flat-square badge style -merge_request: 24172 -author: Fabian Schneider @fabsrc -type: added diff --git a/changelogs/unreleased/36445-better-indication-that-an-issue-has-been-moved-or-marked-as-duplicated.yml b/changelogs/unreleased/36445-better-indication-that-an-issue-has-been-moved-or-marked-as-duplicated.yml deleted file mode 100644 index 70b561ccbf6..00000000000 --- a/changelogs/unreleased/36445-better-indication-that-an-issue-has-been-moved-or-marked-as-duplicated.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Indicate on Issue Status if an Issue was Moved -merge_request: 24470 -author: -type: added diff --git a/changelogs/unreleased/37990-task-list-bracket.yml b/changelogs/unreleased/37990-task-list-bracket.yml deleted file mode 100644 index ffa77cf0af7..00000000000 --- a/changelogs/unreleased/37990-task-list-bracket.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix ambiguous brackets in task lists -merge_request: 18514 -author: Jared Deckard <jared.deckard@gmail.com> -type: fixed diff --git a/changelogs/unreleased/40997-gitlab-pages-deploy-jobs-have-a-null-status.yml b/changelogs/unreleased/40997-gitlab-pages-deploy-jobs-have-a-null-status.yml deleted file mode 100644 index 01036253151..00000000000 --- a/changelogs/unreleased/40997-gitlab-pages-deploy-jobs-have-a-null-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix empty labels of CI builds for gitlab-pages on pipeline page -merge_request: 24451 -author: -type: fixed diff --git a/changelogs/unreleased/42769-remove-expansion-hover-animation-from-status-icon-buttons.yml b/changelogs/unreleased/42769-remove-expansion-hover-animation-from-status-icon-buttons.yml deleted file mode 100644 index 5a4ff8b3358..00000000000 --- a/changelogs/unreleased/42769-remove-expansion-hover-animation-from-status-icon-buttons.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove expansion hover animation from pipeline status icon buttons -merge_request: 24268 -author: Nathan Friend -type: changed diff --git a/changelogs/unreleased/43681-display-last-activity-and-created-at-datetimes-for-users-in-admin-users.yml b/changelogs/unreleased/43681-display-last-activity-and-created-at-datetimes-for-users-in-admin-users.yml deleted file mode 100644 index 0fbf6314a27..00000000000 --- a/changelogs/unreleased/43681-display-last-activity-and-created-at-datetimes-for-users-in-admin-users.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display last activity and created at datetimes for users -merge_request: 24181 -author: -type: added diff --git a/changelogs/unreleased/44332-add-openid-profile-scopes.yml b/changelogs/unreleased/44332-add-openid-profile-scopes.yml deleted file mode 100644 index b554fab5139..00000000000 --- a/changelogs/unreleased/44332-add-openid-profile-scopes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: GitLab now supports the profile and email scopes from OpenID Connect -merge_request: 24335 -author: Goten Xiao -type: added diff --git a/changelogs/unreleased/44698-recaptcha.yml b/changelogs/unreleased/44698-recaptcha.yml deleted file mode 100644 index e1760a6c635..00000000000 --- a/changelogs/unreleased/44698-recaptcha.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent unload when Recaptcha is open -merge_request: 24625 -author: -type: fixed diff --git a/changelogs/unreleased/45779-fix-default-visibility-level-for-projects.yml b/changelogs/unreleased/45779-fix-default-visibility-level-for-projects.yml deleted file mode 100644 index b4cba5041d1..00000000000 --- a/changelogs/unreleased/45779-fix-default-visibility-level-for-projects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix default visibility_level for new projects -merge_request: 24120 -author: Fabian Schneider @fabsrc -type: fixed diff --git a/changelogs/unreleased/45791-number-of-repositories-usage-ping.yml b/changelogs/unreleased/45791-number-of-repositories-usage-ping.yml deleted file mode 100644 index 8d1f5df56ea..00000000000 --- a/changelogs/unreleased/45791-number-of-repositories-usage-ping.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add repositories count to usage ping data -merge_request: 24823 -author: -type: added diff --git a/changelogs/unreleased/46448-add-timestamps-for-each-stage-of-gitlab-rake-gitlab-backup-restore.yml b/changelogs/unreleased/46448-add-timestamps-for-each-stage-of-gitlab-rake-gitlab-backup-restore.yml deleted file mode 100644 index 4ce6787570a..00000000000 --- a/changelogs/unreleased/46448-add-timestamps-for-each-stage-of-gitlab-rake-gitlab-backup-restore.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display timestamps to messages printed by gitlab:backup:restore rake tasks -merge_request: -author: Will Chandler -type: changed diff --git a/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml b/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml deleted file mode 100644 index 28e2a4cc377..00000000000 --- a/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redesigned related merge requests in issue page. -merge_request: 24270 -author: -type: changed diff --git a/changelogs/unreleased/47988-improve-milestone-queries-with-subqueries.yml b/changelogs/unreleased/47988-improve-milestone-queries-with-subqueries.yml deleted file mode 100644 index d1a80ab43cf..00000000000 --- a/changelogs/unreleased/47988-improve-milestone-queries-with-subqueries.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve milestone queries using subqueries instead of separate queries for ids -merge_request: 24325 -author: -type: performance diff --git a/changelogs/unreleased/50013-add-browser-platform-flags.yml b/changelogs/unreleased/50013-add-browser-platform-flags.yml deleted file mode 100644 index 6176b8b64a7..00000000000 --- a/changelogs/unreleased/50013-add-browser-platform-flags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add CSS & JS global flags to represent browser and platform -merge_request: 24017 -author: -type: other diff --git a/changelogs/unreleased/50352-sort-save.yml b/changelogs/unreleased/50352-sort-save.yml deleted file mode 100644 index cd046c8b785..00000000000 --- a/changelogs/unreleased/50352-sort-save.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Save issues/merge request sorting options to backend -merge_request: 24198 -author: -type: added diff --git a/changelogs/unreleased/50521-block-emojis-and-symbol-characters-from-user-s-full-names-2.yml b/changelogs/unreleased/50521-block-emojis-and-symbol-characters-from-user-s-full-names-2.yml deleted file mode 100644 index 04caf8262c6..00000000000 --- a/changelogs/unreleased/50521-block-emojis-and-symbol-characters-from-user-s-full-names-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Block emojis and symbol characters from users full names -merge_request: 24523 -author: -type: other diff --git a/changelogs/unreleased/51754-admin-view-private-personal-snippets.yml b/changelogs/unreleased/51754-admin-view-private-personal-snippets.yml deleted file mode 100644 index cf3d73fce0c..00000000000 --- a/changelogs/unreleased/51754-admin-view-private-personal-snippets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow users with full private access to read private personal snippets. -merge_request: 24560 -author: -type: fixed diff --git a/changelogs/unreleased/51759-filter-by-language.yml b/changelogs/unreleased/51759-filter-by-language.yml deleted file mode 100644 index 6b5bedd6b2d..00000000000 --- a/changelogs/unreleased/51759-filter-by-language.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add `with_programming_language` filter for projects to API -merge_request: 24377 -author: Dylan MacKenzie -type: added diff --git a/changelogs/unreleased/51913-api-getting-projects-for-users-with-dot-gets-404.yml b/changelogs/unreleased/51913-api-getting-projects-for-users-with-dot-gets-404.yml deleted file mode 100644 index 9d72efdd52a..00000000000 --- a/changelogs/unreleased/51913-api-getting-projects-for-users-with-dot-gets-404.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Support username with dots' -merge_request: 24395 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml b/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml new file mode 100644 index 00000000000..84062c6db91 --- /dev/null +++ b/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml @@ -0,0 +1,5 @@ +--- +title: 'Timer and action name aligned vertically for delayed jobs in pipeline actions' +merge_request: 25117 +author: Gokhan Apaydin +type: fixed diff --git a/changelogs/unreleased/52275-fix-master-to-be-hyperlink.yml b/changelogs/unreleased/52275-fix-master-to-be-hyperlink.yml deleted file mode 100644 index c1cde0ceff6..00000000000 --- a/changelogs/unreleased/52275-fix-master-to-be-hyperlink.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve In Merge Request diff screen, master is not a hyperlink -merge_request: 23874 -author: -type: fixed diff --git a/changelogs/unreleased/52278-squash-checkbox-fix.yml b/changelogs/unreleased/52278-squash-checkbox-fix.yml deleted file mode 100644 index c81748ae419..00000000000 --- a/changelogs/unreleased/52278-squash-checkbox-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve When merging an MR, the squash checkbox isnt always supported -merge_request: 24296 -author: -type: fixed diff --git a/changelogs/unreleased/52347-lines-changed-statistics-is-not-easily-visible-in-mr-changes-view.yml b/changelogs/unreleased/52347-lines-changed-statistics-is-not-easily-visible-in-mr-changes-view.yml deleted file mode 100644 index cf1c4378f18..00000000000 --- a/changelogs/unreleased/52347-lines-changed-statistics-is-not-easily-visible-in-mr-changes-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show MR statistics in diff comparisons -merge_request: !24569 -author: -type: changed diff --git a/changelogs/unreleased/52363-modifies-environment-scope-field-on-cluster-page.yml b/changelogs/unreleased/52363-modifies-environment-scope-field-on-cluster-page.yml deleted file mode 100644 index 07cb35e6529..00000000000 --- a/changelogs/unreleased/52363-modifies-environment-scope-field-on-cluster-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Modifies environment scope UI on cluster page -merge_request: 24376 -author: -type: other diff --git a/changelogs/unreleased/52363-ui-changes-to-cluster-and-ado-pages.yml b/changelogs/unreleased/52363-ui-changes-to-cluster-and-ado-pages.yml deleted file mode 100644 index eb4851971fb..00000000000 --- a/changelogs/unreleased/52363-ui-changes-to-cluster-and-ado-pages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moves domain setting from Auto DevOps to Cluster's page -merge_request: 24580 -author: -type: added diff --git a/changelogs/unreleased/52568-external-mr-diffs.yml b/changelogs/unreleased/52568-external-mr-diffs.yml deleted file mode 100644 index b1c9d5cb809..00000000000 --- a/changelogs/unreleased/52568-external-mr-diffs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow merge request diffs to be placed into an object store -merge_request: 24276 -author: -type: added diff --git a/changelogs/unreleased/52674-api-v4-projects-project_id-jobs-endpoint-hits-statement-timeout.yml b/changelogs/unreleased/52674-api-v4-projects-project_id-jobs-endpoint-hits-statement-timeout.yml deleted file mode 100644 index f79078c1fd9..00000000000 --- a/changelogs/unreleased/52674-api-v4-projects-project_id-jobs-endpoint-hits-statement-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "[API] Omit `X-Total` and `X-Total-Pages` headers when items count is more than 10,000" -merge_request: 23931 -author: -type: performance diff --git a/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml b/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml deleted file mode 100644 index b661c55957d..00000000000 --- a/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make possible to toggle file tree while scrolling through diffs -merge_request: !24103 -author: -type: changed diff --git a/changelogs/unreleased/53104-redesign-group-overview-ui-mvc.yml b/changelogs/unreleased/53104-redesign-group-overview-ui-mvc.yml deleted file mode 100644 index cb810b7ac7f..00000000000 --- a/changelogs/unreleased/53104-redesign-group-overview-ui-mvc.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refresh group overview to match project overview -merge_request: 23866 -author: -type: changed diff --git a/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml b/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml new file mode 100644 index 00000000000..e0ed38fc2fa --- /dev/null +++ b/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml @@ -0,0 +1,5 @@ +--- +title: Use limited counter for runner build count in admin page. +merge_request: 25220 +author: +type: fixed diff --git a/changelogs/unreleased/53431-fix-upcoming-milestone-filter-for-groups.yml b/changelogs/unreleased/53431-fix-upcoming-milestone-filter-for-groups.yml deleted file mode 100644 index 1e9c7f3913c..00000000000 --- a/changelogs/unreleased/53431-fix-upcoming-milestone-filter-for-groups.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix upcoming milestones filter not including group milestones -merge_request: 23098 -author: Heinrich Lee Yu -type: fixed diff --git a/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml b/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml deleted file mode 100644 index 08c5ded05d5..00000000000 --- a/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redirect GET projects/:id to project page -merge_request: 24467 -author: -type: added diff --git a/changelogs/unreleased/53676-ip-address-of-gitlab-runner-is-wrong-in-the-runners-description.yml b/changelogs/unreleased/53676-ip-address-of-gitlab-runner-is-wrong-in-the-runners-description.yml deleted file mode 100644 index 12a6509e6f7..00000000000 --- a/changelogs/unreleased/53676-ip-address-of-gitlab-runner-is-wrong-in-the-runners-description.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Get remote IP address of runner -merge_request: 24624 -author: -type: changed diff --git a/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml b/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml deleted file mode 100644 index d804e2df2cd..00000000000 --- a/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix foreground color for labels to ensure consistency of label appearance -merge_request: 23873 -author: Nathan Friend -type: fixed diff --git a/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml b/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml deleted file mode 100644 index 1daa72fb9c4..00000000000 --- a/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix suboptimal handling of checkbox and radio input events causing - group general settings submit button to stay disabled after changing its visibility -merge_request: 23022 -author: -type: fixed diff --git a/changelogs/unreleased/53950-commit-comments-displayed-on-a-merge-request.yml b/changelogs/unreleased/53950-commit-comments-displayed-on-a-merge-request.yml deleted file mode 100644 index adaaed7f1aa..00000000000 --- a/changelogs/unreleased/53950-commit-comments-displayed-on-a-merge-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display "commented" only for commit discussions on merge requests -merge_request: 24427 -author: -type: changed diff --git a/changelogs/unreleased/54167-rename-project-tags-to-project-topics.yml b/changelogs/unreleased/54167-rename-project-tags-to-project-topics.yml deleted file mode 100644 index 6fc8aa1a195..00000000000 --- a/changelogs/unreleased/54167-rename-project-tags-to-project-topics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rename project tags to project topics -merge_request: 24219 -author: -type: other diff --git a/changelogs/unreleased/54213-standardize-token-value-capitalization-in-filter-bar.yml b/changelogs/unreleased/54213-standardize-token-value-capitalization-in-filter-bar.yml deleted file mode 100644 index 37dea77b8d2..00000000000 --- a/changelogs/unreleased/54213-standardize-token-value-capitalization-in-filter-bar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Standardize filter value capitlization in filter bar in both issues and boards pages -merge_request: 23846 -author: obahareth -type: changed diff --git a/changelogs/unreleased/54250-upstream-kubeclient-redirect-patch.yml b/changelogs/unreleased/54250-upstream-kubeclient-redirect-patch.yml deleted file mode 100644 index d1bdbccb20a..00000000000 --- a/changelogs/unreleased/54250-upstream-kubeclient-redirect-patch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade kubeclient to 4.2.2 and swap out monkey-patch to disallow redirects -merge_request: 24284 -author: -type: other diff --git a/changelogs/unreleased/54484-anchor-links-to-comments-or-system-notes-can-break-with-discussion-filters.yml b/changelogs/unreleased/54484-anchor-links-to-comments-or-system-notes-can-break-with-discussion-filters.yml deleted file mode 100644 index 4d543db567d..00000000000 --- a/changelogs/unreleased/54484-anchor-links-to-comments-or-system-notes-can-break-with-discussion-filters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ensured links to a comment or system note anchor resolves to the right note if a user has a discussion filter. -merge_request: 24228 -author: -type: changed diff --git a/changelogs/unreleased/54544-update-project-topics-styling-to-use-badges-design.yml b/changelogs/unreleased/54544-update-project-topics-styling-to-use-badges-design.yml deleted file mode 100644 index de12c66e9ef..00000000000 --- a/changelogs/unreleased/54544-update-project-topics-styling-to-use-badges-design.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update project topics styling to use badges design -merge_request: 24415 -author: -type: changed diff --git a/changelogs/unreleased/54905-milestone-search.yml b/changelogs/unreleased/54905-milestone-search.yml deleted file mode 100644 index 88717242e7c..00000000000 --- a/changelogs/unreleased/54905-milestone-search.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds milestone search -merge_request: 24265 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/54924-refactor-notes-actions-params.yml b/changelogs/unreleased/54924-refactor-notes-actions-params.yml new file mode 100644 index 00000000000..b6083820401 --- /dev/null +++ b/changelogs/unreleased/54924-refactor-notes-actions-params.yml @@ -0,0 +1,5 @@ +--- +title: Fix commenting on commits having SHA1 starting with a large number +merge_request: 25278 +author: +type: fixed diff --git a/changelogs/unreleased/55057-system-message-to-core.yml b/changelogs/unreleased/55057-system-message-to-core.yml new file mode 100644 index 00000000000..3381879eb4a --- /dev/null +++ b/changelogs/unreleased/55057-system-message-to-core.yml @@ -0,0 +1,5 @@ +--- +title: Port System Header and Footer feature to Core +merge_request: 25241 +author: +type: added diff --git a/changelogs/unreleased/55098-ui-bug-adding-group-members-with-lower-permissions.yml b/changelogs/unreleased/55098-ui-bug-adding-group-members-with-lower-permissions.yml deleted file mode 100644 index f22524ef4b2..00000000000 --- a/changelogs/unreleased/55098-ui-bug-adding-group-members-with-lower-permissions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve UI bug adding group members with lower permissions -merge_request: 24820 -author: -type: fixed diff --git a/changelogs/unreleased/55111-gitlab-api-does-not-manage-default_branch_protection-3-value.yml b/changelogs/unreleased/55111-gitlab-api-does-not-manage-default_branch_protection-3-value.yml deleted file mode 100644 index b609fc2d60b..00000000000 --- a/changelogs/unreleased/55111-gitlab-api-does-not-manage-default_branch_protection-3-value.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Fix default_branch_protection admin setting' -merge_request: 24398 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/55242-skeleton-loading-releases.yml b/changelogs/unreleased/55242-skeleton-loading-releases.yml deleted file mode 100644 index 43cda64ce04..00000000000 --- a/changelogs/unreleased/55242-skeleton-loading-releases.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds skeleton loading to releases page -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/55495-teamcity-use-revision-in-query.yml b/changelogs/unreleased/55495-teamcity-use-revision-in-query.yml deleted file mode 100644 index 724de733b7c..00000000000 --- a/changelogs/unreleased/55495-teamcity-use-revision-in-query.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Build number does not need to be tweaked anymore for the TeamCity integration to work properly. -merge_request: 23898 -author: -type: changed diff --git a/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml b/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml deleted file mode 100644 index 071036cd568..00000000000 --- a/changelogs/unreleased/55628-artifacts-from-a-job-defined-after-a-parallel-job-are-not-downloaded.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Handle regular job dependencies next to parallelized job dependencies. -merge_request: 24273 -author: -type: fixed diff --git a/changelogs/unreleased/55703-md-image-borders.yml b/changelogs/unreleased/55703-md-image-borders.yml new file mode 100644 index 00000000000..94297a42f6d --- /dev/null +++ b/changelogs/unreleased/55703-md-image-borders.yml @@ -0,0 +1,5 @@ +--- +title: Only show borders for markdown images in notes +merge_request: 25448 +author: +type: fixed diff --git a/changelogs/unreleased/55820-adds-common-name-chart-value.yml b/changelogs/unreleased/55820-adds-common-name-chart-value.yml deleted file mode 100644 index 1871abbfc6b..00000000000 --- a/changelogs/unreleased/55820-adds-common-name-chart-value.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ensure Cert Manager works with Auto DevOps URLs greater than 64 bytes -merge_request: 24683 -author: -type: fixed diff --git a/changelogs/unreleased/55884-adjust-emoji-and-cancel-buttons-height-in-user-status-modal-when-emoji-is-changed.yml b/changelogs/unreleased/55884-adjust-emoji-and-cancel-buttons-height-in-user-status-modal-when-emoji-is-changed.yml deleted file mode 100644 index 2fbf334f5e9..00000000000 --- a/changelogs/unreleased/55884-adjust-emoji-and-cancel-buttons-height-in-user-status-modal-when-emoji-is-changed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Emoji and cancel button are taller than input in set user status modal -merge_request: 24173 -author: Dhiraj Bodicherla -type: fixed diff --git a/changelogs/unreleased/55945-suggested-change-preview-highlight.yml b/changelogs/unreleased/55945-suggested-change-preview-highlight.yml deleted file mode 100644 index 997290a5d50..00000000000 --- a/changelogs/unreleased/55945-suggested-change-preview-highlight.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix syntax highlighting for suggested changes preview -merge_request: 24358 -author: -type: fixed diff --git a/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml b/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml deleted file mode 100644 index 01a162944d3..00000000000 --- a/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent checking protected_ref? for ambiguous refs. -merge_request: 24437 -author: -type: fixed diff --git a/changelogs/unreleased/56010-user-profile-page-horizonal-whitespace-between-overview-columns-breaks-two-column-layout.yml b/changelogs/unreleased/56010-user-profile-page-horizonal-whitespace-between-overview-columns-breaks-two-column-layout.yml deleted file mode 100644 index 407346bbf22..00000000000 --- a/changelogs/unreleased/56010-user-profile-page-horizonal-whitespace-between-overview-columns-breaks-two-column-layout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove horizontal whitespace on user profile overview on small breakpoints -merge_request: 24189 -author: -type: other diff --git a/changelogs/unreleased/56014-api-merge-request-squash-commit-messages.yml b/changelogs/unreleased/56014-api-merge-request-squash-commit-messages.yml deleted file mode 100644 index e324baa94a3..00000000000 --- a/changelogs/unreleased/56014-api-merge-request-squash-commit-messages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: API allows setting the squash commit message when squashing a merge request -merge_request: 24784 -author: -type: added diff --git a/changelogs/unreleased/56019-archived-stuck.yml b/changelogs/unreleased/56019-archived-stuck.yml deleted file mode 100644 index de3698a327b..00000000000 --- a/changelogs/unreleased/56019-archived-stuck.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes z-index and margins of archived alert in job page -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/56036-fix-translation-of-in-in-job-details-sidebar.yml b/changelogs/unreleased/56036-fix-translation-of-in-in-job-details-sidebar.yml deleted file mode 100644 index ff9d4f2c175..00000000000 --- a/changelogs/unreleased/56036-fix-translation-of-in-in-job-details-sidebar.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Remove multilingual translation from the word "in" in the job details sidebar. -merge_request: 24192 -author: Nathan Friend -type: changed diff --git a/changelogs/unreleased/56110-cluster-kubernetes-api-500-error-on-post-request.yml b/changelogs/unreleased/56110-cluster-kubernetes-api-500-error-on-post-request.yml deleted file mode 100644 index 4da14114225..00000000000 --- a/changelogs/unreleased/56110-cluster-kubernetes-api-500-error-on-post-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improves restriction of multiple Kubernetes clusters through API -merge_request: 24251 -author: -type: fixed diff --git a/changelogs/unreleased/56172-docs-fix-add-include-to-ci-param-list.yml b/changelogs/unreleased/56172-docs-fix-add-include-to-ci-param-list.yml deleted file mode 100644 index 92592290ac4..00000000000 --- a/changelogs/unreleased/56172-docs-fix-add-include-to-ci-param-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update CI YAML param table with include -merge_request: !24309 -author: -type: fixed diff --git a/changelogs/unreleased/56332-exclude-public-group-milestones-from-count.yml b/changelogs/unreleased/56332-exclude-public-group-milestones-from-count.yml deleted file mode 100644 index 50ca9c94173..00000000000 --- a/changelogs/unreleased/56332-exclude-public-group-milestones-from-count.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix counts in milestones dashboard -merge_request: 25230 -author: -type: fixed diff --git a/changelogs/unreleased/56334-runners-ipv6-address-overlaps-other-values.yml b/changelogs/unreleased/56334-runners-ipv6-address-overlaps-other-values.yml deleted file mode 100644 index 8a6adef5dae..00000000000 --- a/changelogs/unreleased/56334-runners-ipv6-address-overlaps-other-values.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Runners IPv6 address overlaps other values -merge_request: 24531 -author: -type: fixed diff --git a/changelogs/unreleased/56363-inconsitent-file-size-indication-across-different-ci-pages.yml b/changelogs/unreleased/56363-inconsitent-file-size-indication-across-different-ci-pages.yml deleted file mode 100644 index 7c923422534..00000000000 --- a/changelogs/unreleased/56363-inconsitent-file-size-indication-across-different-ci-pages.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Show CI artifact file size with 3 significant digits on 'browse job artifacts' - page -merge_request: 24387 -author: -type: fixed diff --git a/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml b/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml deleted file mode 100644 index fcfa29977d1..00000000000 --- a/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not run spam checks on confidential issues -merge_request: 24453 -author: -type: fixed diff --git a/changelogs/unreleased/56379-pipeline-stages-job-action-button-icon-is-not-aligned.yml b/changelogs/unreleased/56379-pipeline-stages-job-action-button-icon-is-not-aligned.yml deleted file mode 100644 index ec8a1d9d6ea..00000000000 --- a/changelogs/unreleased/56379-pipeline-stages-job-action-button-icon-is-not-aligned.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Pipeline stages job action button icon is not aligned -merge_request: 24577 -author: -type: fixed diff --git a/changelogs/unreleased/56389-remove-unwanted-suggestion-flash-margin.yml b/changelogs/unreleased/56389-remove-unwanted-suggestion-flash-margin.yml deleted file mode 100644 index 3494feb9be1..00000000000 --- a/changelogs/unreleased/56389-remove-unwanted-suggestion-flash-margin.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unwanted margin above suggested changes. -merge_request: 24419 -author: -type: fixed diff --git a/changelogs/unreleased/56398-fix-cluster-installation-loading-state.yml b/changelogs/unreleased/56398-fix-cluster-installation-loading-state.yml deleted file mode 100644 index 19ff408ddf4..00000000000 --- a/changelogs/unreleased/56398-fix-cluster-installation-loading-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix cluster installation processing spinner -merge_request: 24814 -author: -type: fixed diff --git a/changelogs/unreleased/56417-update-helm-to-2-12-2.yml b/changelogs/unreleased/56417-update-helm-to-2-12-2.yml deleted file mode 100644 index f01915c532f..00000000000 --- a/changelogs/unreleased/56417-update-helm-to-2-12-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Helm to 2.12.2 to address Helm client vulnerability -merge_request: 24418 -author: Takuya Noguchi -type: security diff --git a/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml b/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml new file mode 100644 index 00000000000..7febe175faf --- /dev/null +++ b/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml @@ -0,0 +1,5 @@ +--- +title: Remove duplicate units from metrics graph +merge_request: 25485 +author: +type: fixed diff --git a/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml b/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml new file mode 100644 index 00000000000..9b7aed82d49 --- /dev/null +++ b/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml @@ -0,0 +1,5 @@ +--- +title: "Implement new arguments `state`, `closed_before` and `closed_after` for `IssuesResolver` in GraphQL" +merge_request: 24910 +author: +type: changed diff --git a/changelogs/unreleased/56507-sh-bump-katex-0.10.0.yml b/changelogs/unreleased/56507-sh-bump-katex-0.10.0.yml deleted file mode 100644 index 671e204da21..00000000000 --- a/changelogs/unreleased/56507-sh-bump-katex-0.10.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade KaTeX to version 0.10.0 -merge_request: 24478 -author: Andrew Harmon -type: fixed
\ No newline at end of file diff --git a/changelogs/unreleased/56543-project-lists-further-iteration-improvements.yml b/changelogs/unreleased/56543-project-lists-further-iteration-improvements.yml deleted file mode 100644 index 388ff1d062a..00000000000 --- a/changelogs/unreleased/56543-project-lists-further-iteration-improvements.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Project list UI improvements -merge_request: 24855 -author: -type: other diff --git a/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml b/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml deleted file mode 100644 index 9ef274f3b49..00000000000 --- a/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent Sidekiq arguments over 10 KB in size from being logged to JSON -merge_request: 24493 -author: -type: changed diff --git a/changelogs/unreleased/56556-fix-markdown-table-border.yml b/changelogs/unreleased/56556-fix-markdown-table-border.yml deleted file mode 100644 index 7724f49d4e9..00000000000 --- a/changelogs/unreleased/56556-fix-markdown-table-border.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix markdown table border. -merge_request: 24601 -author: -type: fixed diff --git a/changelogs/unreleased/56622-admin-settings-cannot-read-property-addeventlistener-of-null.yml b/changelogs/unreleased/56622-admin-settings-cannot-read-property-addeventlistener-of-null.yml deleted file mode 100644 index 52b2db0e999..00000000000 --- a/changelogs/unreleased/56622-admin-settings-cannot-read-property-addeventlistener-of-null.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Load initUserInternalRegexPlaceholder only when required -merge_request: 24522 -author: -type: fixed diff --git a/changelogs/unreleased/56636-hashed-storage-afterrenameservice.yml b/changelogs/unreleased/56636-hashed-storage-afterrenameservice.yml deleted file mode 100644 index 1f808850554..00000000000 --- a/changelogs/unreleased/56636-hashed-storage-afterrenameservice.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Hashed Storage: `AfterRenameService` was receiving the wrong `old_path` under some circunstances' -merge_request: 24526 -author: -type: fixed diff --git a/changelogs/unreleased/56764-poor-ui-on-milestone-validation-error-page.yml b/changelogs/unreleased/56764-poor-ui-on-milestone-validation-error-page.yml deleted file mode 100644 index 089ffd47321..00000000000 --- a/changelogs/unreleased/56764-poor-ui-on-milestone-validation-error-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix CSS grid on a new Project/Group Milestone -merge_request: 24614 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/56788-unicorn-metric-labels.yml b/changelogs/unreleased/56788-unicorn-metric-labels.yml deleted file mode 100644 index 824c981780c..00000000000 --- a/changelogs/unreleased/56788-unicorn-metric-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clean up unicorn sampler metric labels -merge_request: 24626 -author: bjk-gitlab -type: fixed diff --git a/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml b/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml new file mode 100644 index 00000000000..a7af8994852 --- /dev/null +++ b/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml @@ -0,0 +1,5 @@ +--- +title: Only load syntax highlight CSS of selected theme +merge_request: 25232 +author: +type: performance diff --git a/changelogs/unreleased/56938-diff-file-headers-on-compare-not-quite-right.yml b/changelogs/unreleased/56938-diff-file-headers-on-compare-not-quite-right.yml deleted file mode 100644 index f619a009a63..00000000000 --- a/changelogs/unreleased/56938-diff-file-headers-on-compare-not-quite-right.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correct spacing for comparison page -merge_request: !24783 -author: -type: fixed diff --git a/changelogs/unreleased/57063-implement-new-arguments-iid-for-issuesresolver-in-graphql.yml b/changelogs/unreleased/57063-implement-new-arguments-iid-for-issuesresolver-in-graphql.yml deleted file mode 100644 index b05ab07e14c..00000000000 --- a/changelogs/unreleased/57063-implement-new-arguments-iid-for-issuesresolver-in-graphql.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add argument iids for issues in GraphQL -merge_request: 24802 -author: -type: added diff --git a/changelogs/unreleased/57160-merge-request-tabs-header-is-missing-bottom-border.yml b/changelogs/unreleased/57160-merge-request-tabs-header-is-missing-bottom-border.yml deleted file mode 100644 index 3146d07db3d..00000000000 --- a/changelogs/unreleased/57160-merge-request-tabs-header-is-missing-bottom-border.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Return bottom border on MR Tabs -merge_request: !25198 -author: -type: fixed diff --git a/changelogs/unreleased/57227-absolute-uri-missing-hierarchical-segment.yml b/changelogs/unreleased/57227-absolute-uri-missing-hierarchical-segment.yml deleted file mode 100644 index 3a663ce2132..00000000000 --- a/changelogs/unreleased/57227-absolute-uri-missing-hierarchical-segment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix potential Addressable::URI::InvalidURIError -merge_request: 24908 -author: -type: fixed diff --git a/changelogs/unreleased/57583-sticky-bar.yml b/changelogs/unreleased/57583-sticky-bar.yml deleted file mode 100644 index c592343a409..00000000000 --- a/changelogs/unreleased/57583-sticky-bar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes archived sticky top bar without perfomance bar -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/57589-update-workhorse.yml b/changelogs/unreleased/57589-update-workhorse.yml deleted file mode 100644 index 525913bba4c..00000000000 --- a/changelogs/unreleased/57589-update-workhorse.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Workhorse to v8.3.1 -merge_request: -author: -type: other diff --git a/changelogs/unreleased/57650-remove-tld-validation-from-cluster.yml b/changelogs/unreleased/57650-remove-tld-validation-from-cluster.yml deleted file mode 100644 index 683b007a8a1..00000000000 --- a/changelogs/unreleased/57650-remove-tld-validation-from-cluster.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes incorrect TLD validation errors for Kubernetes cluster domain -merge_request: 25262 -author: -type: fixed diff --git a/changelogs/unreleased/57785-create-project-template-for-netlify.yml b/changelogs/unreleased/57785-create-project-template-for-netlify.yml new file mode 100644 index 00000000000..78e9e3dece5 --- /dev/null +++ b/changelogs/unreleased/57785-create-project-template-for-netlify.yml @@ -0,0 +1,5 @@ +--- +title: Resolve Create Project Template for Netlify +merge_request: 25453 +author: +type: changed diff --git a/changelogs/unreleased/57798-fix-auto-devops-empty-str-check.yml b/changelogs/unreleased/57798-fix-auto-devops-empty-str-check.yml deleted file mode 100644 index 39d077350bb..00000000000 --- a/changelogs/unreleased/57798-fix-auto-devops-empty-str-check.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent Auto DevOps from trying to deploy without a domain name -merge_request: 25308 -author: -type: fixed diff --git a/changelogs/unreleased/8688-recursive-pipelines-ce-backport.yml b/changelogs/unreleased/8688-recursive-pipelines-ce-backport.yml deleted file mode 100644 index cd7b56a1e05..00000000000 --- a/changelogs/unreleased/8688-recursive-pipelines-ce-backport.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates mixin to reduce code duplication between CE and EE in graph component -merge_request: -author: -type: other diff --git a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml new file mode 100644 index 00000000000..c014edf9c09 --- /dev/null +++ b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml @@ -0,0 +1,5 @@ +--- +title: Allow users to compare branches on a read-only instance +merge_request: 25414 +author: +type: fixed diff --git a/changelogs/unreleased/Projects--dropdown-is-misaligned-on-issue-boards-page.yml b/changelogs/unreleased/Projects--dropdown-is-misaligned-on-issue-boards-page.yml deleted file mode 100644 index 49511294c48..00000000000 --- a/changelogs/unreleased/Projects--dropdown-is-misaligned-on-issue-boards-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Proper align Projects dropdown on issue boards page -merge_request: 24277 -author: Johann Hubert Sonntagbauer -type: fixed diff --git a/changelogs/unreleased/ab-54270-github-iid.yml b/changelogs/unreleased/ab-54270-github-iid.yml deleted file mode 100644 index 1776b0aeb86..00000000000 --- a/changelogs/unreleased/ab-54270-github-iid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve efficiency of GitHub importer by reducing amount of locks needed. -merge_request: 24102 -author: -type: performance diff --git a/changelogs/unreleased/ac-pages-subgroups.yml b/changelogs/unreleased/ac-pages-subgroups.yml deleted file mode 100644 index ef5a0c1872e..00000000000 --- a/changelogs/unreleased/ac-pages-subgroups.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Pages for subgroups -merge_request: 23505 -author: -type: added diff --git a/changelogs/unreleased/actioncontroller-parameters-deprecations.yml b/changelogs/unreleased/actioncontroller-parameters-deprecations.yml deleted file mode 100644 index ddd15c37542..00000000000 --- a/changelogs/unreleased/actioncontroller-parameters-deprecations.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix several ActionController::Parameters deprecations -merge_request: 24332 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/add-badge-count-to-projects-and-groups.yml b/changelogs/unreleased/add-badge-count-to-projects-and-groups.yml deleted file mode 100644 index e200bbaa806..00000000000 --- a/changelogs/unreleased/add-badge-count-to-projects-and-groups.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add badge count to projects -merge_request: 18425 -author: George Tsiolis -type: added diff --git a/changelogs/unreleased/add-uniqueness-validation-to-url-column-in-releases-link-model.yml b/changelogs/unreleased/add-uniqueness-validation-to-url-column-in-releases-link-model.yml deleted file mode 100644 index 7d767e220f7..00000000000 --- a/changelogs/unreleased/add-uniqueness-validation-to-url-column-in-releases-link-model.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add uniqueness validation to url column in Releases::Link model -merge_request: 24223 -author: -type: other diff --git a/changelogs/unreleased/adrianmoisey-GITLAB_PAGES_PREDEFINED_VARIABLES.yml b/changelogs/unreleased/adrianmoisey-GITLAB_PAGES_PREDEFINED_VARIABLES.yml deleted file mode 100644 index a664c44e1d7..00000000000 --- a/changelogs/unreleased/adrianmoisey-GITLAB_PAGES_PREDEFINED_VARIABLES.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add GitLab Pages predefined CI variables 'CI_PAGES_DOMAIN' and 'CI_PAGES_URL' -merge_request: 24504 -author: Adrian Moisey -type: added diff --git a/changelogs/unreleased/adriel-remove-feature-flag.yml b/changelogs/unreleased/adriel-remove-feature-flag.yml deleted file mode 100644 index d442e120d60..00000000000 --- a/changelogs/unreleased/adriel-remove-feature-flag.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update metrics dashboard graph design -merge_request: 24653 -author: -type: changed diff --git a/changelogs/unreleased/an-dtracing-test-for-invalid-tracers.yml b/changelogs/unreleased/an-dtracing-test-for-invalid-tracers.yml deleted file mode 100644 index 5365260cbae..00000000000 --- a/changelogs/unreleased/an-dtracing-test-for-invalid-tracers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid overwriting default jaeger values with nil -merge_request: 24482 -author: -type: fixed diff --git a/changelogs/unreleased/an-gilab-process-name.yml b/changelogs/unreleased/an-gilab-process-name.yml deleted file mode 100644 index 72d811ee21f..00000000000 --- a/changelogs/unreleased/an-gilab-process-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extract process_name from GitLab::Sentry -merge_request: 24422 -author: -type: other diff --git a/changelogs/unreleased/an-opentracing-active-record-tracing.yml b/changelogs/unreleased/an-opentracing-active-record-tracing.yml deleted file mode 100644 index 59b480675ec..00000000000 --- a/changelogs/unreleased/an-opentracing-active-record-tracing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds tracing support for ActiveRecord notifications -merge_request: 24604 -author: -type: other diff --git a/changelogs/unreleased/an-opentracing-factory.yml b/changelogs/unreleased/an-opentracing-factory.yml deleted file mode 100644 index c04736f3e63..00000000000 --- a/changelogs/unreleased/an-opentracing-factory.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Conditionally initialize the global opentracing tracer -merge_request: 24186 -author: -type: other diff --git a/changelogs/unreleased/an-opentracing-propagation.yml b/changelogs/unreleased/an-opentracing-propagation.yml deleted file mode 100644 index d9aa7cd0048..00000000000 --- a/changelogs/unreleased/an-opentracing-propagation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds inter-service OpenTracing propagation -merge_request: 24239 -author: -type: other diff --git a/changelogs/unreleased/an-opentracing-render-tracing.yml b/changelogs/unreleased/an-opentracing-render-tracing.yml deleted file mode 100644 index 6ff7f1f3cf2..00000000000 --- a/changelogs/unreleased/an-opentracing-render-tracing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add OpenTracing instrumentation for Action View Render events -merge_request: 24728 -author: -type: other diff --git a/changelogs/unreleased/api-group-labels.yml b/changelogs/unreleased/api-group-labels.yml deleted file mode 100644 index 0df6f15a9b6..00000000000 --- a/changelogs/unreleased/api-group-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Add support for group labels' -merge_request: 21368 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/api-issuable-bulk-update.yml b/changelogs/unreleased/api-issuable-bulk-update.yml new file mode 100644 index 00000000000..3d4e96f9d1b --- /dev/null +++ b/changelogs/unreleased/api-issuable-bulk-update.yml @@ -0,0 +1,5 @@ +--- +title: 'API: Bulk update for issues and MRs' +merge_request: 25201 +author: Robert Schilling +type: added diff --git a/changelogs/unreleased/api-nested-group-permission.yml b/changelogs/unreleased/api-nested-group-permission.yml deleted file mode 100644 index 3ec0df6893f..00000000000 --- a/changelogs/unreleased/api-nested-group-permission.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Return the maximum group access level in the projects API -merge_request: 24403 -author: -type: changed diff --git a/changelogs/unreleased/api-tags-search.yml b/changelogs/unreleased/api-tags-search.yml deleted file mode 100644 index 1501acd5a9e..00000000000 --- a/changelogs/unreleased/api-tags-search.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Support searching for tags' -merge_request: 24385 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/api-wiki-dot-slug.yml b/changelogs/unreleased/api-wiki-dot-slug.yml deleted file mode 100644 index 82c76fa7450..00000000000 --- a/changelogs/unreleased/api-wiki-dot-slug.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Support dots in wiki slugs' -merge_request: 24383 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/auto-devops-custom-domains.yml b/changelogs/unreleased/auto-devops-custom-domains.yml deleted file mode 100644 index 37e8ee26a4d..00000000000 --- a/changelogs/unreleased/auto-devops-custom-domains.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added support for custom hosts/domains to Auto DevOps -merge_request: 24248 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/auto-devops-kubectl-1-11-6.yml b/changelogs/unreleased/auto-devops-kubectl-1-11-6.yml deleted file mode 100644 index 1a8cdead4ac..00000000000 --- a/changelogs/unreleased/auto-devops-kubectl-1-11-6.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump kubectl in Auto DevOps to 1.11.6 -merge_request: 24176 -author: -type: other diff --git a/changelogs/unreleased/backup_aws_sse-c.yml b/changelogs/unreleased/backup_aws_sse-c.yml deleted file mode 100644 index 78b57d7efc3..00000000000 --- a/changelogs/unreleased/backup_aws_sse-c.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: Add support for customer provided encryption keys for Amazon S3 remote backups -merge_request: 23797 -author: Pepijn Van Eeckhoudt -type: added - diff --git a/changelogs/unreleased/backup_restore_fix_issue_46891.yml b/changelogs/unreleased/backup_restore_fix_issue_46891.yml deleted file mode 100644 index b8fe3b1b861..00000000000 --- a/changelogs/unreleased/backup_restore_fix_issue_46891.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Modify file restore to rectify tar issue -merge_request: 24000 -author: -type: fixed diff --git a/changelogs/unreleased/bump-ingress-chart-112.yml b/changelogs/unreleased/bump-ingress-chart-112.yml deleted file mode 100644 index 8a46fedb4b0..00000000000 --- a/changelogs/unreleased/bump-ingress-chart-112.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump nginx-ingress chart to 1.1.2 -merge_request: 24203 -author: -type: other diff --git a/changelogs/unreleased/bvl-fix-race-condition-creating-signature.yml b/changelogs/unreleased/bvl-fix-race-condition-creating-signature.yml deleted file mode 100644 index 307b4f526bb..00000000000 --- a/changelogs/unreleased/bvl-fix-race-condition-creating-signature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid race conditions when creating GpgSignature -merge_request: 24939 -author: -type: fixed diff --git a/changelogs/unreleased/chore-update-js-regex.yml b/changelogs/unreleased/chore-update-js-regex.yml deleted file mode 100644 index d45d0b47457..00000000000 --- a/changelogs/unreleased/chore-update-js-regex.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade js-regex gem to version 3.1 -merge_request: 24433 -author: rroger -type: changed diff --git a/changelogs/unreleased/cleanup-leagcy-artifact-migration.yml b/changelogs/unreleased/cleanup-leagcy-artifact-migration.yml deleted file mode 100644 index 6e8dac97249..00000000000 --- a/changelogs/unreleased/cleanup-leagcy-artifact-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cleanup legacy artifact background migration -merge_request: 24144 -author: -type: other diff --git a/changelogs/unreleased/cluster_application_version_updated.yml b/changelogs/unreleased/cluster_application_version_updated.yml deleted file mode 100644 index 34fe55dcc5e..00000000000 --- a/changelogs/unreleased/cluster_application_version_updated.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update cluster application version on updated and installed status -merge_request: 24810 -author: -type: other diff --git a/changelogs/unreleased/cluster_status_for_ugprading.yml b/changelogs/unreleased/cluster_status_for_ugprading.yml deleted file mode 100644 index ca1f8b3a786..00000000000 --- a/changelogs/unreleased/cluster_status_for_ugprading.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose version for each application in cluster_status JSON endpoint -merge_request: 24791 -author: -type: other diff --git a/changelogs/unreleased/container-repository-cleanup-api.yml b/changelogs/unreleased/container-repository-cleanup-api.yml deleted file mode 100644 index c2b23a9add0..00000000000 --- a/changelogs/unreleased/container-repository-cleanup-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Container Registry API with cleanup function -merge_request: 24303 -author: -type: added diff --git a/changelogs/unreleased/custom-helm-chart-repo.yml b/changelogs/unreleased/custom-helm-chart-repo.yml deleted file mode 100644 index 592d2f60ca2..00000000000 --- a/changelogs/unreleased/custom-helm-chart-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added feature to specify a custom Auto DevOps chart repository -merge_request: 24162 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/deprecated-force-reload.yml b/changelogs/unreleased/deprecated-force-reload.yml deleted file mode 100644 index 2a0e97089e0..00000000000 --- a/changelogs/unreleased/deprecated-force-reload.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Fix deprecation: Passing an argument to force an association to reload is - now deprecated' -merge_request: 24136 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/diff-file-finder.yml b/changelogs/unreleased/diff-file-finder.yml deleted file mode 100644 index 3160e9fc91b..00000000000 --- a/changelogs/unreleased/diff-file-finder.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added fuzzy file finder to merge requests -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/diff-tree-collapse-directories.yml b/changelogs/unreleased/diff-tree-collapse-directories.yml deleted file mode 100644 index 6eae48f2352..00000000000 --- a/changelogs/unreleased/diff-tree-collapse-directories.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Collapse directory structure in merge request file tree -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/dm-copy-suggestion-as-gfm.yml b/changelogs/unreleased/dm-copy-suggestion-as-gfm.yml deleted file mode 100644 index 96115e6ade1..00000000000 --- a/changelogs/unreleased/dm-copy-suggestion-as-gfm.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow suggestions to be copied and pasted as GFM -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/dm-trim-discussion-truncated-line-first-chars.yml b/changelogs/unreleased/dm-trim-discussion-truncated-line-first-chars.yml deleted file mode 100644 index 1e1fa8295c3..00000000000 --- a/changelogs/unreleased/dm-trim-discussion-truncated-line-first-chars.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug that caused Suggestion Markdown toolbar button to insert snippet with leading +/-/<space> -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/docs-push-mirror-GitLab-GitHub.yml b/changelogs/unreleased/docs-push-mirror-GitLab-GitHub.yml deleted file mode 100644 index 4539a9b7985..00000000000 --- a/changelogs/unreleased/docs-push-mirror-GitLab-GitHub.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updated docs for fields in pushing mirror from GitLab to GitHub -merge_request: 24566 -author: Joseph Yu -type: other diff --git a/changelogs/unreleased/dz-sort-labels-alphabetically.yml b/changelogs/unreleased/dz-sort-labels-alphabetically.yml new file mode 100644 index 00000000000..acfde3de999 --- /dev/null +++ b/changelogs/unreleased/dz-sort-labels-alphabetically.yml @@ -0,0 +1,5 @@ +--- +title: Sort labels alphabetically on issues and merge requests list +merge_request: 25470 +author: +type: changed diff --git a/changelogs/unreleased/expire-job-artifacts-worker.yml b/changelogs/unreleased/expire-job-artifacts-worker.yml deleted file mode 100644 index cda6e9ff497..00000000000 --- a/changelogs/unreleased/expire-job-artifacts-worker.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Efficiently remove expired artifacts in `ExpireBuildArtifactsWorker` -merge_request: 24450 -author: -type: performance diff --git a/changelogs/unreleased/features-document-graphicsmagick-source-installation.yml b/changelogs/unreleased/features-document-graphicsmagick-source-installation.yml deleted file mode 100644 index b224cace4bf..00000000000 --- a/changelogs/unreleased/features-document-graphicsmagick-source-installation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Document graphicsmagick installation for source installation -merge_request: 24404 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/filter-confidential-issues.yml b/changelogs/unreleased/filter-confidential-issues.yml new file mode 100644 index 00000000000..83f19a57aab --- /dev/null +++ b/changelogs/unreleased/filter-confidential-issues.yml @@ -0,0 +1,5 @@ +--- +title: Ability to filter confidential issues +merge_request: 24960 +author: Robert Schilling +type: added diff --git a/changelogs/unreleased/fix-39759-new-project-icon-vertical-align.yml b/changelogs/unreleased/fix-39759-new-project-icon-vertical-align.yml deleted file mode 100644 index 3d87807dbc1..00000000000 --- a/changelogs/unreleased/fix-39759-new-project-icon-vertical-align.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust vertical alignment for project visibility icons -merge_request: 24511 -author: Martin Hobert -type: fixed diff --git a/changelogs/unreleased/fix-403-page-is-rendered-but-404-is-the-response.yml b/changelogs/unreleased/fix-403-page-is-rendered-but-404-is-the-response.yml deleted file mode 100644 index eda69b32094..00000000000 --- a/changelogs/unreleased/fix-403-page-is-rendered-but-404-is-the-response.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show the correct error page when access is denied -merge_request: 23932 -author: -type: fixed diff --git a/changelogs/unreleased/fix-49388.yml b/changelogs/unreleased/fix-49388.yml deleted file mode 100644 index f8b5e3e1943..00000000000 --- a/changelogs/unreleased/fix-49388.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update metrics environment dropdown to show complete option set -merge_request: 24441 -author: -type: fixed diff --git a/changelogs/unreleased/fix-55956-oversized-dropdown-button-custom-notifications.yml b/changelogs/unreleased/fix-55956-oversized-dropdown-button-custom-notifications.yml deleted file mode 100644 index e33699a2112..00000000000 --- a/changelogs/unreleased/fix-55956-oversized-dropdown-button-custom-notifications.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed oversized custom project notification selector dropdown -merge_request: 24557 -author: -type: fixed diff --git a/changelogs/unreleased/fix-56558-move-primary-button.yml b/changelogs/unreleased/fix-56558-move-primary-button.yml deleted file mode 100644 index 4dcc896b327..00000000000 --- a/changelogs/unreleased/fix-56558-move-primary-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moved primary button for labels to follow the design patterns used on rest of the site -merge_request: -author: Martin Hobert -type: fixed diff --git a/changelogs/unreleased/fix-auto-devops-domain-title-on-admin-settings.yml b/changelogs/unreleased/fix-auto-devops-domain-title-on-admin-settings.yml deleted file mode 100644 index bb0b193a846..00000000000 --- a/changelogs/unreleased/fix-auto-devops-domain-title-on-admin-settings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes Auto DevOps title on CI/CD admin settings -merge_request: 24249 -author: -type: other diff --git a/changelogs/unreleased/fix-badges-logs.yml b/changelogs/unreleased/fix-badges-logs.yml new file mode 100644 index 00000000000..6236e7b046d --- /dev/null +++ b/changelogs/unreleased/fix-badges-logs.yml @@ -0,0 +1,5 @@ +--- +title: Doc - fix the url of pipeline status badge +merge_request: 25404 +author: Aviad Levy +type: fixed diff --git a/changelogs/unreleased/fix-repo-settings-file-upload-error.yml b/changelogs/unreleased/fix-repo-settings-file-upload-error.yml deleted file mode 100644 index b219fdfaa1e..00000000000 --- a/changelogs/unreleased/fix-repo-settings-file-upload-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug causing repository mirror settings UI to break -merge_request: 23712 -author: -type: fixed diff --git a/changelogs/unreleased/fix_jira_integration_VCS1019.yml b/changelogs/unreleased/fix_jira_integration_VCS1019.yml deleted file mode 100644 index 3582ec1fe0f..00000000000 --- a/changelogs/unreleased/fix_jira_integration_VCS1019.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Jira Service password validation on project integration services. -merge_request: 24896 -author: Daniel Juarez -type: fixed diff --git a/changelogs/unreleased/fj-55882-fix-files-api-content-disposition.yml b/changelogs/unreleased/fj-55882-fix-files-api-content-disposition.yml deleted file mode 100644 index f64b29644b0..00000000000 --- a/changelogs/unreleased/fj-55882-fix-files-api-content-disposition.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix files/blob api endpoints content disposition -merge_request: 24267 -author: -type: fixed diff --git a/changelogs/unreleased/force-redeploy-on-updated-secrets.yml b/changelogs/unreleased/force-redeploy-on-updated-secrets.yml deleted file mode 100644 index 3b727c99dd5..00000000000 --- a/changelogs/unreleased/force-redeploy-on-updated-secrets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redeploy Auto DevOps deployment on variable updates -merge_request: 24498 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/gitaly-update-1-13-0.yml b/changelogs/unreleased/gitaly-update-1-13-0.yml deleted file mode 100644 index 73de25a532d..00000000000 --- a/changelogs/unreleased/gitaly-update-1-13-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade Gitaly to 1.13.0 -merge_request: 24429 -author: -type: other diff --git a/changelogs/unreleased/gitaly-update-1.18.0.yml b/changelogs/unreleased/gitaly-update-1.18.0.yml deleted file mode 100644 index 392527f5e5d..00000000000 --- a/changelogs/unreleased/gitaly-update-1.18.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade gitaly to 1.18.0 -merge_request: 24981 -author: -type: other diff --git a/changelogs/unreleased/gitlab-workhorse-update-8.1.0.yml b/changelogs/unreleased/gitlab-workhorse-update-8.1.0.yml deleted file mode 100644 index 1e0160c4d40..00000000000 --- a/changelogs/unreleased/gitlab-workhorse-update-8.1.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade gitlab-workhorse to 8.1.0 -merge_request: 24571 -author: -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-clusters.yml b/changelogs/unreleased/gt-externalize-app-views-clusters.yml deleted file mode 100644 index 6d2284ead37..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-clusters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/clusters` -merge_request: 24666 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-email_rejection_mailer.yml b/changelogs/unreleased/gt-externalize-app-views-email_rejection_mailer.yml deleted file mode 100644 index 8f6fbdceb54..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-email_rejection_mailer.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/email_rejection_mailer` -merge_request: 24869 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-instance_statistics.yml b/changelogs/unreleased/gt-externalize-app-views-instance_statistics.yml deleted file mode 100644 index a3bf54a1339..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-instance_statistics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/instance_statistics` -merge_request: 24809 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-ci.yml b/changelogs/unreleased/gt-externalize-app-views-projects-ci.yml deleted file mode 100644 index ecc878ab892..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-ci.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/ci` -merge_request: 24617 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-milestones.yml b/changelogs/unreleased/gt-externalize-app-views-projects-milestones.yml deleted file mode 100644 index 56aaac812bb..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-milestones.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/milestones` -merge_request: 24726 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-pages_domains.yml b/changelogs/unreleased/gt-externalize-app-views-projects-pages_domains.yml deleted file mode 100644 index f60776a2ed8..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-pages_domains.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/pages_domains` -merge_request: 24723 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-project_members.yml b/changelogs/unreleased/gt-externalize-app-views-projects-project_members.yml deleted file mode 100644 index 1acea10fcaa..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-project_members.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/project_members` -merge_request: 23227 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-sent_notifications.yml b/changelogs/unreleased/gt-externalize-app-views-sent_notifications.yml deleted file mode 100644 index e77b5376fa8..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-sent_notifications.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/sent_notifications` -merge_request: 24576 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-remove-unused-button-class.yml b/changelogs/unreleased/gt-remove-unused-button-class.yml deleted file mode 100644 index f7889e1d6f6..00000000000 --- a/changelogs/unreleased/gt-remove-unused-button-class.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unused button classes `btn-create` and `comment-btn` -merge_request: 23232 -author: George Tsiolis -type: performance diff --git a/changelogs/unreleased/gt-rename-gray-theme-color-variables.yml b/changelogs/unreleased/gt-rename-gray-theme-color-variables.yml deleted file mode 100644 index b612bb3ee39..00000000000 --- a/changelogs/unreleased/gt-rename-gray-theme-color-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove all `$theme-gray-{weight}` variables in favor of `$gray-{weight}` -merge_request: 24333 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-update-string-struture-for-group-runners.yml b/changelogs/unreleased/gt-update-string-struture-for-group-runners.yml deleted file mode 100644 index fa06a78adae..00000000000 --- a/changelogs/unreleased/gt-update-string-struture-for-group-runners.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update string structure for available group runners -merge_request: 24187 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/hnk-master-patch-61932.yml b/changelogs/unreleased/hnk-master-patch-61932.yml deleted file mode 100644 index 8cc9d0057a9..00000000000 --- a/changelogs/unreleased/hnk-master-patch-61932.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update runner admin page to make description field larger -merge_request: 23593 -author: Sascha Reynolds -type: fixed diff --git a/changelogs/unreleased/homepage-proj-descr-cutoff.yml b/changelogs/unreleased/homepage-proj-descr-cutoff.yml deleted file mode 100644 index 837c01f6722..00000000000 --- a/changelogs/unreleased/homepage-proj-descr-cutoff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Increase line height of project summaries -merge_request: -author: gfyoung -type: fixed diff --git a/changelogs/unreleased/improve-snippets-empty-state.yml b/changelogs/unreleased/improve-snippets-empty-state.yml new file mode 100644 index 00000000000..9859243a81f --- /dev/null +++ b/changelogs/unreleased/improve-snippets-empty-state.yml @@ -0,0 +1,5 @@ +--- +title: Improve snippets empty state +merge_request: 18348 +author: George Tsiolis +type: changed diff --git a/changelogs/unreleased/introduce-environment-search-endpoint.yml b/changelogs/unreleased/introduce-environment-search-endpoint.yml deleted file mode 100644 index 01851ba7d27..00000000000 --- a/changelogs/unreleased/introduce-environment-search-endpoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Introduce Internal API for searching environment names -merge_request: 24923 -author: -type: added diff --git a/changelogs/unreleased/iss-32584-preserve-line-number-fragment-after-redirect.yml b/changelogs/unreleased/iss-32584-preserve-line-number-fragment-after-redirect.yml deleted file mode 100644 index 8025cd472bd..00000000000 --- a/changelogs/unreleased/iss-32584-preserve-line-number-fragment-after-redirect.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix lost line number when navigating to a specific line in a protected file - before authenticating. -merge_request: 19165 -author: Scott Escue -type: fixed diff --git a/changelogs/unreleased/issue_55744.yml b/changelogs/unreleased/issue_55744.yml deleted file mode 100644 index 6a643732b18..00000000000 --- a/changelogs/unreleased/issue_55744.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix template labels not being created on new projects -merge_request: 24803 -author: -type: fixed diff --git a/changelogs/unreleased/jej-avoid-csrf-check-on-saml-failure.yml b/changelogs/unreleased/jej-avoid-csrf-check-on-saml-failure.yml deleted file mode 100644 index 18cced2906a..00000000000 --- a/changelogs/unreleased/jej-avoid-csrf-check-on-saml-failure.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display SAML failure messages instead of expecting CSRF token -merge_request: 24509 -author: -type: fixed diff --git a/changelogs/unreleased/jlenny-AddPagesTemplates.yml b/changelogs/unreleased/jlenny-AddPagesTemplates.yml deleted file mode 100644 index 0985e4e18ed..00000000000 --- a/changelogs/unreleased/jlenny-AddPagesTemplates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add templates for most popular Pages templates -merge_request: 24906 -author: -type: added diff --git a/changelogs/unreleased/jlenny-NewAndroidTemplate.yml b/changelogs/unreleased/jlenny-NewAndroidTemplate.yml deleted file mode 100644 index ae8c58da859..00000000000 --- a/changelogs/unreleased/jlenny-NewAndroidTemplate.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add template for Android with Fastlane -merge_request: 24722 -author: -type: changed diff --git a/changelogs/unreleased/jprovazn-remove-redcarpet.yml b/changelogs/unreleased/jprovazn-remove-redcarpet.yml deleted file mode 100644 index 4e12de2d19b..00000000000 --- a/changelogs/unreleased/jprovazn-remove-redcarpet.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removed deprecated Redcarpet markdown engine. -merge_request: -author: -type: removed diff --git a/changelogs/unreleased/knative-list.yml b/changelogs/unreleased/knative-list.yml deleted file mode 100644 index 754d8e172cf..00000000000 --- a/changelogs/unreleased/knative-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Modified Knative list view to provide more details -merge_request: 24072 -author: Chris Baumbauer -type: changed diff --git a/changelogs/unreleased/knative-show-page.yml b/changelogs/unreleased/knative-show-page.yml deleted file mode 100644 index a48b754940f..00000000000 --- a/changelogs/unreleased/knative-show-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Knative detailed view -merge_request: 23863 -author: Chris Baumbauer -type: added diff --git a/changelogs/unreleased/local-markdown-version-bkp3.yml b/changelogs/unreleased/local-markdown-version-bkp3.yml deleted file mode 100644 index ce5bff6ae6b..00000000000 --- a/changelogs/unreleased/local-markdown-version-bkp3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow admins to invalidate markdown texts by setting local markdown version. -merge_request: -author: -type: added diff --git a/changelogs/unreleased/mg-fix-bad-cluster-update-entrypoint.yml b/changelogs/unreleased/mg-fix-bad-cluster-update-entrypoint.yml deleted file mode 100644 index 932850cc825..00000000000 --- a/changelogs/unreleased/mg-fix-bad-cluster-update-entrypoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix cluster page non-interactive on form validation error -merge_request: 24583 -author: -type: fixed diff --git a/changelogs/unreleased/monospace-registry-tags.yml b/changelogs/unreleased/monospace-registry-tags.yml deleted file mode 100644 index b5992707d8c..00000000000 --- a/changelogs/unreleased/monospace-registry-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use monospace font for registry table tag id and tag name -merge_request: 24205 -author: -type: other diff --git a/changelogs/unreleased/move-job-cancel-btn.yml b/changelogs/unreleased/move-job-cancel-btn.yml deleted file mode 100644 index 41f8e1be5f8..00000000000 --- a/changelogs/unreleased/move-job-cancel-btn.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move cancel & new issue button on job page -merge_request: 24074 -author: -type: changed diff --git a/changelogs/unreleased/move-permission-check-manual-actions-on-deployments.yml b/changelogs/unreleased/move-permission-check-manual-actions-on-deployments.yml deleted file mode 100644 index 9e979b48ad1..00000000000 --- a/changelogs/unreleased/move-permission-check-manual-actions-on-deployments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move permission check of manual actions of deployments -merge_request: 24660 -author: -type: other diff --git a/changelogs/unreleased/mr-file-tree-blob-truncate-improvements.yml b/changelogs/unreleased/mr-file-tree-blob-truncate-improvements.yml deleted file mode 100644 index b01962591c6..00000000000 --- a/changelogs/unreleased/mr-file-tree-blob-truncate-improvements.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add folder header to files in merge request tree list -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/mr-rebase-failing-tests.yml b/changelogs/unreleased/mr-rebase-failing-tests.yml deleted file mode 100644 index 07ae05766b1..00000000000 --- a/changelogs/unreleased/mr-rebase-failing-tests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed rebase button not showing in merge request widget -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/not-run-pipeline-on-empty-merge-request.yml b/changelogs/unreleased/not-run-pipeline-on-empty-merge-request.yml deleted file mode 100644 index 732e4baf4e9..00000000000 --- a/changelogs/unreleased/not-run-pipeline-on-empty-merge-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't create new merge request pipeline without commits -merge_request: 24503 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/notebook-multiple-outputs.yml b/changelogs/unreleased/notebook-multiple-outputs.yml deleted file mode 100644 index 38cc52c0634..00000000000 --- a/changelogs/unreleased/notebook-multiple-outputs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support multiple outputs in jupyter notebooks -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/notes-awards-double-tooltip-fix.yml b/changelogs/unreleased/notes-awards-double-tooltip-fix.yml deleted file mode 100644 index 23338a60c2a..00000000000 --- a/changelogs/unreleased/notes-awards-double-tooltip-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed double tooltips on note awards buttons -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/osw-enforces-project-removal-with-past-failed-attempts.yml b/changelogs/unreleased/osw-enforces-project-removal-with-past-failed-attempts.yml deleted file mode 100644 index 6a2a67e7aa8..00000000000 --- a/changelogs/unreleased/osw-enforces-project-removal-with-past-failed-attempts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cleanup stale +deleted repo paths on project removal (adjusts project removal bug) -merge_request: 24269 -author: -type: fixed diff --git a/changelogs/unreleased/osw-fix-bottom-expansion-diff-comment.yml b/changelogs/unreleased/osw-fix-bottom-expansion-diff-comment.yml deleted file mode 100644 index b2ac53312ae..00000000000 --- a/changelogs/unreleased/osw-fix-bottom-expansion-diff-comment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjusts duplicated line when commenting on unfolded diff lines (in the bottom) -merge_request: 24201 -author: -type: fixed diff --git a/changelogs/unreleased/patch-38.yml b/changelogs/unreleased/patch-38.yml deleted file mode 100644 index 9179fc6846e..00000000000 --- a/changelogs/unreleased/patch-38.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: fix display comment avatars issue in IE 11 -merge_request: 24777 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/pl-serialize-ac-parameters.yml b/changelogs/unreleased/pl-serialize-ac-parameters.yml deleted file mode 100644 index aad222b5506..00000000000 --- a/changelogs/unreleased/pl-serialize-ac-parameters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make `ActionController::Parameters` serializable for sidekiq jobs -merge_request: 24864 -author: -type: fixed diff --git a/changelogs/unreleased/profile-project-empty-state.yml b/changelogs/unreleased/profile-project-empty-state.yml deleted file mode 100644 index 484306d5b98..00000000000 --- a/changelogs/unreleased/profile-project-empty-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added empty project illustration and updated text to user profile overview -merge_request: 23973 -author: Fernando Arias -type: changed diff --git a/changelogs/unreleased/raise-on-unfiltered-params.yml b/changelogs/unreleased/raise-on-unfiltered-params.yml deleted file mode 100644 index 531e9ba807e..00000000000 --- a/changelogs/unreleased/raise-on-unfiltered-params.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Actually set raise_on_unfiltered_parameters to true -merge_request: 24443 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/rd-update-last_activity_on-on-logins-and-browsing-activity-54947.yml b/changelogs/unreleased/rd-update-last_activity_on-on-logins-and-browsing-activity-54947.yml deleted file mode 100644 index abce9dcc0c6..00000000000 --- a/changelogs/unreleased/rd-update-last_activity_on-on-logins-and-browsing-activity-54947.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update last_activity_on for Users on some main GET endpoints -merge_request: 24642 -author: -type: changed diff --git a/changelogs/unreleased/refactor-56366-extract-resolve-discussion-button.yml b/changelogs/unreleased/refactor-56366-extract-resolve-discussion-button.yml deleted file mode 100644 index 98859e8aa07..00000000000 --- a/changelogs/unreleased/refactor-56366-extract-resolve-discussion-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refactored NoteableDiscussion by extracting ResolveDiscussionButton -merge_request: 24505 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml b/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml deleted file mode 100644 index 9a0d16c2d70..00000000000 --- a/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extracted JumpToNextDiscussionButton to its own component -author: Martin Hobert -merge_request: 24506 -type: other diff --git a/changelogs/unreleased/refactor-56370-extract-reply-placeholder-component.yml b/changelogs/unreleased/refactor-56370-extract-reply-placeholder-component.yml deleted file mode 100644 index a216d294b30..00000000000 --- a/changelogs/unreleased/refactor-56370-extract-reply-placeholder-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extracted ReplyPlaceholder to its own component -merge_request: 24507 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/remove-cancel-all-button-in-job-list-view.yml b/changelogs/unreleased/remove-cancel-all-button-in-job-list-view.yml deleted file mode 100644 index 06546bc5a8e..00000000000 --- a/changelogs/unreleased/remove-cancel-all-button-in-job-list-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove Cancel all jobs button in general jobs list view -merge_request: -author: Jordi Llull -type: removed diff --git a/changelogs/unreleased/remove-diff-coloring.yml b/changelogs/unreleased/remove-diff-coloring.yml deleted file mode 100644 index 1ee1b525c35..00000000000 --- a/changelogs/unreleased/remove-diff-coloring.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'remove red/green colors from diff view of no-color syntax theme' -merge_request: 24582 -author: khm -type: changed diff --git a/changelogs/unreleased/remove-gap-between-mr-tabs-and-file-header.yml b/changelogs/unreleased/remove-gap-between-mr-tabs-and-file-header.yml deleted file mode 100644 index ce8e1829b48..00000000000 --- a/changelogs/unreleased/remove-gap-between-mr-tabs-and-file-header.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove extra space between MR tab bar and sticky file headers -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/search-title.yml b/changelogs/unreleased/search-title.yml deleted file mode 100644 index ff0933ed0b2..00000000000 --- a/changelogs/unreleased/search-title.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add 'in' filter that modifies scope of 'search' filter to issues and merge requests API -merge_request: 24350 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/security-22076-sanitize-url-in-names.yml b/changelogs/unreleased/security-22076-sanitize-url-in-names.yml deleted file mode 100644 index 4e0ad4dd4c4..00000000000 --- a/changelogs/unreleased/security-22076-sanitize-url-in-names.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Sanitize user full name to clean up any URL to prevent mail clients from auto-linking - URLs -merge_request: 2793 -author: -type: security diff --git a/changelogs/unreleased/security-2770-verify-bundle-import-files.yml b/changelogs/unreleased/security-2770-verify-bundle-import-files.yml deleted file mode 100644 index dea40dd1ef1..00000000000 --- a/changelogs/unreleased/security-2770-verify-bundle-import-files.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate bundle files before unpacking them -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-55320-stored-xss-in-user-status.yml b/changelogs/unreleased/security-55320-stored-xss-in-user-status.yml deleted file mode 100644 index 8ea9ae0ccdf..00000000000 --- a/changelogs/unreleased/security-55320-stored-xss-in-user-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use sanitized user status message for user popover -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-stored-xss-via-katex.yml b/changelogs/unreleased/security-stored-xss-via-katex.yml deleted file mode 100644 index a71ae1123f2..00000000000 --- a/changelogs/unreleased/security-stored-xss-via-katex.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed XSS content in KaTex links -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-disable-nil-user-id-identity-validation.yml b/changelogs/unreleased/sh-disable-nil-user-id-identity-validation.yml deleted file mode 100644 index 5af3bdce51b..00000000000 --- a/changelogs/unreleased/sh-disable-nil-user-id-identity-validation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix failed LDAP logins when nil user_id present -merge_request: 24749 -author: -type: fixed diff --git a/changelogs/unreleased/sh-encode-content-disposition.yml b/changelogs/unreleased/sh-encode-content-disposition.yml deleted file mode 100644 index b40ee6a85a8..00000000000 --- a/changelogs/unreleased/sh-encode-content-disposition.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Encode Content-Disposition filenames -merge_request: 24919 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-backfill-project-repo-migration.yml b/changelogs/unreleased/sh-fix-backfill-project-repo-migration.yml deleted file mode 100644 index d1d4412eb50..00000000000 --- a/changelogs/unreleased/sh-fix-backfill-project-repo-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix duplicate project disk path in BackfillLegacyProjectRepositories -merge_request: 24213 -author: -type: changed diff --git a/changelogs/unreleased/sh-fix-bitbucket-server-error-handling.yml b/changelogs/unreleased/sh-fix-bitbucket-server-error-handling.yml deleted file mode 100644 index 87405fa0a78..00000000000 --- a/changelogs/unreleased/sh-fix-bitbucket-server-error-handling.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Bitbucket Server importer error handling -merge_request: 24343 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-board-user-assigns.yml b/changelogs/unreleased/sh-fix-board-user-assigns.yml deleted file mode 100644 index 89c228107f0..00000000000 --- a/changelogs/unreleased/sh-fix-board-user-assigns.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 403 errors when adding an assignee list in project boards -merge_request: 25263 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-cpp-templates-404.yml b/changelogs/unreleased/sh-fix-cpp-templates-404.yml new file mode 100644 index 00000000000..ac958d84099 --- /dev/null +++ b/changelogs/unreleased/sh-fix-cpp-templates-404.yml @@ -0,0 +1,5 @@ +--- +title: Fix 404s when C++ .gitignore template selected +merge_request: 25416 +author: +type: fixed diff --git a/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml b/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml new file mode 100644 index 00000000000..e6c762f1d47 --- /dev/null +++ b/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml @@ -0,0 +1,5 @@ +--- +title: Remove duplicate XHR request when requesting new pipeline page +merge_request: 25506 +author: +type: fixed diff --git a/changelogs/unreleased/sh-fix-import-redirect-vulnerability.yml b/changelogs/unreleased/sh-fix-import-redirect-vulnerability.yml deleted file mode 100644 index addf327b69d..00000000000 --- a/changelogs/unreleased/sh-fix-import-redirect-vulnerability.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Alias GitHub and BitBucket OAuth2 callback URLs -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-fix-issue-58103.yml b/changelogs/unreleased/sh-fix-issue-58103.yml new file mode 100644 index 00000000000..1599af23fed --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-58103.yml @@ -0,0 +1,5 @@ +--- +title: Properly handle multiple X-Forwarded-For addresses in runner IP +merge_request: 25511 +author: +type: fixed diff --git a/changelogs/unreleased/sh-fix-pages-zip-constant.yml b/changelogs/unreleased/sh-fix-pages-zip-constant.yml deleted file mode 100644 index fcd8aa45825..00000000000 --- a/changelogs/unreleased/sh-fix-pages-zip-constant.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix uninitialized constant with GitLab Pages -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml b/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml deleted file mode 100644 index 414c8663049..00000000000 --- a/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 404s with snippet uploads in object storage -merge_request: 24550 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-upload-snippets-with-relative-url-root.yml b/changelogs/unreleased/sh-fix-upload-snippets-with-relative-url-root.yml deleted file mode 100644 index 8bc1e4b4f8a..00000000000 --- a/changelogs/unreleased/sh-fix-upload-snippets-with-relative-url-root.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 404s for snippet uploads when relative URL root used -merge_request: 24588 -author: -type: fixed diff --git a/changelogs/unreleased/sh-import-source-branch-github-forks.yml b/changelogs/unreleased/sh-import-source-branch-github-forks.yml deleted file mode 100644 index b5ea60202c0..00000000000 --- a/changelogs/unreleased/sh-import-source-branch-github-forks.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create the source branch for a GitHub import -merge_request: 25064 -author: -type: fixed diff --git a/changelogs/unreleased/sh-issue-53419-fix.yml b/changelogs/unreleased/sh-issue-53419-fix.yml deleted file mode 100644 index ab8b65857e2..00000000000 --- a/changelogs/unreleased/sh-issue-53419-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Bitbucket Server import not allowing personal projects -merge_request: 23601 -author: -type: fixed diff --git a/changelogs/unreleased/sh-preload-associations-for-group-api.yml b/changelogs/unreleased/sh-preload-associations-for-group-api.yml deleted file mode 100644 index 24e424b7efb..00000000000 --- a/changelogs/unreleased/sh-preload-associations-for-group-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate N+1 queries in /api/groups/:id -merge_request: 24513 -author: -type: performance diff --git a/changelogs/unreleased/shared_with_group_path.yml b/changelogs/unreleased/shared_with_group_path.yml deleted file mode 100644 index 73ba9a9f30a..00000000000 --- a/changelogs/unreleased/shared_with_group_path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add group full path to project's shared_with_groups -merge_request: 24052 -author: Mathieu Parent -type: added diff --git a/changelogs/unreleased/support-chunking-in-client.yml b/changelogs/unreleased/support-chunking-in-client.yml deleted file mode 100644 index e50648ea4b2..00000000000 --- a/changelogs/unreleased/support-chunking-in-client.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix code search when text is larger than max gRPC message size -merge_request: 24111 -author: -type: changed diff --git a/changelogs/unreleased/syntax-highlighting-again.yml b/changelogs/unreleased/syntax-highlighting-again.yml deleted file mode 100644 index 14223fc0927..00000000000 --- a/changelogs/unreleased/syntax-highlighting-again.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix suggested changes syntax highlighting -merge_request: 25116 -author: -type: fixed diff --git a/changelogs/unreleased/test-permissions.yml b/changelogs/unreleased/test-permissions.yml deleted file mode 100644 index cfb69fdcb1e..00000000000 --- a/changelogs/unreleased/test-permissions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disallows unauthorized users from accessing the pipelines section. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/tooltips-to-top.yml b/changelogs/unreleased/tooltips-to-top.yml deleted file mode 100644 index 51bf127089e..00000000000 --- a/changelogs/unreleased/tooltips-to-top.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change spawning of tooltips to be top by default -merge_request: 21223 -author: -type: changed diff --git a/changelogs/unreleased/twang2218-gitlab-ce-i18n-extract-app-views-search.yml b/changelogs/unreleased/twang2218-gitlab-ce-i18n-extract-app-views-search.yml deleted file mode 100644 index 1af1fe09f33..00000000000 --- a/changelogs/unreleased/twang2218-gitlab-ce-i18n-extract-app-views-search.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'i18n: externalize strings from ''app/views/search''' -merge_request: 24297 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/update-gitaly.yml b/changelogs/unreleased/update-gitaly.yml deleted file mode 100644 index 4ba42a689a7..00000000000 --- a/changelogs/unreleased/update-gitaly.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Gitaly to v1.17.0 -merge_request: 24873 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml deleted file mode 100644 index 7d92929221f..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.1.45 -merge_request: 24564 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml new file mode 100644 index 00000000000..3bf55630c4d --- /dev/null +++ b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml @@ -0,0 +1,5 @@ +--- +title: Update GitLab Runner Helm Chart to 0.2.0 +merge_request: 25493 +author: +type: other diff --git a/changelogs/unreleased/update-gitlab-styles.yml b/changelogs/unreleased/update-gitlab-styles.yml deleted file mode 100644 index 379f0ad4486..00000000000 --- a/changelogs/unreleased/update-gitlab-styles.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update gitlab-styles to 2.5.1 -merge_request: 24336 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/update-pages-config-only-when-changed.yml b/changelogs/unreleased/update-pages-config-only-when-changed.yml deleted file mode 100644 index 8d9e02df678..00000000000 --- a/changelogs/unreleased/update-pages-config-only-when-changed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not reload daemon if configuration file of pages does not change -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/update-pages-extensionless-urls.yml b/changelogs/unreleased/update-pages-extensionless-urls.yml deleted file mode 100644 index 13b3e1df500..00000000000 --- a/changelogs/unreleased/update-pages-extensionless-urls.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for extensionless pages URLs -merge_request: 24876 -author: -type: added diff --git a/changelogs/unreleased/update-sidekiq-cron.yml b/changelogs/unreleased/update-sidekiq-cron.yml deleted file mode 100644 index edce32e3753..00000000000 --- a/changelogs/unreleased/update-sidekiq-cron.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Update sidekiq-cron to 1.0.4 and use fugit to replace rufus-scheduler to parse - cron syntax -merge_request: 24235 -author: -type: other diff --git a/changelogs/unreleased/update-smooshpack.yml b/changelogs/unreleased/update-smooshpack.yml deleted file mode 100644 index a9222088d53..00000000000 --- a/changelogs/unreleased/update-smooshpack.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgraded Codesandbox smooshpack package -merge_request: -author: -type: other diff --git a/changelogs/unreleased/update-spriteicon-from-icon-on-profile.yml b/changelogs/unreleased/update-spriteicon-from-icon-on-profile.yml deleted file mode 100644 index 32259bfacd4..00000000000 --- a/changelogs/unreleased/update-spriteicon-from-icon-on-profile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update to GitLab SVG icon from Font Awesome in profile for location and work -merge_request: 24671 -author: Yoginth -type: changed diff --git a/changelogs/unreleased/update-ui-admin-appearance.yml b/changelogs/unreleased/update-ui-admin-appearance.yml deleted file mode 100644 index 7bc35029d77..00000000000 --- a/changelogs/unreleased/update-ui-admin-appearance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update UI for admin appearance settings -merge_request: 24685 -author: -type: other diff --git a/changelogs/unreleased/update-workhorse-8-2-0.yml b/changelogs/unreleased/update-workhorse-8-2-0.yml deleted file mode 100644 index 7d593917a25..00000000000 --- a/changelogs/unreleased/update-workhorse-8-2-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Workhorse to v8.2.0 -merge_request: 24909 -author: -type: fixed diff --git a/changelogs/unreleased/use-deployment-relation-to-fetch-environment-ce.yml b/changelogs/unreleased/use-deployment-relation-to-fetch-environment-ce.yml deleted file mode 100644 index 1ec276b4abc..00000000000 --- a/changelogs/unreleased/use-deployment-relation-to-fetch-environment-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use deployment relation to get an environment name -merge_request: 24890 -author: -type: performance diff --git a/changelogs/unreleased/use_upgrade_install_for_helm_apps.yml b/changelogs/unreleased/use_upgrade_install_for_helm_apps.yml deleted file mode 100644 index b41c3cfa1ab..00000000000 --- a/changelogs/unreleased/use_upgrade_install_for_helm_apps.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added ability to upgrade cluster applications -merge_request: 24789 -author: -type: added diff --git a/changelogs/unreleased/winh-add-list-dropdown-height.yml b/changelogs/unreleased/winh-add-list-dropdown-height.yml deleted file mode 100644 index 6bcedc15cc9..00000000000 --- a/changelogs/unreleased/winh-add-list-dropdown-height.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust height of "Add list" dropdown in issue boards -merge_request: 24227 -author: -type: fixed diff --git a/changelogs/unreleased/workhorse-8-3-0.yml b/changelogs/unreleased/workhorse-8-3-0.yml deleted file mode 100644 index 6ae01d64ae5..00000000000 --- a/changelogs/unreleased/workhorse-8-3-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Workhorse to v8.3.0 -merge_request: 24959 -author: -type: other diff --git a/changelogs/unreleased/yoginth-avatar-on-settings-sidebar.yml b/changelogs/unreleased/yoginth-avatar-on-settings-sidebar.yml deleted file mode 100644 index 0ec76f9ce02..00000000000 --- a/changelogs/unreleased/yoginth-avatar-on-settings-sidebar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added Avatar in the settings sidebar -merge_request: 24515 -author: Yoginth -type: changed diff --git a/changelogs/unreleased/zj-feature-gate-set-project-path.yml b/changelogs/unreleased/zj-feature-gate-set-project-path.yml deleted file mode 100644 index b426a2f3fe7..00000000000 --- a/changelogs/unreleased/zj-feature-gate-set-project-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow setting of feature gates per project -merge_request: 24184 -author: -type: added diff --git a/config/application.rb b/config/application.rb index 49e7f5836e4..1c11e347281 100644 --- a/config/application.rb +++ b/config/application.rb @@ -147,6 +147,8 @@ module Gitlab config.assets.precompile << "errors.css" config.assets.precompile << "csslab.css" + config.assets.precompile << "highlight/themes/*.css" + # Import gitlab-svgs directly from vendored directory config.assets.paths << "#{config.root}/node_modules/@gitlab/svgs/dist" config.assets.precompile << "icons.svg" diff --git a/danger/commit_messages/Dangerfile b/danger/commit_messages/Dangerfile index d9ba71a73cd..9be1ce2ff86 100644 --- a/danger/commit_messages/Dangerfile +++ b/danger/commit_messages/Dangerfile @@ -199,7 +199,7 @@ def lint_commit(commit) end def lint_commits(commits) - failed = commits.reject do |commit| + failed = commits.select do |commit| lint_commit(commit) end diff --git a/db/migrate/20180314145917_add_header_and_footer_banners_to_appearances_table.rb b/db/migrate/20180314145917_add_header_and_footer_banners_to_appearances_table.rb new file mode 100644 index 00000000000..8aba3448035 --- /dev/null +++ b/db/migrate/20180314145917_add_header_and_footer_banners_to_appearances_table.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AddHeaderAndFooterBannersToAppearancesTable < ActiveRecord::Migration[4.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + add_column :appearances, :header_message, :text + add_column :appearances, :header_message_html, :text + + add_column :appearances, :footer_message, :text + add_column :appearances, :footer_message_html, :text + + add_column :appearances, :message_background_color, :text + add_column :appearances, :message_font_color, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index 1651a24f412..1bdc9682cc9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -37,6 +37,12 @@ ActiveRecord::Schema.define(version: 20190204115450) do t.integer "cached_markdown_version" t.text "new_project_guidelines" t.text "new_project_guidelines_html" + t.text "header_message" + t.text "header_message_html" + t.text "footer_message" + t.text "footer_message_html" + t.text "message_background_color" + t.text "message_font_color" t.string "favicon" end diff --git a/doc/administration/auth/authentiq.md b/doc/administration/auth/authentiq.md index 94a8803fff1..726622d8599 100644 --- a/doc/administration/auth/authentiq.md +++ b/doc/administration/auth/authentiq.md @@ -51,7 +51,7 @@ Authentiq will generate a Client ID and the accompanying Client Secret for you t ``` 1. The `scope` is set to request the user's name, email (required and signed), and permission to send push notifications to sign in on subsequent visits. -See [OmniAuth Authentiq strategy](https://github.com/AuthentiqID/omniauth-authentiq/wiki/Scopes,-callback-url-configuration-and-responses) for more information on scopes and modifiers. + See [OmniAuth Authentiq strategy](https://github.com/AuthentiqID/omniauth-authentiq/wiki/Scopes,-callback-url-configuration-and-responses) for more information on scopes and modifiers. 1. Change `YOUR_CLIENT_ID` and `YOUR_CLIENT_SECRET` to the Client credentials you received in step 1. diff --git a/doc/administration/auth/ldap.md b/doc/administration/auth/ldap.md index 37e596f198f..d5d0d99ac24 100644 --- a/doc/administration/auth/ldap.md +++ b/doc/administration/auth/ldap.md @@ -451,7 +451,7 @@ ldapsearch -H ldaps://$host:$port -D "$bind_dn" -y bind_dn_password.txt -b "$ba ### Invalid credentials when logging in - Make sure the user you are binding with has enough permissions to read the user's -tree and traverse it. + tree and traverse it. - Check that the `user_filter` is not blocking otherwise valid users. - Run the following check command to make sure that the LDAP settings are correct and GitLab can see your users: diff --git a/doc/administration/index.md b/doc/administration/index.md index a27c11c4f64..6e08d4633cd 100644 --- a/doc/administration/index.md +++ b/doc/administration/index.md @@ -53,6 +53,7 @@ Learn how to install, configure, update, and maintain your GitLab instance. - [Diff limits](../user/admin_area/diff_limits.md): Configure the diff rendering size limits of branch comparison pages. - [Merge request diffs storage](merge_request_diffs.md): Configure merge requests diffs external storage. - [Broadcast Messages](../user/admin_area/broadcast_messages.md): Send messages to GitLab users through the UI. +- [Admin Area](../user/admin_area/index.md): for self-managed instance-wide configuration and maintenance. #### Customizing GitLab's appearance diff --git a/doc/administration/monitoring/performance/grafana_configuration.md b/doc/administration/monitoring/performance/grafana_configuration.md index 1f431f8bd62..ab43ec2cc4f 100644 --- a/doc/administration/monitoring/performance/grafana_configuration.md +++ b/doc/administration/monitoring/performance/grafana_configuration.md @@ -34,7 +34,7 @@ Test Connection to ensure the configuration is correct. - **Default**: Checked - **Type**: InfluxDB 0.9.x (Even if you're using InfluxDB 0.10.x) - **Url**: `https://localhost:8086` (Or the remote URL if you've installed InfluxDB -on a separate server) + on a separate server) - **Access**: proxy - **Database**: gitlab - **User**: admin (Or the username configured when setting up InfluxDB) diff --git a/doc/administration/monitoring/performance/performance_bar.md b/doc/administration/monitoring/performance/performance_bar.md index 6a55dbe1eb4..95f497a1470 100644 --- a/doc/administration/monitoring/performance/performance_bar.md +++ b/doc/administration/monitoring/performance/performance_bar.md @@ -10,11 +10,11 @@ It allows you to see (from left to right): - the current host serving the page - the timing of the page (backend, frontend) - time taken and number of DB queries, click through for details of these queries -![SQL profiling using the Performance Bar](img/performance_bar_sql_queries.png) + ![SQL profiling using the Performance Bar](img/performance_bar_sql_queries.png) - time taken and number of [Gitaly] calls, click through for details of these calls -![Gitaly profiling using the Performance Bar](img/performance_bar_gitaly_calls.png) + ![Gitaly profiling using the Performance Bar](img/performance_bar_gitaly_calls.png) - profile of the code used to generate the page, line by line. In the profile view, the numbers in the left panel represent wall time, cpu time, and number of calls (based on [rblineprof](https://github.com/tmm1/rblineprof)). -![Line profiling using the Performance Bar](img/performance_bar_line_profiling.png) + ![Line profiling using the Performance Bar](img/performance_bar_line_profiling.png) - time taken and number of calls to Redis - time taken and number of background jobs created by Sidekiq - time taken and number of Ruby GC calls diff --git a/doc/administration/monitoring/prometheus/gitlab_metrics.md b/doc/administration/monitoring/prometheus/gitlab_metrics.md index 08cd23682d1..3bfcc9a289e 100644 --- a/doc/administration/monitoring/prometheus/gitlab_metrics.md +++ b/doc/administration/monitoring/prometheus/gitlab_metrics.md @@ -17,7 +17,7 @@ GitLab monitors its own internal service metrics, and makes them available at th `/-/metrics` endpoint. Unlike other [Prometheus] exporters, in order to access it, the client IP needs to be [included in a whitelist][whitelist]. -For Omnibus and Chart installations, these metrics are automatically enabled and collected as of [GitLab 9.4](https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1702). For source installations or earlier verisons, these metrics will need to be enabled manually and collected by a Prometheus server. +For Omnibus and Chart installations, these metrics are automatically enabled and collected as of [GitLab 9.4](https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1702). For source installations or earlier versions, these metrics will need to be enabled manually and collected by a Prometheus server. ## Unicorn Metrics available diff --git a/doc/administration/operations/index.md b/doc/administration/operations/index.md index a16fc7ae74f..32f36d68c50 100644 --- a/doc/administration/operations/index.md +++ b/doc/administration/operations/index.md @@ -3,20 +3,20 @@ Keep your GitLab instance up and running smoothly. - [Clean up Redis sessions](cleaning_up_redis_sessions.md): Prior to GitLab 7.3, -user sessions did not automatically expire from Redis. If -you have been running a large GitLab server (thousands of users) since before -GitLab 7.3 we recommend cleaning up stale sessions to compact the Redis -database after you upgrade to GitLab 7.3. + user sessions did not automatically expire from Redis. If + you have been running a large GitLab server (thousands of users) since before + GitLab 7.3 we recommend cleaning up stale sessions to compact the Redis + database after you upgrade to GitLab 7.3. - [Moving repositories](moving_repositories.md): Moving all repositories managed -by GitLab to another file system or another server. + by GitLab to another file system or another server. - [Sidekiq MemoryKiller](sidekiq_memory_killer.md): Configure Sidekiq MemoryKiller -to restart Sidekiq. + to restart Sidekiq. - [Unicorn](unicorn.md): Understand Unicorn and unicorn-worker-killer. - Speed up SSH operations by [Authorizing SSH users via a fast, -indexed lookup to the GitLab database](fast_ssh_key_lookup.md), and/or -by [doing away with user SSH keys stored on GitLab entirely in favor -of SSH certificates](ssh_certificates.md). + indexed lookup to the GitLab database](fast_ssh_key_lookup.md), and/or + by [doing away with user SSH keys stored on GitLab entirely in favor + of SSH certificates](ssh_certificates.md). - [Filesystem Performance Benchmarking](filesystem_benchmarking.md): Filesystem -performance can have a big impact on GitLab performance, especially for actions -that read or write Git repositories. This information will help benchmark -filesystem performance against known good and bad real-world systems. + performance can have a big impact on GitLab performance, especially for actions + that read or write Git repositories. This information will help benchmark + filesystem performance against known good and bad real-world systems. diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md index 5c809f25fbd..279ad018aed 100644 --- a/doc/administration/pages/index.md +++ b/doc/administration/pages/index.md @@ -337,10 +337,10 @@ The default is 100MB. You may want to run GitLab Pages daemon on a separate server in order to decrease the load on your main application server. Follow the steps below to configure GitLab Pages in a separate server. -1. Suppose you have the main GitLab application server named `app1`. Prepare -new Linux server (let's call it `app2`), create NFS share there and configure access to -this share from `app1`. Let's use the default GitLab Pages folder `/var/opt/gitlab/gitlab-rails/shared/pages` -as the shared folder on `app2` and mount it to `/mnt/pages` on `app1`. +1. Suppose you have the main GitLab application server named `app1`. Prepare + new Linux server (let's call it `app2`), create NFS share there and configure access to + this share from `app1`. Let's use the default GitLab Pages folder `/var/opt/gitlab/gitlab-rails/shared/pages` + as the shared folder on `app2` and mount it to `/mnt/pages` on `app1`. 1. On `app2` install GitLab omnibus and modify `/etc/gitlab/gitlab.rb` this way: @@ -365,7 +365,7 @@ as the shared folder on `app2` and mount it to `/mnt/pages` on `app1`. pages_external_url "http://<your-pages-domain>" gitlab_rails['pages_path'] = "/mnt/pages" ``` - + 1. Run `sudo gitlab-ctl reconfigure`. ## Backup diff --git a/doc/administration/pages/source.md b/doc/administration/pages/source.md index 9f2b4d9075a..60800d445b8 100644 --- a/doc/administration/pages/source.md +++ b/doc/administration/pages/source.md @@ -88,12 +88,13 @@ since that is needed in all configurations. ### Wildcard domains ->**Requirements:** -> - [Wildcard DNS setup](#dns-configuration) -> -> --- -> -> URL scheme: `http://page.example.io` +**Requirements:** + +- [Wildcard DNS setup](#dns-configuration) + +--- + +URL scheme: `http://page.example.io` This is the minimum setup that you can use Pages with. It is the base for all other setups as described below. Nginx will proxy all requests to the daemon. diff --git a/doc/administration/polling.md b/doc/administration/polling.md index 35aaa20df2c..a1077614677 100644 --- a/doc/administration/polling.md +++ b/doc/administration/polling.md @@ -10,15 +10,15 @@ say that issue notes poll every 2 seconds, and issue titles poll every 5 seconds; these are _not_ the actual values. - 1 is the default, and recommended for most installations. (Issue notes poll -every 2 seconds, and issue titles poll every 5 seconds.) + every 2 seconds, and issue titles poll every 5 seconds.) - 0 will disable UI polling completely. (On the next poll, clients will stop -polling for updates.) + polling for updates.) - A value greater than 1 will slow polling down. If you see issues with -database load from lots of clients polling for updates, increasing the -multiplier from 1 can be a good compromise, rather than disabling polling -completely. (For example: If this is set to 2, then issue notes poll every 4 -seconds, and issue titles poll every 10 seconds.) + database load from lots of clients polling for updates, increasing the + multiplier from 1 can be a good compromise, rather than disabling polling + completely. (For example: If this is set to 2, then issue notes poll every 4 + seconds, and issue titles poll every 10 seconds.) - A value between 0 and 1 will make the UI poll more frequently (so updates -will show in other sessions faster), but is **not recommended**. 1 should be -fast enough. (For example, if this is set to 0.5, then issue notes poll every -1 second, and issue titles poll every 2.5 seconds.) + will show in other sessions faster), but is **not recommended**. 1 should be + fast enough. (For example, if this is set to 0.5, then issue notes poll every + 1 second, and issue titles poll every 2.5 seconds.) diff --git a/doc/administration/raketasks/maintenance.md b/doc/administration/raketasks/maintenance.md index 0d863594fc7..b295b7d5dc4 100644 --- a/doc/administration/raketasks/maintenance.md +++ b/doc/administration/raketasks/maintenance.md @@ -60,6 +60,7 @@ Runs the following rake tasks: It will check that each component was set up according to the installation guide and suggest fixes for issues found. You may also have a look at our Troubleshooting Guides: + - [Troubleshooting Guide (GitLab)](http://docs.gitlab.com/ee/README.html#troubleshooting) - [Troubleshooting Guide (Omnibus Gitlab)](http://docs.gitlab.com/omnibus/README.html#troubleshooting) diff --git a/doc/api/README.md b/doc/api/README.md index 89069fe60e1..48d9ad8f30d 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -134,7 +134,7 @@ Endpoints are available for: ## Road to GraphQL Going forward, we will start on moving to -[GraphQL](http://graphql.org/learn/best-practices/) and deprecate the use of +[GraphQL](graphql/index.md) and deprecate the use of controller-specific endpoints. GraphQL has a number of benefits: 1. We avoid having to maintain two different APIs. diff --git a/doc/api/issues.md b/doc/api/issues.md index 0571f280d2a..d8b2ff07e30 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -32,6 +32,7 @@ GET /issues?author_id=5 GET /issues?assignee_id=5 GET /issues?my_reaction_emoji=star GET /issues?search=foo&in=title +GET /issues?confidential=true ``` | Attribute | Type | Required | Description | @@ -52,6 +53,7 @@ GET /issues?search=foo&in=title | `created_before` | datetime | no | Return issues created on or before the given time | | `updated_after` | datetime | no | Return issues updated on or after the given time | | `updated_before` | datetime | no | Return issues updated on or before the given time | +| `confidential ` | Boolean | no | Filter confidential or public issues. | ```bash curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/issues @@ -148,6 +150,7 @@ GET /groups/:id/issues?search=issue+title+or+description GET /groups/:id/issues?author_id=5 GET /groups/:id/issues?assignee_id=5 GET /groups/:id/issues?my_reaction_emoji=star +GET /groups/:id/issues?confidential=true ``` | Attribute | Type | Required | Description | @@ -168,6 +171,7 @@ GET /groups/:id/issues?my_reaction_emoji=star | `created_before` | datetime | no | Return issues created on or before the given time | | `updated_after` | datetime | no | Return issues updated on or after the given time | | `updated_before` | datetime | no | Return issues updated on or before the given time | +| `confidential ` | Boolean | no | Filter confidential or public issues. | ```bash curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/groups/4/issues @@ -264,6 +268,7 @@ GET /projects/:id/issues?search=issue+title+or+description GET /projects/:id/issues?author_id=5 GET /projects/:id/issues?assignee_id=5 GET /projects/:id/issues?my_reaction_emoji=star +GET /projects/:id/issues?confidential=true ``` | Attribute | Type | Required | Description | @@ -284,6 +289,8 @@ GET /projects/:id/issues?my_reaction_emoji=star | `created_before` | datetime | no | Return issues created on or before the given time | | `updated_after` | datetime | no | Return issues updated on or after the given time | | `updated_before` | datetime | no | Return issues updated on or before the given time | +| `confidential ` | Boolean | no | Filter confidential or public issues. | + ```bash curl --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/4/issues @@ -639,6 +646,37 @@ Example response: **Note**: The `closed_by` attribute was [introduced in GitLab 10.6][ce-17042]. This value will only be present for issues which were closed after GitLab 10.6 and when the user account that closed the issue still exists. +## Bulk update issues + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/21368) in GitLab 11.9. + +Update multiple issues using a single API call. Returns the number of successfully updated issues. + +``` +PUT /projects/:id/issues/bulk_update +``` + +| Attribute | Type | Required | Description **** | +|----------------|---------|----------|------------------------------------------------------------------------------------------------------------| +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user. | +| `issuable_ids` | Array[integer] | yes | The IDs of issues to be updated. | +| `assignee_ids` | Array[integer] | no | The ID of the user(s) to assign the issue to. Set to `0` or provide an empty value to unassign all assignees. | +| `milestone_id` | integer | no | The global ID of a milestone to assign the issue to. Set to `0` or provide an empty value to unassign a milestone.| +| `add_label_ids` | Array[integer] | no | Comma-separated label IDs to be added. | +| `remove_label_ids` | Array[integer] | no | Comma-separated label IDs to be added. | +| `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it. | +| `subscription_event` | string | no | The subscription_event event of an issue. Set `subscribe` to subscribe to the issue and `unsubscribe` to unsubscribe from it. | + +```bash +curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/4/issues/bulk_update?issuable_ids[]=1&issuable_ids[]=2&state_event=close +``` + +Example response: + +```json +{ "message": "2 issues updated" } +``` + ## Delete an issue Only for admins and project owners. Soft deletes the issue in question. diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index e176cdffc5f..ba47e507b79 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -956,6 +956,37 @@ Must include at least one non-required attribute from above. } ``` +## Bulk update merge requests + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/21368) in GitLab 11.9. + +Update multiple merge requests using a single API call. Returns the number of successfully updated merge requests. + +``` +PUT /projects/:id/merge_requests/bulk_update +``` + +| Attribute | Type | Required | Description **** | +|----------------|---------|----------|------------------------------------------------------------------------------------------------------------| +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user. | +| `issuable_ids` | Array[integer] | yes | The IDs of merge requests to be updated. | +| `assignee_ids` | Array[integer] | no | The ID of the user(s) to assign the issue to. Set to `0` or provide an empty value to unassign all assignees. | +| `milestone_id` | integer | no | The global ID of a milestone to assign the issue to. Set to `0` or provide an empty value to unassign a milestone.| +| `add_label_ids` | Array[integer] | no | Comma-separated label IDs to be added. | +| `remove_label_ids` | Array[integer] | no | Comma-separated label IDs to be added. | +| `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it. | +| `subscription_event` | string | no | The subscription_event event of an issue. Set `subscribe` to subscribe to the issue and `unsubscribe` to unsubscribe from it. | + +```bash +curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/projects/4/merge_requests/bulk_update?issuable_ids[]=1&issuable_ids[]=2&state_event=close +``` + +Example response: + +```json +{ "message": "2 merge_requests updated" } +``` + ## Delete a merge request Only for admins and project owners. Soft deletes the merge request in question. diff --git a/doc/api/repository_files.md b/doc/api/repository_files.md index 8c1d982f394..6fcc06ea8cd 100644 --- a/doc/api/repository_files.md +++ b/doc/api/repository_files.md @@ -171,6 +171,7 @@ Parameters: If the commit fails for any reason we return a 400 error with a non-specific error message. Possible causes for a failed commit include: + - the `file_path` contained `/../` (attempted directory traversal); - the new file contents were identical to the current file contents, i.e. the user tried to make an empty commit; diff --git a/doc/api/runners.md b/doc/api/runners.md index 4aa0e4543e5..35c18649fec 100644 --- a/doc/api/runners.md +++ b/doc/api/runners.md @@ -478,7 +478,7 @@ Example response: ## Delete a registered Runner -Deletes a registed Runner. +Deletes a registered Runner. ``` DELETE /runners diff --git a/doc/ci/caching/index.md b/doc/ci/caching/index.md index dbe3d9b62c9..e079483e2b5 100644 --- a/doc/ci/caching/index.md +++ b/doc/ci/caching/index.md @@ -52,7 +52,7 @@ artifacts are also available in between stages within a pipeline. So if you build your application by downloading all the required modules, you might want to declare them as artifacts so that each subsequent stage can depend on them being there. There are some optimizations like declaring an -[expiry time](../yaml/README.md#artifacts-expire_in) so you don't keep artifacts +[expiry time](../yaml/README.md#artifactsexpire_in) so you don't keep artifacts around too long, and using [dependencies](../yaml/README.md#dependencies) to control exactly where artifacts are passed around. @@ -87,7 +87,7 @@ cache, when declaring `cache` in your jobs, use one or a mix of the following: that share their cache. - [Use sticky Runners](../runners/README.md#locking-a-specific-runner-from-being-enabled-for-other-projects) that will be only available to a particular project. -- [Use a `key`](../yaml/README.md#cache-key) that fits your workflow (e.g., +- [Use a `key`](../yaml/README.md#cachekey) that fits your workflow (e.g., different caches on each branch). For that, you can take advantage of the [CI/CD predefined variables](../variables/README.md#predefined-environment-variables). @@ -169,7 +169,7 @@ job: ``` For more fine tuning, read also about the -[`cache: policy`](../yaml/README.md#cache-policy). +[`cache: policy`](../yaml/README.md#cachepolicy). ## Common use cases diff --git a/doc/ci/docker/using_docker_images.md b/doc/ci/docker/using_docker_images.md index 959271d8abc..3314c76d234 100644 --- a/doc/ci/docker/using_docker_images.md +++ b/doc/ci/docker/using_docker_images.md @@ -391,9 +391,9 @@ CI jobs: from `Dockerfile` that may be overridden in `.gitlab-ci.yml`) 1. The Runner attaches itself to a running container. 1. The Runner prepares a script (the combination of - [`before_script`](../yaml/README.md#before_script), + [`before_script`](../yaml/README.md#before_script-and-after_script), [`script`](../yaml/README.md#script), - and [`after_script`](../yaml/README.md#after_script)). + and [`after_script`](../yaml/README.md#before_script-and-after_script)). 1. The Runner sends the script to the container's shell STDIN and receives the output. diff --git a/doc/ci/environments.md b/doc/ci/environments.md index 6a9917f6430..fe66f7e3c28 100644 --- a/doc/ci/environments.md +++ b/doc/ci/environments.md @@ -103,7 +103,7 @@ the Git SHA and environment name. To sum up, with the above `.gitlab-ci.yml` we have achieved that: - All branches will run the `test` and `build` jobs. -- The `deploy_staging` job will run [only](yaml/README.md#only) on the `master` +- The `deploy_staging` job will run [only](yaml/README.md#only-and-except-simplified) on the `master` branch which means all merge requests that are created from branches don't get to deploy to the staging server - When a merge request is merged, all jobs will run and the `deploy_staging` @@ -401,7 +401,7 @@ Let's briefly see where URL that's defined in the environments is exposed. ## Making use of the environment URL -The [environment URL](yaml/README.md#environments-url) is exposed in a few +The [environment URL](yaml/README.md#environmenturl) is exposed in a few places within GitLab. | In a merge request widget as a link | In the Environments view as a button | In the Deployments view as a button | @@ -619,9 +619,9 @@ Below are some links you may find interesting: [deployments]: #deployments [permissions]: ../user/permissions.md [variables]: variables/README.md -[env-name]: yaml/README.md#environment-name -[only]: yaml/README.md#only-and-except -[onstop]: yaml/README.md#environment-on_stop +[env-name]: yaml/README.md#environmentname +[only]: yaml/README.md#only-and-except-simplified +[onstop]: yaml/README.md#environmenton_stop [ce-7015]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7015 [gitlab-flow]: ../workflow/gitlab_flow.md [gitlab runner]: https://docs.gitlab.com/runner/ diff --git a/doc/ci/examples/end_to_end_testing_webdriverio/index.md b/doc/ci/examples/end_to_end_testing_webdriverio/index.md index 9f3b8d9ad14..d7afe11f41f 100644 --- a/doc/ci/examples/end_to_end_testing_webdriverio/index.md +++ b/doc/ci/examples/end_to_end_testing_webdriverio/index.md @@ -89,7 +89,7 @@ page and to interact with them - for example, to click on the link back to the h The simple test shown above can already give us a lot of confidence if it passes: we know our deployment has succeeded, that the elements are visible on the page and that actual browsers can interact with it, and that routing -works as expected. And all that in just 10 lines with gratituous whitespace! Add to that succeeding +works as expected. And all that in just 10 lines with gratuitous whitespace! Add to that succeeding unit tests and a successfully completed pipeline, and you can be fairly confident that the dependency upgrade did not break anything without even having to look at your website. diff --git a/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md b/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md index c0346d78141..f24e79355aa 100644 --- a/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md +++ b/doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/index.md @@ -75,7 +75,7 @@ When we call `mix` command, we'll pass two arguments: - The task we want it to run: `phoenix.new` - And the parameter `phoenix.new` requires, which is the name of the new project. In this case, -we're calling it `hello_gitlab_ci`, but you're free to set your own name: + we're calling it `hello_gitlab_ci`, but you're free to set your own name: ```bash mix phoenix.new hello_gitlab_ci @@ -249,7 +249,7 @@ project. ![Set up CI](img/setup-ci.png) - On next screen, we can select a template ready to go. Click on **Apply a GitLab CI/CD Yaml -template** and select **Elixir**: + template** and select **Elixir**: ![Select template](img/select-template.png) diff --git a/doc/ci/merge_request_pipelines/index.md b/doc/ci/merge_request_pipelines/index.md index b7b5c660586..2af0a03cbe4 100644 --- a/doc/ci/merge_request_pipelines/index.md +++ b/doc/ci/merge_request_pipelines/index.md @@ -106,10 +106,10 @@ flow, external contributors follow the following steps: 1. Fork a parent project. 1. Create a merge request from the forked project that targets the `master` branch -in the parent project. + in the parent project. 1. A pipeline runs on the merge request. 1. A maintainer from the parent project checks the pipeline result, and merge -into a target branch if the latest pipeline has passed. + into a target branch if the latest pipeline has passed. Currently, those pipelines are created in a **forked** project, not in the parent project. This means you cannot completely trust the pipeline result, diff --git a/doc/ci/pipelines.md b/doc/ci/pipelines.md index c41f3b7e82d..4f3106c6dc6 100644 --- a/doc/ci/pipelines.md +++ b/doc/ci/pipelines.md @@ -197,7 +197,7 @@ stage has a job with a manual action. > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/21767) in GitLab 11.4. -When you do not want to run a job immediately, you can [delay the job to run after a certain period](yaml/README.md#when-delayed). +When you do not want to run a job immediately, you can [delay the job to run after a certain period](yaml/README.md#whendelayed). This is especially useful for timed incremental rollout that new code is rolled out gradually. For example, if you start rolling out new code and users do not experience trouble, GitLab automatically completes the deployment from 0% to 100%. Alternatively, if you start rolling out and you noticed that a few users experience trouble with the version, diff --git a/doc/ci/ssh_keys/README.md b/doc/ci/ssh_keys/README.md index 0c3b0bf6990..ff63d0bd69f 100644 --- a/doc/ci/ssh_keys/README.md +++ b/doc/ci/ssh_keys/README.md @@ -92,7 +92,7 @@ to access it. This is where an SSH key pair comes in handy. ``` NOTE: **Note:** - The [`before_script`](../yaml/README.md#before-script) can be set globally + The [`before_script`](../yaml/README.md#before_script-and-after_script) can be set globally or per-job. 1. Make sure the private server's [SSH host keys are verified](#verifying-the-ssh-host-keys). diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 424be91773c..e5668c140fa 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -1206,7 +1206,7 @@ job: `expire_in` allows you to specify how long artifacts should live before they expire and therefore deleted, counting from the time they are uploaded and stored on GitLab. If the expiry time is not defined, it defaults to the -[instance wide setting](../../user/admin_area/settings/continuous_integration.md#default-artifacts-expiration) +[instance wide setting](../../user/admin_area/settings/continuous_integration.md#default-artifacts-expiration-core-only) (30 days by default, forever on GitLab.com). You can use the **Keep** button on the job page to override expiration and @@ -1245,7 +1245,7 @@ this with [JUnit reports](#artifactsreportsjunit). NOTE: **Note:** The test reports are collected regardless of the job results (success or failure). -You can use [`artifacts:expire_in`](#artifacts-expire_in) to set up an expiration +You can use [`artifacts:expire_in`](#artifactsexpire_in) to set up an expiration date for their artifacts. NOTE: **Note:** @@ -1425,7 +1425,7 @@ deploy: > Introduced in GitLab 10.3. If the artifacts of the job that is set as a dependency have been -[expired](#artifacts-expire_in) or +[expired](#artifactsexpire_in) or [erased](../../user/project/pipelines/job_artifacts.md#erasing-artifacts), then the dependent job will fail. diff --git a/doc/customization/system_header_and_footer_messages.md b/doc/customization/system_header_and_footer_messages.md new file mode 100644 index 00000000000..cf7d8b3f3e8 --- /dev/null +++ b/doc/customization/system_header_and_footer_messages.md @@ -0,0 +1,18 @@ +# Adding a system message to every page + +> [Introduced][ee-1283] in [GitLab Premium][eep] 10.7. + +Navigate to the **Admin** area and go to the **Appearance** page. + +Under **System header and footer** insert your header message and/or footer message. +Both background and font color of the header and footer are customizable. + +![appearance](system_header_and_footer_messages/appearance.png) + +After saving, all GitLab pages will contain the custom system header and/or footer messages: + +![custom_header_footer](system_header_and_footer_messages/custom_header_footer.png) + +The GitLab sign in page will also show the header and the footer messages: + +![sign_up_custom_header_and_footer](system_header_and_footer_messages/sign_up_custom_header_and_footer.png) diff --git a/doc/customization/system_header_and_footer_messages/appearance.png b/doc/customization/system_header_and_footer_messages/appearance.png Binary files differnew file mode 100644 index 00000000000..14667f751c4 --- /dev/null +++ b/doc/customization/system_header_and_footer_messages/appearance.png diff --git a/doc/customization/system_header_and_footer_messages/custom_header_footer.png b/doc/customization/system_header_and_footer_messages/custom_header_footer.png Binary files differnew file mode 100644 index 00000000000..691ca8a3484 --- /dev/null +++ b/doc/customization/system_header_and_footer_messages/custom_header_footer.png diff --git a/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png b/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png Binary files differnew file mode 100644 index 00000000000..a9c59bc9f62 --- /dev/null +++ b/doc/customization/system_header_and_footer_messages/sign_up_custom_header_and_footer.png diff --git a/doc/development/architecture.md b/doc/development/architecture.md index 63574b28edc..e22552fd3a3 100644 --- a/doc/development/architecture.md +++ b/doc/development/architecture.md @@ -58,7 +58,7 @@ GitLab can be considered to have two layers from a process perspective: - [Omnibus configuration options](https://gitlab.com/gitlab-org/gitaly/tree/master/doc/configuration) - Layer: Core Service (Data) -Gitaly is a service designed by GitLab to remove our need for NFS for Git storage in distributed deployments of GitLab. (Think GitLab.com or High Availablity Deployments) As of 11.3.0, This service handles all Git level access in GitLab. You can read more about the project [in the project's readme](https://gitlab.com/gitlab-org/gitaly). +Gitaly is a service designed by GitLab to remove our need for NFS for Git storage in distributed deployments of GitLab (Think GitLab.com or High Availability Deployments). As of 11.3.0, this service handles all Git level access in GitLab. You can read more about the project [in the project's readme](https://gitlab.com/gitlab-org/gitaly). ### gitlab-monitor @@ -174,7 +174,7 @@ When making a request to an HTTP Endpoint (Think `/users/sign_in`) the request w - nginx - Acts as our first line reverse proxy - gitlab-workhorse - This determines if it needs to go to the Rails application or somewhere else to reduce load on unicorn. - unicorn - Since this is a web request, and it needs to access the application it will go to Unicorn. -- Postgres/Gitaly/Redis - Depending on the type of request, it may hit these services to store or retreive data. +- Postgres/Gitaly/Redis - Depending on the type of request, it may hit these services to store or retrieve data. ### GitLab Git Request Cycle diff --git a/doc/development/automatic_ce_ee_merge.md b/doc/development/automatic_ce_ee_merge.md index fed772b9240..3ca841353e6 100644 --- a/doc/development/automatic_ce_ee_merge.md +++ b/doc/development/automatic_ce_ee_merge.md @@ -115,16 +115,16 @@ Now, every time you create an MR for CE and EE: 1. Continue cherry-picking: `git cherry-pick --continue` 1. Push to EE: `git push origin branch-example-ee` 1. Create the EE-equivalent MR and link to the CE MR from the -description "Ports [CE-MR-LINK] to EE" + description "Ports [CE-MR-LINK] to EE" 1. Once all the jobs are passing in both CE and EE, you've addressed the -feedback from your own team, and got them approved, the merge requests can be merged. + feedback from your own team, and got them approved, the merge requests can be merged. 1. When both MRs are ready, the EE merge request will be merged first, and the -CE-equivalent will be merged next. + CE-equivalent will be merged next. **Important notes:** - The commit SHA can be easily found from the GitLab UI. From a merge request, -open the tab **Commits** and click the copy icon to copy the commit SHA. + open the tab **Commits** and click the copy icon to copy the commit SHA. - To cherry-pick a **commit range**, such as [A > B > C > D] use: ```shell @@ -140,7 +140,7 @@ open the tab **Commits** and click the copy icon to copy the commit SHA. ``` - To cherry-pick a **merge commit**, use the flag `-m 1`. For example, suppose that the -merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`: + merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`: ```shell git cherry-pick -m 1 138f5e2f20289bb376caffa0303adb0cac859ce1 @@ -163,12 +163,12 @@ merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`: commits and you want to cherry-pick all but the merge commit. - If you push more commits to the CE branch, you can safely repeat the procedure -to cherry-pick them to the EE-equivalent branch. You can do that as many times as -necessary, using the same CE and EE branches. + to cherry-pick them to the EE-equivalent branch. You can do that as many times as + necessary, using the same CE and EE branches. - If you submitted the merge request to the CE repo and the `ee-compat-check` job passed, -you are not required to submit the EE-equivalent MR, but it's still recommended. If the -job failed, you are required to submit the EE MR so that you can fix the conflicts in EE -before merging your changes into CE. + you are not required to submit the EE-equivalent MR, but it's still recommended. If the + job failed, you are required to submit the EE MR so that you can fix the conflicts in EE + before merging your changes into CE. ## FAQ diff --git a/doc/development/contributing/index.md b/doc/development/contributing/index.md index 7ac846e4c4d..f7a0fdbeb40 100644 --- a/doc/development/contributing/index.md +++ b/doc/development/contributing/index.md @@ -4,7 +4,7 @@ Thank you for your interest in contributing to GitLab. This guide details how to contribute to GitLab in a way that is easy for everyone. We want to create a welcoming environment for everyone who is interested in contributing. -Please visit our [Code of Conduct page](https://about.gitlab.com/contributing/code-of-conduct) to learn more about our committment to an open and welcoming environment. +Please visit our [Code of Conduct page](https://about.gitlab.com/contributing/code-of-conduct) to learn more about our commitment to an open and welcoming environment. For a first-time step-by-step guide to the contribution process, please see ["Contributing to GitLab"](https://about.gitlab.com/contributing/). diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md index c5344139ab4..4c53643ed9c 100644 --- a/doc/development/contributing/issue_workflow.md +++ b/doc/development/contributing/issue_workflow.md @@ -199,7 +199,7 @@ different way. We add the ~"Accepting merge requests" label to: - Low priority ~bug issues (i.e. we do not add it to the bugs that we want to -solve in the ~"Next Patch Release") + solve in the ~"Next Patch Release") - Small ~feature - Small ~"technical debt" issues @@ -300,17 +300,17 @@ below will make it easy to manage this, without unnecessary overhead. 1. Set weight for any issue at the earliest possible convenience 1. If you don't agree with a set weight, discuss with other developers until -consensus is reached about the weight + consensus is reached about the weight 1. Issue weights are an abstract measurement of complexity of the issue. Do not -relate issue weight directly to time. This is called [anchoring](https://en.wikipedia.org/wiki/Anchoring) -and something you want to avoid. + relate issue weight directly to time. This is called [anchoring](https://en.wikipedia.org/wiki/Anchoring) + and something you want to avoid. 1. Something that has a weight of 1 (or no weight) is really small and simple. -Something that is 9 is rewriting a large fundamental part of GitLab, -which might lead to many hard problems to solve. Changing some text in GitLab -is probably 1, adding a new Git Hook maybe 4 or 5, big features 7-9. + Something that is 9 is rewriting a large fundamental part of GitLab, + which might lead to many hard problems to solve. Changing some text in GitLab + is probably 1, adding a new Git Hook maybe 4 or 5, big features 7-9. 1. If something is very large, it should probably be split up in multiple -issues or chunks. You can simply not set the weight of a parent issue and set -weights to children issues. + issues or chunks. You can simply not set the weight of a parent issue and set + weights to children issues. ## Regression issues diff --git a/doc/development/documentation/feature-change-workflow.md b/doc/development/documentation/feature-change-workflow.md index eb479b85083..3f31fe5ca19 100644 --- a/doc/development/documentation/feature-change-workflow.md +++ b/doc/development/documentation/feature-change-workflow.md @@ -7,16 +7,16 @@ description: How to add docs for new or enhanced GitLab features. At GitLab, developers contribute new or updated documentation along with their code, but product managers and technical writers also have essential roles in the process. - **Developers**: Author/update documentation in the same MR as their code, and -merge it by the feature freeze for the assigned milestone. Request technical writer -assistance if needed. Other developers typically act as reviewers. + merge it by the feature freeze for the assigned milestone. Request technical writer + assistance if needed. Other developers typically act as reviewers. - **Product Managers** (PMs): In the issue for all new and enhanced features, -confirm the documentation requirements, plus the mentioned feature description -and use cases, which can be reused in docs. They can bring in a technical -writer for discussion or collaboration, and can be called upon themselves as a doc reviewer. + confirm the documentation requirements, plus the mentioned feature description + and use cases, which can be reused in docs. They can bring in a technical + writer for discussion or collaboration, and can be called upon themselves as a doc reviewer. - **Technical Writers**: Review doc requirements in issues, track issues and MRs -that contain docs changes, help with any questions throughout the authoring/editing process, -work on special projects related to the documentation, and review all new and updated -docs content, whether before or after it is merged. + that contain docs changes, help with any questions throughout the authoring/editing process, + work on special projects related to the documentation, and review all new and updated + docs content, whether before or after it is merged. Beyond this process, any member of the GitLab community can also author or request documentation improvements that are not associated with a new or changed feature. See the [Documentation improvement workflow](improvement-workflow.md). @@ -35,7 +35,7 @@ documentation updates if screenshots are now needed, or need to be updated. Documentation is not required when a feature is changed on the backend only and does not directly affect the way that any user or administrator would -interact with GitLab. +interact with GitLab. NOTE: **Note:** When revamping documentation, if unrelated to the feature change, this should be submitted @@ -80,7 +80,7 @@ must: - Add the `Documentation` label. - Confirm or add the [documentation requirements](#documentation-requirements). - Ensure the issue contains any new or updated feature name, overview/description, -and use cases, as required per the [documentation structure and template](structure.md), when applicable. + and use cases, as required per the [documentation structure and template](structure.md), when applicable. Everyone is encouraged to draft the requirements in the issue, but a product manager will do the following: @@ -100,20 +100,20 @@ Follow the process below unless otherwise agreed with the product manager and te - Include any new and edited docs in the MR introducing the code. - Use the Documentation requirements confirmed by the Product Manager in the -issue and discuss any further doc plans or ideas as needed. - - If the new or changed doc requires extensive collaboration or conversation, a separate, -linked issue can be used for the planning process. - - We are trying to avoid using a separate MR, so that the docs stay with the code, but the -Technical Writing team is interested in discussing any potential exceptions that may be suggested. + issue and discuss any further doc plans or ideas as needed. + - If the new or changed doc requires extensive collaboration or conversation, a separate, + linked issue can be used for the planning process. + - We are trying to avoid using a separate MR, so that the docs stay with the code, but the + Technical Writing team is interested in discussing any potential exceptions that may be suggested. - Use the [Documentation guidelines](index.md), as well as other resources linked from there, -including the Documentation [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/). + including the Documentation [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/). - If you need any help to choose the correct place for a doc, discuss a documentation -idea or outline, or request any other help, ping the Technical Writer for the relevant -[DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages) -in your issue or MR, or write within `#docs` on the GitLab Slack. + idea or outline, or request any other help, ping the Technical Writer for the relevant + [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages) + in your issue or MR, or write within `#docs` on the GitLab Slack. - The docs must be merged with the code **by the feature freeze date**, otherwise -the feature cannot be included with the release. A policy for documenting feature-flagged -issues is forthcoming and you are welcome to join the [discussion](https://gitlab.com/gitlab-org/gitlab-ce/issues/56813). + the feature cannot be included with the release. A policy for documenting feature-flagged + issues is forthcoming and you are welcome to join the [discussion](https://gitlab.com/gitlab-org/gitlab-ce/issues/56813). #### Reviews and merging @@ -124,35 +124,35 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to 1. **The code reviewer** for the MR, to confirm accuracy, clarity, and completeness. 1. Optionally: Others involved in the work, such as other devs or the PM. 1. Optionally: The technical writer for the DevOps stage. If not prior to merging, the technical writer will review after the merge. -This helps us ensure that the developer has time to merge good content by the freeze, and that it can be further refined by the release, if needed. + This helps us ensure that the developer has time to merge good content by the freeze, and that it can be further refined by the release, if needed. - To decide whether to request this review before the merge, consider the amount of time left before the code freeze, the size of the change, -and your degree of confidence in having users of an RC use your docs as written. + and your degree of confidence in having users of an RC use your docs as written. - Pre-merge tech writer reviews should be most common when the code is complete well in advance of the freeze and/or for larger documentation changes. - You can request a review and if there is not sufficient time to complete it prior to the freeze, -the maintainer can merge the current doc changes (if complete) and create a follow-up doc review issue. + the maintainer can merge the current doc changes (if complete) and create a follow-up doc review issue. - The technical writer can also help decide what docs to merge before the freeze and whether to work on further changes in a follow up MR. - **To request a pre-merge technical writer review**, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages). - **To request a post-merge technical writer review**, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issuable_template=Doc%20Review) and link it from the MR that makes the doc change. 1. **The maintainer** who is assigned to merge the MR, to verify clarity, completeness, and quality, to the best of their ability. - Upon merging, if a technical writer review has not been performed and there is not yet a linked issue for a follow-up review, the maintainer should [create an issue using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issuable_template=Doc%20Review), link it from the MR, and -mention the original MR author in the new issue. Alternatively, the mainitainer can ask the MR author to create and link this issue before the MR is merged. + mention the original MR author in the new issue. Alternatively, the mainitainer can ask the MR author to create and link this issue before the MR is merged. - After merging, documentation changes are reviewed by: 1. The technical writer--**if** their review was not performed prior to the merge. 2. Optionally: by the PM (for accuracy and to ensure it's consistent with the vision for how the product will be used). -Any party can raise the item to the PM for review at any point: the dev, the technical writer, or the PM, who can request/plan a review at the outset. + Any party can raise the item to the PM for review at any point: the dev, the technical writer, or the PM, who can request/plan a review at the outset. ### Technical Writer role #### Planning - The technical writer monitors the documentation needs of issues assigned to the current and next milestone -for their DevOps stage(s), and participates in any needed discussion on docs planning and requirements refinement -with the dev, PM, and others. + for their DevOps stage(s), and participates in any needed discussion on docs planning and requirements refinement + with the dev, PM, and others. - The technical writer will review these requirements again upon the kickoff and provide feedback, as needed. -This is not a blocking review and developers should not wait to work on docs. + This is not a blocking review and developers should not wait to work on docs. #### Collaboration @@ -165,12 +165,12 @@ Additionally, technical writers are available for questions at any time. #### Review - Techncial writers provide non-blocking reviews of all documentation changes, -before or after the change is merged. However, if the docs are ready in the MR while -there's time before the freeze, the technical writer's review can commence early, on request. + before or after the change is merged. However, if the docs are ready in the MR while + there's time before the freeze, the technical writer's review can commence early, on request. - The technical writer will confirm that the doc is clear, grammatically correct, -and discoverable, while avoiding redundancy, bad file locations, typos, broken links, -etc. The technical writer will review the documentation for the following, which -the developer and code reviewer should have already made a good-faith effort to ensure: + and discoverable, while avoiding redundancy, bad file locations, typos, broken links, + etc. The technical writer will review the documentation for the following, which + the developer and code reviewer should have already made a good-faith effort to ensure: - Clarity. - Adherence to the plans and goals in the issue. - Location (make sure the docs are in the correct directorkes and has the correct name). diff --git a/doc/development/documentation/improvement-workflow.md b/doc/development/documentation/improvement-workflow.md index c97d8966b8c..a12c3d5ea7b 100644 --- a/doc/development/documentation/improvement-workflow.md +++ b/doc/development/documentation/improvement-workflow.md @@ -21,10 +21,10 @@ to accomplish their work with GitLab. ## How to update the docs 1. Click "Edit this Page" at the bottom of any page on docs.gitlab.com, or navigate to -one of the repositories and doc paths listed on the [GitLab Documentation guidelines](index.md) page. -Work in a fork if you do not have developer access to the GitLab project. + one of the repositories and doc paths listed on the [GitLab Documentation guidelines](index.md) page. + Work in a fork if you do not have developer access to the GitLab project. 1. Follow the described standards and processes listed on that Guidelines page, -including the linked resources: the [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/). + including the linked resources: the [Structure and template](structure.md) page, [Style Guide](styleguide.md), and [Markdown Guide](https://about.gitlab.com/handbook/product/technical-writing/markdown-guide/). 1. Follow GitLab's [Merge Request Guidelines](../contributing/merge_request_workflow.md#merge-request-guidelines). If you need any help to choose the correct place for a doc, discuss a documentation @@ -45,7 +45,7 @@ before merging, mention the writer who is assigned to the relevant [DevOps stage The process can involve the following parties/phases, and is replicated in the `Documentation` MR template for GitLab CE and EE, to help with following the process. **1. Primary Reviewer** - Review by a [code reviewer](https://about.gitlab.com/handbook/engineering/projects/) or other appropriate colleague to confirm accuracy, clarity, and completeness. This can be skipped for minor fixes without substantive content changes. - + **2. Technical Writer** - Optional - If not requested for this MR, must be scheduled post-merge. To request a pre-merge review, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages). To request a post-merge review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issuable_template=Doc%20Review) and link it from the MR that makes the doc change. diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md index 0ce5825fd61..ee3a9caf9a0 100644 --- a/doc/development/documentation/site_architecture/index.md +++ b/doc/development/documentation/site_architecture/index.md @@ -44,7 +44,7 @@ read through the [global navigation](global_nav.md) doc. The docs site is deployed to production with GitLab Pages, and previewed in merge requests with Review Apps. -The deployment aspects will be soon transfered from the [original document](https://gitlab.com/gitlab-com/gitlab-docs/blob/master/README.md) +The deployment aspects will be soon transferred from the [original document](https://gitlab.com/gitlab-com/gitlab-docs/blob/master/README.md) to this page. <!-- diff --git a/doc/development/documentation/structure.md b/doc/development/documentation/structure.md index ee3bd5606a5..95b5fcd99a1 100644 --- a/doc/development/documentation/structure.md +++ b/doc/development/documentation/structure.md @@ -20,7 +20,7 @@ Every feature or use case document should include the following content in the f with exceptions and details noted below and in the template included on this page. - **Title**: Top-level heading with the feature name, or a use case name, which would start with -a verb, like Configuring, Enabling, etc. + a verb, like Configuring, Enabling, etc. - **Introduction**: A couple sentences about the subject matter and what's to be found on this page. - **Overview** Describe what it is, what it does, and in what context it should be used. - **Use cases**: describes real use case scenarios for that feature/configuration. @@ -95,7 +95,7 @@ Link each one to an appropriate place for more information. "Instructions" is usually not the name of the heading. This is the part of the document where you can include one or more sets of instructions, each to accomplish a specific task. Headers should describe the task the reader will achieve by following the instructions within, typically starting with a verb. -Larger instruction sets may have subsections covering specific phases of the process. +Larger instruction sets may have subsections covering specific phases of the process. - Write a step-by-step guide, with no gaps between the steps. - Start with an h2 (`##`), break complex steps into small steps using diff --git a/doc/development/fe_guide/development_process.md b/doc/development/fe_guide/development_process.md index 905668eef58..f3fdaa3b883 100644 --- a/doc/development/fe_guide/development_process.md +++ b/doc/development/fe_guide/development_process.md @@ -61,17 +61,19 @@ Please use your best judgement when to use it and please contribute new points t --- ### Share your work early + 1. Before writing code, ensure your vision of the architecture is aligned with -GitLab's architecture. + GitLab's architecture. 1. Add a diagram to the issue and ask a frontend architect in the slack channel `#fe_architectural` about it. ![Diagram of Issue Boards Architecture](img/boards_diagram.png) 1. Don't take more than one week between starting work on a feature and -sharing a Merge Request with a reviewer or a maintainer. + sharing a Merge Request with a reviewer or a maintainer. ### Vue features + 1. Follow the steps in [Vue.js Best Practices](vue.md) 1. Follow the style guide. 1. Only a handful of people are allowed to merge Vue related features. -Reach out to one of Vue experts early in this process. + Reach out to one of Vue experts early in this process. diff --git a/doc/development/fe_guide/droplab/plugins/filter.md b/doc/development/fe_guide/droplab/plugins/filter.md index ddc6a3386c7..1f188c64fe4 100644 --- a/doc/development/fe_guide/droplab/plugins/filter.md +++ b/doc/development/fe_guide/droplab/plugins/filter.md @@ -9,7 +9,7 @@ Add the `Filter` object to the plugins array of a `DropLab.prototype.init` or `D - `Filter` requires a config value for `template`. - `template` should be the key of the objects within your data array that you want to compare -to the user input string, for filtering. + to the user input string, for filtering. ```html <input href="#" id="trigger" data-dropdown-trigger="#list"> diff --git a/doc/development/fe_guide/droplab/plugins/input_setter.md b/doc/development/fe_guide/droplab/plugins/input_setter.md index e229103e462..e4050213869 100644 --- a/doc/development/fe_guide/droplab/plugins/input_setter.md +++ b/doc/development/fe_guide/droplab/plugins/input_setter.md @@ -9,7 +9,7 @@ Add the `InputSetter` object to the plugins array of a `DropLab.prototype.init` - `InputSetter` requires a config value for `input` and `valueAttribute`. - `input` should be the DOM element that you want to manipulate. - `valueAttribute` should be a string that is the name of an attribute on your list items that is used to get the value -to update the `input` element with. + to update the `input` element with. You can also set the `InputSetter` config to an array of objects, which will allow you to update multiple elements. diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md index f55f01720fd..3290f29530a 100644 --- a/doc/development/fe_guide/graphql.md +++ b/doc/development/fe_guide/graphql.md @@ -9,7 +9,7 @@ read more about [Feature Flags][feature-flags]. ## Apollo Client To save duplicated clients getting created in different apps, we have a -[default client][defualt-client] that should be used. This setups the +[default client][default-client] that should be used. This setups the Apollo client with the correct URL and also sets the CSRF headers. ## GraphQL Queries @@ -27,11 +27,11 @@ the Vue application is mounted. ```javascript import Vue from 'vue'; import VueApollo from 'vue-apollo'; -import defaultClient from '~/lib/graphql'; +import createDefaultClient from '~/lib/graphql'; Vue.use(VueApollo); const apolloProvider = new VueApollo({ - defaultClient, + defaultClient: createDefaultClient(), }); new Vue({ @@ -43,6 +43,29 @@ new Vue({ Read more about [Vue Apollo][vue-apollo] in the [Vue Apollo documentation][vue-apollo-docs]. +### Local state with `apollo-link-state` + +It is possible to use our Apollo setup with [apollo-link-state][apollo-link-state] by passing +in the client state object when creating the default client. + +```javascript +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createDefaultClient from '~/lib/graphql'; +Vue.use(VueApollo); + +const apolloProvider = new VueApollo({ + defaultClient: createDefaultClient({ + defaults: { + testing: true, + }, + resolvers: { + ... + }, + }), +}); +``` + ### Testing With [Vue test utils][vue-test-utils] it is easy to quickly test components that @@ -81,3 +104,4 @@ Read more about the [Apollo] client in the [Apollo documentation][apollo-client- [default-client]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/app/assets/javascripts/lib/graphql.js [apollo-client-docs]: https://www.apollographql.com/docs/tutorial/client.html [vue-test-utils]: https://vue-test-utils.vuejs.org/ +[apollo-link-state]: https://www.apollographql.com/docs/link/links/state.html diff --git a/doc/development/fe_guide/performance.md b/doc/development/fe_guide/performance.md index 0aba38aca8c..2628e95dbc1 100644 --- a/doc/development/fe_guide/performance.md +++ b/doc/development/fe_guide/performance.md @@ -5,6 +5,7 @@ ### Realtime Components When writing code for realtime features we have to keep a couple of things in mind: + 1. Do not overload the server with requests. 1. It should feel realtime. @@ -12,16 +13,16 @@ Thus, we must strike a balance between sending requests and the feeling of realt Use the following rules when creating realtime solutions. 1. The server will tell you how much to poll by sending `Poll-Interval` in the header. -Use that as your polling interval. This way it is [easy for system administrators to change the -polling rate](../../administration/polling.md). -A `Poll-Interval: -1` means you should disable polling, and this must be implemented. + Use that as your polling interval. This way it is [easy for system administrators to change the + polling rate](../../administration/polling.md). + A `Poll-Interval: -1` means you should disable polling, and this must be implemented. 1. A response with HTTP status different from 2XX should disable polling as well. 1. Use a common library for polling. 1. Poll on active tabs only. Please use [Visibility](https://github.com/ai/visibilityjs). 1. Use regular polling intervals, do not use backoff polling, or jitter, as the interval will be -controlled by the server. + controlled by the server. 1. The backend code will most likely be using etags. You do not and should not check for status -`304 Not Modified`. The browser will transform it for you. + `304 Not Modified`. The browser will transform it for you. ### Lazy Loading Images diff --git a/doc/development/fe_guide/style_guide_js.md b/doc/development/fe_guide/style_guide_js.md index 1e0529262ad..060cd8baf7f 100644 --- a/doc/development/fe_guide/style_guide_js.md +++ b/doc/development/fe_guide/style_guide_js.md @@ -14,9 +14,9 @@ See [our current .eslintrc](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/ #### ESlint 1. **Never** disable eslint rules unless you have a good reason. -You may see a lot of legacy files with `/* eslint-disable some-rule, some-other-rule */` -at the top, but legacy files are a special case. Any time you develop a new feature or -refactor an existing one, you should abide by the eslint rules. + You may see a lot of legacy files with `/* eslint-disable some-rule, some-other-rule */` + at the top, but legacy files are a special case. Any time you develop a new feature or + refactor an existing one, you should abide by the eslint rules. 1. **Never Ever EVER** disable eslint globally for a file @@ -53,7 +53,7 @@ refactor an existing one, you should abide by the eslint rules. 1. [class-methods-use-this][eslint-this] 1. When they are needed _always_ place ESlint directive comment blocks on the first line of a script, -followed by any global declarations, then a blank newline prior to any imports or code. + followed by any global declarations, then a blank newline prior to any imports or code. ```javascript // bad @@ -125,8 +125,8 @@ followed by any global declarations, then a blank newline prior to any imports o ``` 1. Relative paths: when importing a module in the same directory, a child -directory, or an immediate parent directory prefer relative paths. When -importing a module which is two or more levels up, prefer either `~/` or `ee/`. + directory, or an immediate parent directory prefer relative paths. When + importing a module which is two or more levels up, prefer either `~/` or `ee/`. In **app/assets/javascripts/my-feature/subdir**: @@ -163,9 +163,9 @@ importing a module which is two or more levels up, prefer either `~/` or `ee/`. ``` 1. Avoid using IIFE. Although we have a lot of examples of files which wrap their -contents in IIFEs (immediately-invoked function expressions), -this is no longer necessary after the transition from Sprockets to webpack. -Do not use them anymore and feel free to remove them when refactoring legacy code. + contents in IIFEs (immediately-invoked function expressions), + this is no longer necessary after the transition from Sprockets to webpack. + Do not use them anymore and feel free to remove them when refactoring legacy code. 1. Avoid adding to the global namespace. ```javascript @@ -484,8 +484,8 @@ Please check this [rules][eslint-plugin-vue-rules] for more documentation. ``` 1. Default key should be provided if the prop is not required. -_Note:_ There are some scenarios where we need to check for the existence of the property. -On those a default key should not be provided. + _Note:_ There are some scenarios where we need to check for the existence of the property. + On those a default key should not be provided. ```javascript // good diff --git a/doc/development/fe_guide/vue.md b/doc/development/fe_guide/vue.md index 60f322c6e75..3cd70bd63fa 100644 --- a/doc/development/fe_guide/vue.md +++ b/doc/development/fe_guide/vue.md @@ -223,6 +223,7 @@ need to test the rendered output. [Vue][vue-test] guide's to unit test show us e ## Vue.js Expert Role One should apply to be a Vue.js expert by opening an MR when the Merge Request's they create and review show: + - Deep understanding of Vue and Vuex reactivy - Vue and Vuex code are structured according to both official and our guidelines - Full understanding of testing a Vue and Vuex application diff --git a/doc/development/import_export.md b/doc/development/import_export.md index e2108605d54..f7f48b03651 100644 --- a/doc/development/import_export.md +++ b/doc/development/import_export.md @@ -222,7 +222,7 @@ bundle exec rake gitlab:import_export:bump_version ### Renaming columns or models -This is a relatively common occurence that will require a version bump. +This is a relatively common occurrence that will require a version bump. There is also the _RC problem_ - GitLab.com runs an RC, prior to any customers, meaning that we want to bump the version up in the next version (or patch release). diff --git a/doc/development/logging.md b/doc/development/logging.md index 5c1d96b9e0c..d61441813b2 100644 --- a/doc/development/logging.md +++ b/doc/development/logging.md @@ -32,8 +32,8 @@ These logs suffer from a number of problems: 1. They often lack timestamps or other contextual information (e.g. project ID, user) 2. They may span multiple lines, which make them hard to find via Elasticsearch. 3. They lack a common structure, which make them hard to parse by log -forwarders, such as Logstash or Fluentd. This also makes them hard to -search. + forwarders, such as Logstash or Fluentd. This also makes them hard to + search. Note that currently on GitLab.com, any messages in `production.log` will NOT get indexed by Elasticsearch due to the sheer volume and noise. They @@ -61,12 +61,12 @@ importer. You want to log issues created, merge requests, etc. as the importer progresses. Here's what to do: 1. Look at [the list of GitLab Logs](../administration/logs.md) to see -if your log message might belong with one of the existing log files. + if your log message might belong with one of the existing log files. 1. If there isn't a good place, consider creating a new filename, but -check with a maintainer if it makes sense to do so. A log file should -make it easy for people to search pertinent logs in one place. For -example, `geo.log` contains all logs pertaining to GitLab Geo. -To create a new file: + check with a maintainer if it makes sense to do so. A log file should + make it easy for people to search pertinent logs in one place. For + example, `geo.log` contains all logs pertaining to GitLab Geo. + To create a new file: 1. Choose a filename (e.g. `importer_json.log`). 1. Create a new subclass of `Gitlab::JsonLogger`: @@ -130,15 +130,15 @@ To create a new file: ## Additional steps with new log files 1. Consider log retention settings. By default, Omnibus will rotate any -logs in `/var/log/gitlab/gitlab-rails/*.log` every hour and [keep at -most 30 compressed files](https://docs.gitlab.com/omnibus/settings/logs.html#logrotate). -On GitLab.com, that setting is only 6 compressed files. These settings should suffice -for most users, but you may need to tweak them in [omnibus-gitlab](https://gitlab.com/gitlab-org/omnibus-gitlab). + logs in `/var/log/gitlab/gitlab-rails/*.log` every hour and [keep at + most 30 compressed files](https://docs.gitlab.com/omnibus/settings/logs.html#logrotate). + On GitLab.com, that setting is only 6 compressed files. These settings should suffice + for most users, but you may need to tweak them in [omnibus-gitlab](https://gitlab.com/gitlab-org/omnibus-gitlab). 1. If you add a new file, submit an issue to the [production -tracker](https://gitlab.com/gitlab-com/gl-infra/production/issues) or -a merge request to the [gitlab_fluentd](https://gitlab.com/gitlab-cookbooks/gitlab_fluentd) -project. See [this example](https://gitlab.com/gitlab-cookbooks/gitlab_fluentd/merge_requests/51/diffs). + tracker](https://gitlab.com/gitlab-com/gl-infra/production/issues) or + a merge request to the [gitlab_fluentd](https://gitlab.com/gitlab-cookbooks/gitlab_fluentd) + project. See [this example](https://gitlab.com/gitlab-cookbooks/gitlab_fluentd/merge_requests/51/diffs). 1. Be sure to update the [GitLab CE/EE documentation](../administration/logs.md) and the [GitLab.com -runbooks](https://gitlab.com/gitlab-com/runbooks/blob/master/howto/logging.md). + runbooks](https://gitlab.com/gitlab-com/runbooks/blob/master/howto/logging.md). diff --git a/doc/development/new_fe_guide/development/accessibility.md b/doc/development/new_fe_guide/development/accessibility.md index 2a3a126ca5c..8420a504ec4 100644 --- a/doc/development/new_fe_guide/development/accessibility.md +++ b/doc/development/new_fe_guide/development/accessibility.md @@ -2,7 +2,7 @@ Using semantic HTML plays a key role when it comes to accessibility. ## Accessible Rich Internet Applications - ARIA -WAI-ARIA, the Accessible Rich Internet Applications specification, defines a way to make Web content and Web applications more accessible to people with disabilities. +WAI-ARIA, the Accessible Rich Internet Applications specification, defines a way to make Web content and Web applications more accessible to people with disabilities. > Note: It is [recommended][using-aria] to use semantic elements as the primary method to achieve accessibility rather than adding aria attributes. Adding aria attributes should be seen as a secondary method for creating accessible elements. @@ -15,6 +15,7 @@ Check the list of WAI-ARIA roles [here][roles] When using icons or images that aren't absolutely needed to understand the context, we should use `aria-hidden="true"`. On the other hand, if an icon is crucial to understand the context we should do one of the following: + 1. Use `aria-label` in the element with a meaningful description 1. Use `aria-labelledby` to point to an element that contains the explanation for that icon diff --git a/doc/development/new_fe_guide/style/html.md b/doc/development/new_fe_guide/style/html.md index 2d5b7d048ab..035fcbb28df 100644 --- a/doc/development/new_fe_guide/style/html.md +++ b/doc/development/new_fe_guide/style/html.md @@ -3,6 +3,7 @@ ## Buttons <a name="button-type"></a><a name="1.1"></a> + - [1.1](#button-type) **Use button type** Button tags requires a `type` attribute according to the [W3C HTML specification][button-type-spec]. ``` @@ -14,6 +15,7 @@ ``` <a name="button-role"></a><a name="1.2"></a> + - [1.2](#button-role) **Use button role for non buttons** If an HTML element has an onClick handler but is not a button, it should have `role="button"`. This is more [accessible][button-role-accessible]. ``` @@ -27,6 +29,7 @@ ## Links <a name="blank-links"></a><a name="2.1"></a> + - [2.1](#blank-links) **Use rel for target blank** Use `rel="noopener noreferrer"` whenever your links open in a new window i.e. `target="_blank"`. This prevents [the following][jitbit-target-blank] security vulnerability documented by JitBit ``` @@ -38,6 +41,7 @@ ``` <a name="fake-links"></a><a name="2.2"></a> + - [2.2](#fake-links) **Do not use fake links** Use a button tag if a link only invokes JavaScript click event handlers. This is more semantic. ``` diff --git a/doc/development/new_fe_guide/style/javascript.md b/doc/development/new_fe_guide/style/javascript.md index 922fd1e4ea4..7985b893c9e 100644 --- a/doc/development/new_fe_guide/style/javascript.md +++ b/doc/development/new_fe_guide/style/javascript.md @@ -10,6 +10,7 @@ You can run eslint locally by running `yarn eslint` ## Arrays <a name="avoid-foreach"></a><a name="1.1"></a> + - [1.1](#avoid-foreach) **Avoid ForEach when mutating data** Use `map`, `reduce` or `filter` instead of `forEach` when mutating data. This will minimize mutations in functions ([which is aligned with Airbnb's style guide][airbnb-minimize-mutations]) ``` @@ -17,7 +18,7 @@ You can run eslint locally by running `yarn eslint` users.forEach((user, index) => { user.id = index; }); - + // good const usersWithId = users.map((user, index) => { return Object.assign({}, user, { id: index }); @@ -27,6 +28,7 @@ You can run eslint locally by running `yarn eslint` ## Functions <a name="limit-params"></a><a name="2.1"></a> + - [2.1](#limit-params) **Limit number of parameters** If your function or method has more than 3 parameters, use an object as a parameter instead. ``` @@ -34,7 +36,7 @@ You can run eslint locally by running `yarn eslint` function a(p1, p2, p3) { // ... }; - + // good function a(p) { // ... @@ -44,6 +46,7 @@ You can run eslint locally by running `yarn eslint` ## Classes & constructors <a name="avoid-constructor-side-effects"></a><a name="3.1"></a> + - [3.1](#avoid-constructor-side-effects) **Avoid side effects in constructors** Avoid making some operations in the `constructor`, such as asynchronous calls, API requests and DOM manipulations. Prefer moving them into separate functions. This will make tests easier to write and code easier to maintain. ```javascript @@ -54,23 +57,24 @@ You can run eslint locally by running `yarn eslint` axios.get(this.config.endpoint) } } - + // good class myClass { constructor(config) { this.config = config; } - + makeRequest() { axios.get(this.config.endpoint) } } const instance = new myClass(); instance.makeRequest(); - + ``` <a name="avoid-classes-to-handle-dom-events"></a><a name="3.2"></a> + - [3.2](#avoid-classes-to-handle-dom-events) **Avoid classes to handle DOM events** If the only purpose of the class is to bind a DOM event and handle the callback, prefer using a function. ``` @@ -79,14 +83,14 @@ You can run eslint locally by running `yarn eslint` constructor(config) { this.config = config; } - + init() { document.addEventListener('click', () => {}); } } - + // good - + const myFunction = () => { document.addEventListener('click', () => { // handle callback here @@ -95,8 +99,9 @@ You can run eslint locally by running `yarn eslint` ``` <a name="element-container"></a><a name="3.3"></a> + - [3.3](#element-container) **Pass element container to constructor** When your class manipulates the DOM, receive the element container as a parameter. -This is more maintainable and performant. + This is more maintainable and performant. ``` // bad @@ -105,7 +110,7 @@ This is more maintainable and performant. document.querySelector('.b'); } } - + // good class a { constructor(options) { @@ -117,12 +122,13 @@ This is more maintainable and performant. ## Type Casting & Coercion <a name="use-parseint"></a><a name="4.1"></a> + - [4.1](#use-parseint) **Use ParseInt** Use `ParseInt` when converting a numeric string into a number. ``` // bad Number('10') - + // good parseInt('10', 10); ``` @@ -130,12 +136,13 @@ This is more maintainable and performant. ## CSS Selectors <a name="use-js-prefix"></a><a name="5.1"></a> + - [5.1](#use-js-prefix) **Use js prefix** If a CSS class is only being used in JavaScript as a reference to the element, prefix the class name with `js-` ``` // bad <button class="add-user"></button> - + // good <button class="js-add-user"></button> ``` @@ -143,44 +150,51 @@ This is more maintainable and performant. ## Modules <a name="use-absolute-paths"></a><a name="6.1"></a> + - [6.1](#use-absolute-paths) **Use absolute paths for nearby modules** Use absolute paths if the module you are importing is less than two levels up. ``` // bad import GitLabStyleGuide from '~/guides/GitLabStyleGuide'; - + // good import GitLabStyleGuide from '../GitLabStyleGuide'; ``` <a name="use-relative-paths"></a><a name="6.2"></a> + - [6.2](#use-relative-paths) **Use relative paths for distant modules** If the module you are importing is two or more levels up, use a relative path instead of an absolute path. ``` // bad import GitLabStyleGuide from '../../../guides/GitLabStyleGuide'; - + // good import GitLabStyleGuide from '~/GitLabStyleGuide'; ``` <a name="global-namespace"></a><a name="6.3"></a> + - [6.3](#global-namespace) **Do not add to global namespace** <a name="domcontentloaded"></a><a name="6.4"></a> + - [6.4](#domcontentloaded) **Do not use DOMContentLoaded in non-page modules** Imported modules should act the same each time they are loaded. `DOMContentLoaded` events are only allowed on modules loaded in the `/pages/*` directory because those are loaded dynamically with webpack. ## Security <a name="avoid-xss"></a><a name="7.1"></a> + - [7.1](#avoid-xss) **Avoid XSS** Do not use `innerHTML`, `append()` or `html()` to set content. It opens up too many vulnerabilities. ## ESLint <a name="disable-eslint-file"></a><a name="8.1"></a> + - [8.1](#disable-eslint-file) **Disabling ESLint in new files** Do not disable ESLint when creating new files. Existing files may have existing rules disabled due to legacy compatibility reasons but they are in the process of being refactored. <a name="disable-eslint-rule"></a><a name="8.2"></a> + - [8.2](#disable-eslint-rule) **Disabling ESLint rule** Do not disable specific ESLint rules. Due to technical debt, you may disable the following rules only if you are invoking/instantiating existing code modules - [no-new][no-new] diff --git a/doc/development/ordering_table_columns.md b/doc/development/ordering_table_columns.md index 3e49a65f5ab..cbfd05e731d 100644 --- a/doc/development/ordering_table_columns.md +++ b/doc/development/ordering_table_columns.md @@ -19,7 +19,7 @@ The space between rows is also subject to alignment padding. The `user_id` column takes only 4 bytes, and on 64-bit platform, 4 zeroes will be added for alignment padding, to allow storing the next row beginning with the "clear" word. -As a result, the actual size of each column would be (ommiting variable length +As a result, the actual size of each column would be (omitting variable length data and 24-byte tuple header): 8 bytes, variable, 8 bytes. This means that each row will require at least 16 bytes for the two 4-byte integers. If a table has a few rows this is not an issue. However, once you start storing millions of diff --git a/doc/development/performance.md b/doc/development/performance.md index 32970152911..2a287611bdf 100644 --- a/doc/development/performance.md +++ b/doc/development/performance.md @@ -410,6 +410,21 @@ there's nothing stopping somebody from doing this elsewhere in the code: SOME_CONSTANT = 'bar' ``` +## How to seed a database with millions of rows + +You might want millions of project rows in your local database, for example, +in order to compare relative query performance, or to reproduce a bug. You could +do this by hand with SQL commands, but since you have ActiveRecord models, you +might find using these gems more convenient: + +- [BulkInsert gem](https://github.com/jamis/bulk_insert) +- [ActiveRecord::PgGenerateSeries gem](https://github.com/ryu39/active_record-pg_generate_series) + +### Examples + +You may find some useful examples in this snippet: +https://gitlab.com/gitlab-org/gitlab-ce/snippets/33946 + [#15607]: https://gitlab.com/gitlab-org/gitlab-ce/issues/15607 [yorickpeterse]: https://gitlab.com/yorickpeterse [anti-pattern]: https://en.wikipedia.org/wiki/Anti-pattern diff --git a/doc/development/policies.md b/doc/development/policies.md index 6a3b90f3604..c4ac42bb40a 100644 --- a/doc/development/policies.md +++ b/doc/development/policies.md @@ -88,10 +88,10 @@ An example debug output would look as follows: Each line represents a rule that was evaluated. There are a few things to note: 1. The `-` or `+` symbol indicates whether the rule block was evaluated to be -`false` or `true`, respectively. + `false` or `true`, respectively. 2. The number inside the brackets indicates the score. 3. The last part of the line (e.g. `@john : Issue/1`) shows the username -and subject for that rule. + and subject for that rule. Here you can see that the first four rules were evaluated `false` for which user and subject. For example, you can see in the last line that diff --git a/doc/development/polling.md b/doc/development/polling.md index 3b34f985cd4..76bb5ae7819 100644 --- a/doc/development/polling.md +++ b/doc/development/polling.md @@ -51,6 +51,7 @@ request path. By doing this we avoid query parameter ordering problems and make route matching easier. For more information see: + - [`Poll-Interval` header](fe_guide/performance.md#realtime-components) - [RFC 7232](https://tools.ietf.org/html/rfc7232) - [ETag proposal](https://gitlab.com/gitlab-org/gitlab-ce/issues/26926) diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md index 4cc500ed1b6..dcb32c89f65 100644 --- a/doc/development/rake_tasks.md +++ b/doc/development/rake_tasks.md @@ -73,6 +73,7 @@ To make sure that indices still fit. You could find great details in: ## Run tests In order to run the test you can use the following commands: + - `rake spec` to run the rspec suite - `rake karma` to run the karma test suite - `rake gitlab:test` to run all the tests diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md index 4cc3812b0f0..2c8d488877b 100644 --- a/doc/development/testing_guide/best_practices.md +++ b/doc/development/testing_guide/best_practices.md @@ -358,16 +358,11 @@ range of inputs, might look like this: describe "#==" do using RSpec::Parameterized::TableSyntax - let(:project1) { create(:project) } - let(:project2) { create(:project) } where(:a, :b, :result) do 1 | 1 | true 1 | 2 | false true | true | true true | false | false - project1 | project1 | true - project2 | project2 | true - project 1 | project2 | false end with_them do @@ -380,6 +375,11 @@ describe "#==" do end ``` +CAUTION: **Caution:** +Only use simple values as input in the `where` block. Using procs, stateful +objects, FactoryBot-created objects etc. can lead to +[unexpected results](https://github.com/tomykaira/rspec-parameterized/issues/8). + ### Prometheus tests Prometheus metrics may be preserved from one test run to another. To ensure that metrics are diff --git a/doc/development/testing_guide/end_to_end_tests.md b/doc/development/testing_guide/end_to_end_tests.md index e9f236c6b3a..a239dc84a1c 100644 --- a/doc/development/testing_guide/end_to_end_tests.md +++ b/doc/development/testing_guide/end_to_end_tests.md @@ -41,24 +41,24 @@ Currently, we are using _multi-project pipeline_-like approach to run QA pipelines. 1. Developer triggers a manual action, that can be found in CE / EE merge -requests. This starts a chain of pipelines in multiple projects. + requests. This starts a chain of pipelines in multiple projects. 1. The script being executed triggers a pipeline in [Omnibus GitLab][omnibus-gitlab] -and waits for the resulting status. We call this a _status attribution_. + and waits for the resulting status. We call this a _status attribution_. 1. GitLab packages are being built in the [Omnibus GitLab][omnibus-gitlab] -pipeline. Packages are then pushed to its Container Registry. + pipeline. Packages are then pushed to its Container Registry. 1. When packages are ready, and available in the registry, a final step in the -[Omnibus GitLab][omnibus-gitlab] pipeline, triggers a new -[GitLab QA pipeline][gitlab-qa-pipelines]. It also waits for a resulting status. + [Omnibus GitLab][omnibus-gitlab] pipeline, triggers a new + [GitLab QA pipeline][gitlab-qa-pipelines]. It also waits for a resulting status. 1. GitLab QA pulls images from the registry, spins-up containers and runs tests -against a test environment that has been just orchestrated by the `gitlab-qa` -tool. + against a test environment that has been just orchestrated by the `gitlab-qa` + tool. 1. The result of the [GitLab QA pipeline][gitlab-qa-pipelines] is being -propagated upstream, through Omnibus, back to the CE / EE merge request. + propagated upstream, through Omnibus, back to the CE / EE merge request. #### How do I write tests? diff --git a/doc/install/azure/index.md b/doc/install/azure/index.md index be14858f4c8..fa5be1d30f9 100644 --- a/doc/install/azure/index.md +++ b/doc/install/azure/index.md @@ -21,14 +21,14 @@ First, you'll need an account on Azure. There are three ways to do this: - If your company (or you) already has an account, then you are ready to go! - You can also open your own Azure account for free. _At time of writing_, you get $200 -of credit to spend on Azure services for 30 days. You can use this credit to try out paid Azure -services, exploring Microsoft's cloud for free. Even after the first 30 days, you never have to pay -anything unless you decide to transition to paid services with a Pay-As-You-Go Azure subscription. -This is a great way to try out Azure and cloud computing, and you can -[read more in their comprehensive FAQ][Azure-Free-Account-FAQ]. + of credit to spend on Azure services for 30 days. You can use this credit to try out paid Azure + services, exploring Microsoft's cloud for free. Even after the first 30 days, you never have to pay + anything unless you decide to transition to paid services with a Pay-As-You-Go Azure subscription. + This is a great way to try out Azure and cloud computing, and you can + [read more in their comprehensive FAQ][Azure-Free-Account-FAQ]. - If you have an MSDN subscription, you can activate your Azure subscriber benefits. Your MSDN -subscription gives you recurring Azure credits every month, so why not put those credits to use and -try out GitLab right now? + subscription gives you recurring Azure credits every month, so why not put those credits to use and + try out GitLab right now? ## Working with Azure @@ -216,10 +216,10 @@ Like all servers, our VM will be running many services. However, we want to open ports to enable public internet access to two services in particular: 1. **HTTP** (port 80) - opening port 80 will enable our VM to respond to HTTP requests, allowing -public access to the instance of GitLab running on our VM. + public access to the instance of GitLab running on our VM. 1. **SSH** (port 22) - opening port 22 will enable our VM to respond to SSH connection requests, -allowing public access (with authentication) to remote terminal sessions -_(you'll see why we need [SSH] access to our VM [later on in this tutorial](#maintaining-your-gitlab-instance))_ + allowing public access (with authentication) to remote terminal sessions + _(you'll see why we need [SSH] access to our VM [later on in this tutorial](#maintaining-your-gitlab-instance))_ ### Open HTTP on Port 80 diff --git a/doc/install/kubernetes/preparation/eks.md b/doc/install/kubernetes/preparation/eks.md index 647b856d54e..ea3b075dd82 100644 --- a/doc/install/kubernetes/preparation/eks.md +++ b/doc/install/kubernetes/preparation/eks.md @@ -5,6 +5,7 @@ There are a few nuances to Amazon EKS which are important to be aware of, when d ## Persistent volume management There are two methods to manage volume claims on Kubernetes: + 1. Manually creating each persistent volume (recommended on EKS) 1. Utilizing dynamic provisioning to automatically create the persistent volumes diff --git a/doc/install/kubernetes/preparation/tiller.md b/doc/install/kubernetes/preparation/tiller.md index 107df074b3b..00b0737402b 100644 --- a/doc/install/kubernetes/preparation/tiller.md +++ b/doc/install/kubernetes/preparation/tiller.md @@ -15,7 +15,7 @@ cannot be normally deployed. Tiller is deployed into the cluster and interacts with the Kubernetes API to deploy your applications. If role based access control (RBAC) is enabled, Tiller will need to be [granted permissions](#preparing-for-helm-with-rbac) to allow it to talk to the Kubernetes API. -If RBAC is not enabled, skip to [initalizing Helm](#initialize-helm). +If RBAC is not enabled, skip to [initializing Helm](#initialize-helm). If you are not sure whether RBAC is enabled in your cluster, or to learn more, read through our [RBAC documentation](rbac.md). @@ -54,19 +54,25 @@ Some clusters require authentication to use `kubectl` to create the Tiller roles #### Upload the RBAC config as an admin user (GKE) -For GKE, you need to grab the admin credentials: +For GKE, you need to obtain the admin credentials. This command will output the admin password: ``` gcloud container clusters describe <cluster-name> --zone <zone> --project <project-id> --format='value(masterAuth.password)' ``` -This command will output the admin password. We need the password to authenticate with `kubectl` and create the role. +Use the admin password to set the admin credentials. Replace the password value below with the output value from the above step: ``` -kubectl --username=admin --password=xxxxxxxxxxxxxx create -f rbac-config.yaml +kubectl config set-credentials admin --username=admin --password=xxxxxxxxxxxxxx ``` -#### Upload the RBAC config (Other clusters) +Once credentials have been set, create the role: + +``` +kubectl --user=admin create -f rbac-config.yaml +``` + +#### Upload the RBAC config (Non-GKE clusters) For other clusters like Amazon EKS, you can directly upload the RBAC configuration. diff --git a/doc/install/requirements.md b/doc/install/requirements.md index 1b7e0d1d0ab..c1f2297f3be 100644 --- a/doc/install/requirements.md +++ b/doc/install/requirements.md @@ -33,7 +33,7 @@ Please consider using a virtual machine to run GitLab. ## Ruby versions -GitLab requires Ruby (MRI) 2.3. Support for Ruby versions below 2.3 (2.1, 2.2) will stop with GitLab 8.13. +GitLab requires Ruby (MRI) 2.5. Support for Ruby versions below 2.5 (2.3, 2.4) will stop with GitLab 11.6. You will have to use the standard MRI implementation of Ruby. We love [JRuby](https://www.jruby.org/) and [Rubinius](https://rubinius.com) but GitLab diff --git a/doc/integration/README.md b/doc/integration/README.md index 7941cb42667..f7a624def53 100644 --- a/doc/integration/README.md +++ b/doc/integration/README.md @@ -12,7 +12,7 @@ See the documentation below for details on how to configure these services. - [Akismet](akismet.md) Configure Akismet to stop spam - [Auth0 OmniAuth](auth0.md) Enable the Auth0 OmniAuth provider - [Bitbucket](bitbucket.md) Import projects from Bitbucket.org and login to your GitLab instance with your -Bitbucket.org account + Bitbucket.org account - [CAS](cas.md) Configure GitLab to sign in using CAS - [External issue tracker](external-issue-tracker.md) Redmine, JIRA, etc. - [Gmail actions buttons](gmail_action_buttons_for_gitlab.md) Adds GitLab actions to messages diff --git a/doc/integration/auth0.md b/doc/integration/auth0.md index e2ed7a4b1ab..c67375ede50 100644 --- a/doc/integration/auth0.md +++ b/doc/integration/auth0.md @@ -4,18 +4,18 @@ To enable the Auth0 OmniAuth provider, you must create an Auth0 account, and an application. 1. Sign in to the [Auth0 Console](https://auth0.com/auth/login). If you need to -create an account, you can do so at the same link. + create an account, you can do so at the same link. 1. Select "New App/API". 1. Provide the Application Name ('GitLab' works fine). 1. Once created, you should see the Quick Start options. Disregard them and -select 'Settings' above the Quick Start options. + select 'Settings' above the Quick Start options. 1. At the top of the Settings screen, you should see your Domain, Client ID and -Client Secret. Take note of these as you'll need to put them in the -configuration file. For example: + Client Secret. Take note of these as you'll need to put them in the + configuration file. For example: - Domain: `test1234.auth0.com` - Client ID: `t6X8L2465bNePWLOvt9yi41i` - Client Secret: `KbveM3nqfjwCbrhaUy_gDu2dss8TIlHIdzlyf33pB7dEK5u_NyQdp65O_o02hXs2` @@ -44,7 +44,7 @@ configuration file. For example: ``` 1. See [Initial OmniAuth Configuration](omniauth.md#initial-omniauth-configuration) -for initial settings. + for initial settings. 1. Add the provider configuration: @@ -76,10 +76,10 @@ for initial settings. ``` 1. Change `YOUR_AUTH0_CLIENT_ID` to the client ID from the Auth0 Console page -from step 5. + from step 5. 1. Change `YOUR_AUTH0_CLIENT_SECRET` to the client secret from the Auth0 Console -page from step 5. + page from step 5. 1. [Reconfigure][] or [restart GitLab][] for the changes to take effect if you installed GitLab via Omnibus or from source respectively. diff --git a/doc/integration/facebook.md b/doc/integration/facebook.md index a67de23b17b..fe789a80eed 100644 --- a/doc/integration/facebook.md +++ b/doc/integration/facebook.md @@ -9,7 +9,7 @@ To enable the Facebook OmniAuth provider you must register your application with 1. Select the type "Website" 1. Enter a name for your app. This can be anything. Consider something like "<Organization>'s GitLab" or "<Your Name>'s GitLab" or -something else descriptive. + something else descriptive. 1. Choose "Create New Facebook App ID" diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md index 2514ca94775..069c87f921a 100644 --- a/doc/raketasks/backup_restore.md +++ b/doc/raketasks/backup_restore.md @@ -442,6 +442,8 @@ backups will be copied to, and will be created if it does not exist. If the directory that you want to copy the tarballs to is the root of your mounted directory, just use `.` instead. +NOTE: **Note:** Since file system performance may affect GitLab's overall performance, we do not recommend using EFS for storage. See the [relevant documentation](../administration/high_availability/nfs.md#avoid-using-awss-elastic-file-system-efs) for more details. + For Omnibus GitLab packages: 1. Edit `/etc/gitlab/gitlab.rb`: diff --git a/doc/security/img/ssh_keys_restricted_key_icon.png b/doc/security/img/ssh_keys_restricted_key_icon.png Binary files differnew file mode 100644 index 00000000000..ad3749e8233 --- /dev/null +++ b/doc/security/img/ssh_keys_restricted_key_icon.png diff --git a/doc/security/ssh_keys_restrictions.md b/doc/security/ssh_keys_restrictions.md index 213fa5bfef5..6b6a8a06cc9 100644 --- a/doc/security/ssh_keys_restrictions.md +++ b/doc/security/ssh_keys_restrictions.md @@ -17,3 +17,11 @@ In the Admin area under **Settings** (`/admin/application_settings`), look for the "Visibility and Access Controls" area: ![SSH keys restriction admin settings](img/ssh_keys_restrictions_settings.png) + +If a restriction is imposed on any key type, users will be unable to upload new SSH keys that don't meet the requirement. Any existing keys that don't meet it will be disabled but not removed and users will be unable to pull or push code using them. + +An icon will be visible to the user of a restricted key in the SSH keys section of their profile: + +![Restricted SSH key icon](img/ssh_keys_restricted_key_icon.png) + +Hovering over this icon will tell you why the key is restricted. diff --git a/doc/university/high-availability/aws/README.md b/doc/university/high-availability/aws/README.md index b4ba5b7a24e..4095f71e501 100644 --- a/doc/university/high-availability/aws/README.md +++ b/doc/university/high-availability/aws/README.md @@ -125,10 +125,10 @@ image below we have the settings for this article but note the following two options which are of particular interest for HA: 1. Multi-AZ-Deployment is recommended as redundancy. Read more at -[High Availability (Multi-AZ)](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) + [High Availability (Multi-AZ)](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) 1. While we chose a General Purpose (SSD) for this article a Provisioned -IOPS (SSD) is best suited for HA. Read more about it at -[Storage for Amazon RDS](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) + IOPS (SSD) is best suited for HA. Read more about it at + [Storage for Amazon RDS](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) ![RDS Instance Specs](img/instance_specs.png) diff --git a/doc/university/training/end-user/README.md b/doc/university/training/end-user/README.md index 60c0eadc572..99fb5e83387 100644 --- a/doc/university/training/end-user/README.md +++ b/doc/university/training/end-user/README.md @@ -86,6 +86,7 @@ git config --global user.email you@example.com ```bash git config --global --list ``` + - You might want or be required to use an SSH key. - Instructions: [SSH](http://doc.gitlab.com/ce/ssh/README.html) @@ -413,6 +414,7 @@ Revert is safer considering we can revert a revert --- ### Version Control + - Local VCS was used with a filesystem or a simple db. - Centralized VCS such as Subversion includes collaboration but still is prone to data loss as the main server is the single point of diff --git a/doc/university/training/topics/stash.md b/doc/university/training/topics/stash.md index f1c91fb1b37..dfd28fbcbc9 100644 --- a/doc/university/training/topics/stash.md +++ b/doc/university/training/topics/stash.md @@ -30,7 +30,7 @@ and we need to change to a different branch. ---------- - Every time we save a stash it gets stacked so by using list we can see all our -stashes. + stashes. ``` git stash list diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md index 1f4b5fbffa7..350072186ee 100644 --- a/doc/update/mysql_to_postgresql.md +++ b/doc/update/mysql_to_postgresql.md @@ -95,7 +95,7 @@ Now, you can use pgloader to migrate the data from MySQL to PostgreSQL: ``` 1. Once the migration finishes, you should see a summary table that looks like -the following: + the following: ``` table name read imported errors total time @@ -242,7 +242,7 @@ Now, you can use pgloader to migrate the data from MySQL to PostgreSQL: ``` 1. Once the migration finishes, you should see a summary table that looks like -the following: + the following: ``` table name read imported errors total time diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md new file mode 100644 index 00000000000..00cea22e4e1 --- /dev/null +++ b/doc/user/admin_area/index.md @@ -0,0 +1,29 @@ +# GitLab Admin Area **[CORE ONLY]** + +The Admin Area provides a web UI for administering some features of GitLab self-managed instances. + +To access the Admin Area, either: + +- Click the Admin Area icon (the spanner or wrench icon). +- Visit `/admin` on your self-managed instance. + +NOTE: **Note:** +Only admin users can access the Admin Area. + +## Admin Area sections + +The Admin Area is made up of the following sections: + +| Section | Description | +|:------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------| +| Overview | View your GitLab Dashboard, and maintain projects, users, groups, jobs, runners, and Gitaly servers. | +| Monitoring | View GitLab system information, and information on background jobs, logs, [health checks](monitoring/health_check.md), request profiles, and audit logs. | +| Messages | Send and manage [broadcast messages](broadcast_messages.md) for your users. | +| System Hooks | Configure [system hooks](../../system_hooks/system_hooks.md) for many events. | +| Applications | Create system [OAuth applications](../../integration/oauth_provider.md) for integrations with other services. | +| Abuse Reports | Manage [abuse reports](abuse_reports.md) submitted by your users. | +| Deploy Keys | Create instance-wide [SSH deploy keys](../../ssh/README.md#deploy-keys). | +| Service Templates | Create [service templates](../project/integrations/services_templates.md) for projects. | +| Labels | Create and maintain [labels](labels.md) for your GitLab instance. | +| Appearance | Customize [GitLab's appearance](../../customization/index.md). | +| Settings | Modify the [settings](settings/index.md) for your GitLab instance. | diff --git a/doc/user/admin_area/settings/continuous_integration.md b/doc/user/admin_area/settings/continuous_integration.md index 12aa6f27444..01979f12a01 100644 --- a/doc/user/admin_area/settings/continuous_integration.md +++ b/doc/user/admin_area/settings/continuous_integration.md @@ -38,7 +38,7 @@ To change it: The default expiration time of the [job artifacts](../../../administration/job_artifacts.md) can be set in the Admin area of your GitLab instance. The syntax of duration is -described in [`artifacts:expire_in`](../../../ci/yaml/README.md#artifacts-expire_in) +described in [`artifacts:expire_in`](../../../ci/yaml/README.md#artifactsexpire_in) and the default value is `30 days`. On GitLab.com they [never expire](../../gitlab_com/index.md#gitlab-ci-cd). @@ -47,7 +47,7 @@ and the default value is `30 days`. On GitLab.com they 1. Hit **Save changes** for the changes to take effect. This setting is set per job and can be overridden in -[`.gitlab-ci.yml`](../../../ci/yaml/README.md#artifacts-expire_in). +[`.gitlab-ci.yml`](../../../ci/yaml/README.md#artifactsexpire_in). To disable the expiration, set it to `0`. The default unit is in seconds. ## Archive jobs **[CORE ONLY]** diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md index d202b1260ad..1e2fad1efe9 100644 --- a/doc/user/discussions/index.md +++ b/doc/user/discussions/index.md @@ -248,10 +248,10 @@ For large projects with many contributors, it may be useful to stop discussions in issues or merge requests in these scenarios: - The project maintainer has already resolved the discussion and it is not helpful -for continued feedback. The project maintainer has already directed new conversation -to newer issues or merge requests. + for continued feedback. The project maintainer has already directed new conversation + to newer issues or merge requests. - The people participating in the discussion are trolling, abusive, or otherwise -being unproductive. + being unproductive. In these cases, a user with Developer permissions or higher in the project can lock (and unlock) an issue or a merge request, using the "Lock" section in the sidebar. For issues, @@ -276,17 +276,17 @@ Additionally locked issues can not be reopened. ## Filtering notes -> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/26723) in GitLab 11.5. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/26723) in GitLab 11.5. -For issues with many comments like activity notes and user comments, sometimes -finding useful information can be hard. There is a way to filter comments from single notes and discussions for merge requests and issues. +For issues with many comments like activity notes and user comments, sometimes +finding useful information can be hard. There is a way to filter comments from single notes and discussions for merge requests and issues. From a merge request's **Discussion** tab, or from an epic/issue overview, find the filter's dropdown menu on the right side of the page, from which you can choose one of the following options: - **Show all activity**: displays all user comments and system notes -(issue updates, mentions from other issues, changes to the description, etc). + (issue updates, mentions from other issues, changes to the description, etc). - **Show comments only**: only displays user comments in the list. -- **Show history only**: only displays activity notes. +- **Show history only**: only displays activity notes. ![Notes filters dropdown options](img/index_notes_filters.png) @@ -298,21 +298,21 @@ from any device you're logged into. > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/18008) in GitLab 11.6. -As a reviewer, you're able to suggest code changes with a simple +As a reviewer, you're able to suggest code changes with a simple markdown syntax in Merge Request Diff discussions. Then, the -Merge Request author (or other users with appropriate +Merge Request author (or other users with appropriate [permission](../permissions.md)) is able to apply these -suggestions with a click, which will generate a commit in +suggestions with a click, which will generate a commit in the Merge Request authored by the user that applied them. 1. Choose a line of code to be changed, add a new comment, then click -on the **Insert suggestion** icon in the toolbar: + on the **Insert suggestion** icon in the toolbar: ![Add a new comment](img/insert_suggestion.png) - + > **Note:** The suggestion will only affect the commented line. Multi-line - suggestions are currently not supported. Will be introduced by + suggestions are currently not supported. Will be introduced by [#53310](https://gitlab.com/gitlab-org/gitlab-ce/issues/53310). 1. In the comment, add your suggestion to the pre-populated code block: @@ -327,9 +327,9 @@ on the **Insert suggestion** icon in the toolbar: ![Apply suggestions](img/suggestion.png) > **Note:** - Discussions are _not_ automatically resolved. Will be introduced by + Discussions are _not_ automatically resolved. Will be introduced by [#54405](https://gitlab.com/gitlab-org/gitlab-ce/issues/54405). - + Once the author applies a suggestion, it will be marked with the **Applied** label, and GitLab will create a new commit with the message `Apply suggestion to <file-name>` and push the suggested change directly into the codebase in the merge request's branch. diff --git a/doc/user/gitlab_com/index.md b/doc/user/gitlab_com/index.md index c1c9b8bf43c..762cf911fcf 100644 --- a/doc/user/gitlab_com/index.md +++ b/doc/user/gitlab_com/index.md @@ -60,7 +60,7 @@ Below are the current settings regarding [GitLab CI/CD](../../ci/README.md). | Setting | GitLab.com | Default | | ----------- | ----------------- | ------------- | | Artifacts maximum size | 1G | 100M | -| Artifacts [expiry time](../../ci/yaml/README.md#artifacts-expire_in) | kept forever | deleted after 30 days unless otherwise specified | +| Artifacts [expiry time](../../ci/yaml/README.md#artifactsexpire_in) | kept forever | deleted after 30 days unless otherwise specified | ## Repository size limit diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 5fea683a7fd..300e0115c60 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -18,9 +18,9 @@ a link to the group settings. By clicking the last button you can leave that gro You can create groups for numerous reasons. To name a few: - Organize related projects under the same [namespace](#namespaces), add members to that -group and grant access to all their projects at once + group and grant access to all their projects at once - Create a group, include members of your team, and make it easier to -`@mention` all the team at once in issues and merge requests + `@mention` all the team at once in issues and merge requests - Create a group for your company members, and create [subgroups](subgroups/index.md) for each individual team. Let's say you create a group called `company-team`, and among others, you created subgroups in this group for each individual team `backend-team`, @@ -43,11 +43,11 @@ In GitLab, a namespace is a unique name to be used as a user name, a group name, For example, consider a user named Alex: 1. Alex creates an account on GitLab.com with the username `alex`; -their profile will be accessed under `https://gitlab.example.com/alex` + their profile will be accessed under `https://gitlab.example.com/alex` 1. Alex creates a group for their team with the groupname `alex-team`; -the group and its projects will be accessed under `https://gitlab.example.com/alex-team` + the group and its projects will be accessed under `https://gitlab.example.com/alex-team` 1. Alex creates a subgroup of `alex-team` with the subgroup name `marketing`; -this subgroup and its projects will be accessed under `https://gitlab.example.com/alex-team/marketing` + this subgroup and its projects will be accessed under `https://gitlab.example.com/alex-team/marketing` By doing so: @@ -107,7 +107,7 @@ Consider we have a group with two projects: - On the **Group Members** page we can now add a new user to the group. - Now because this user is a **Developer** member of the group, he automatically -gets **Developer** access to **all projects** within that group. + gets **Developer** access to **all projects** within that group. If necessary, you can increase the access level of an individual user for a specific project, by adding them again as a new member to the project with the new permission levels. @@ -267,9 +267,9 @@ Define project templates at a group-level by setting a group as a template sourc ### Advanced settings - **Projects**: view all projects within that group, add members to each project, -access each project's settings, and remove any project from the same screen. + access each project's settings, and remove any project from the same screen. - **Webhooks**: configure [webhooks](../project/integrations/webhooks.md) to your group. - **Kubernetes cluster integration**: connect your GitLab group with [Kubernetes clusters](clusters/index.md). - **Audit Events**: view [Audit Events](https://docs.gitlab.com/ee/administration/audit_events.html#audit-events) -for the group. **[STARTER ONLY]** + for the group. **[STARTER ONLY]** - **Pipelines quota**: keep track of the [pipeline quota](../admin_area/settings/continuous_integration.md) for the group. diff --git a/doc/user/index.md b/doc/user/index.md index 22506b30498..71378920ed4 100644 --- a/doc/user/index.md +++ b/doc/user/index.md @@ -38,10 +38,10 @@ GitLab is a Git-based platform that integrates a great number of essential tools - Hosting code in repositories with version control - Tracking proposals for new implementations, bug reports, and feedback with a -fully featured [Issue Tracker](project/issues/index.md#issue-tracker) + fully featured [Issue Tracker](project/issues/index.md#issue-tracker) - Organizing and prioritizing with [Issue Boards](project/issues/index.md#issue-boards) - Reviewing code in [Merge Requests](project/merge_requests/index.md) with live-preview changes per -branch with [Review Apps](../ci/review_apps/index.md) + branch with [Review Apps](../ci/review_apps/index.md) - Building, testing and deploying with built-in [Continuous Integration](../ci/README.md) - Deploying personal and professional static websites with [GitLab Pages](project/pages/index.md) - Integrating with Docker by using [GitLab Container Registry](project/container_registry.md) @@ -51,9 +51,9 @@ With GitLab Enterprise Edition, you can also: - Provide support with [Service Desk](https://docs.gitlab.com/ee/user/project/service_desk.html) - Improve collaboration with -[Merge Request Approvals](https://docs.gitlab.com/ee/user/project/merge_requests/index.html#merge-request-approvals), -[Multiple Assignees for Issues](https://docs.gitlab.com/ee/user/project/issues/multiple_assignees_for_issues.html), -and [Multiple Issue Boards](https://docs.gitlab.com/ee/user/project/issue_board.html#multiple-issue-boards) + [Merge Request Approvals](https://docs.gitlab.com/ee/user/project/merge_requests/index.html#merge-request-approvals), + [Multiple Assignees for Issues](https://docs.gitlab.com/ee/user/project/issues/multiple_assignees_for_issues.html), + and [Multiple Issue Boards](https://docs.gitlab.com/ee/user/project/issue_board.html#multiple-issue-boards) - Create formal relationships between issues with [Related Issues](https://docs.gitlab.com/ee/user/project/issues/related_issues.html) - Use [Burndown Charts](https://docs.gitlab.com/ee/user/project/milestones/burndown_charts.html) to track progress during a sprint or while working on a new version of their software. - Leverage [Elasticsearch](https://docs.gitlab.com/ee/integration/elasticsearch.html) with [Advanced Global Search](https://docs.gitlab.com/ee/user/search/advanced_global_search.html) and [Advanced Syntax Search](https://docs.gitlab.com/ee/user/search/advanced_search_syntax.html) for faster, more advanced code search across your entire GitLab instance @@ -77,12 +77,12 @@ build, test, and deploy your app with built-in GitLab CI/CD. Or, you can do it all at once, from one single project. - [Repositories](project/repository/index.md): Host your codebase in -repositories with version control and as part of a fully integrated platform. + repositories with version control and as part of a fully integrated platform. - [Issues](project/issues/index.md): Explore the best of GitLab Issues' features. - [Merge Requests](project/merge_requests/index.md): Collaborate on code, -reviews, live preview changes per branch, and request approvals with Merge Requests. + reviews, live preview changes per branch, and request approvals with Merge Requests. - [Milestones](project/milestones/index.md): Work on multiple issues and merge -requests towards the same target date with Milestones. + requests towards the same target date with Milestones. ## GitLab CI/CD @@ -92,9 +92,9 @@ directly from GitLab. No third-party integrations needed. - [GitLab Auto Deploy](../ci/autodeploy/index.md): Deploy your application out-of-the-box with GitLab Auto Deploy. - [Review Apps](../ci/review_apps/index.md): Live-preview the changes introduced by a merge request with Review Apps. - [GitLab Pages](project/pages/index.md): Publish your static site directly from -GitLab with GitLab Pages. You can build, test, and deploy any Static Site Generator with Pages. + GitLab with GitLab Pages. You can build, test, and deploy any Static Site Generator with Pages. - [GitLab Container Registry](project/container_registry.md): Build and deploy Docker -images with Container Registry. + images with Container Registry. ## Account @@ -102,13 +102,13 @@ There is a lot you can customize and configure to enjoy the best of GitLab. - [Settings](profile/index.md): Manage your user settings to change your personal info, -personal access tokens, authorized applications, etc. + personal access tokens, authorized applications, etc. - [Authentication](../topics/authentication/index.md): Read through the authentication -methods available in GitLab. + methods available in GitLab. - [Permissions](permissions.md): Learn the different set of permissions levels for each -user type (guest, reporter, developer, maintainer, owner). + user type (guest, reporter, developer, maintainer, owner). - [Feature highlight](feature_highlight.md): Learn more about the little blue dots -around the app that explain certain features + around the app that explain certain features - [Abuse reports](abuse_reports.md): Report abuse from users to GitLab administrators ## Groups diff --git a/doc/user/profile/account/two_factor_authentication.md b/doc/user/profile/account/two_factor_authentication.md index 0a7c5832a2d..8e5fe4b0fb9 100644 --- a/doc/user/profile/account/two_factor_authentication.md +++ b/doc/user/profile/account/two_factor_authentication.md @@ -41,7 +41,7 @@ or a U2F device. **On your phone:** 1. Install a compatible application. We recommend [Google Authenticator] -\(proprietary\) or [FreeOTP] \(open source\). + \(proprietary\) or [FreeOTP] \(open source\). 1. In the application, add a new entry in one of two ways: - Scan the code with your phone's camera to add the entry automatically. - Enter the details provided to add the entry manually. diff --git a/doc/user/profile/index.md b/doc/user/profile/index.md index ba756c4b793..a2b15d058d7 100644 --- a/doc/user/profile/index.md +++ b/doc/user/profile/index.md @@ -35,13 +35,13 @@ From there, you can: - Manage [2FA](account/two_factor_authentication.md) - Change your username and [delete your account](account/delete_account.md) - Manage applications that can -[use GitLab as an OAuth provider](../../integration/oauth_provider.md#introduction-to-oauth) + [use GitLab as an OAuth provider](../../integration/oauth_provider.md#introduction-to-oauth) - Manage [personal access tokens](personal_access_tokens.md) to access your account via API and authorized applications - Add and delete emails linked to your account - Choose which email to use for notifications, web-based commits, and display on your public profile - Manage [SSH keys](../../ssh/README.md#ssh) to access your account via SSH - Manage your [preferences](preferences.md#syntax-highlighting-theme) -to customize your own GitLab experience + to customize your own GitLab experience - [View your active sessions](active_sessions.md) and revoke any of them if necessary - Access your audit log, a security log of important events involving your account diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md index 42aa6840609..e601d7b2ccc 100644 --- a/doc/user/project/clusters/index.md +++ b/doc/user/project/clusters/index.md @@ -86,15 +86,20 @@ To add an existing Kubernetes cluster to your project: 1. Click **Add Kubernetes cluster**. 1. Click **Add an existing Kubernetes cluster** and fill in the details: - **Kubernetes cluster name** (required) - The name you wish to give the cluster. - - **Environment scope** (required)- The + - **Environment scope** (required) - The [associated environment](#setting-the-environment-scope) to this cluster. - **API URL** (required) - It's the URL that GitLab uses to access the Kubernetes API. Kubernetes exposes several APIs, we want the "base" URL that is common to all of them, e.g., `https://kubernetes.example.com` rather than `https://kubernetes.example.com/api/v1`. - - **CA certificate** (optional) - - If the API is using a self-signed TLS certificate, you'll also need to include - the `ca.crt` contents here. + - **CA certificate** (required) - A valid Kubernetes certificate is needed to authenticate to the EKS cluster. We will use the certificate created by default. + - List the secrets with `kubectl get secrets`, and one should named similar to + `default-token-xxxxx`. Copy that token name for use below. + - Get the certificate by running this command: + + ```sh + kubectl get secret <secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode + ``` - **Token** - GitLab authenticates against Kubernetes using service tokens, which are scoped to a particular `namespace`. @@ -102,36 +107,81 @@ To add an existing Kubernetes cluster to your project: [`cluster-admin`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) privileges.** To create this service account: - 1. Create a `gitlab` service account in the `default` namespace: + 1. Create a file called `gitlab-admin-service-account.yaml` with contents: - ```bash - kubectl create -f - <<EOF - apiVersion: v1 - kind: ServiceAccount - metadata: - name: gitlab - namespace: default - EOF + ```yaml + apiVersion: v1 + kind: ServiceAccount + metadata: + name: gitlab-admin + namespace: kube-system ``` - 1. Create a cluster role binding to give the `gitlab` service account - `cluster-admin` privileges: + + 2. Apply the service account to your cluster: ```bash - kubectl create -f - <<EOF + kubectl apply -f gitlab-admin-service-account.yaml + ``` + + Output: + + ```bash + serviceaccount "gitlab-admin" created + ``` + + 3. Create a file called `gitlab-admin-cluster-role-binding.yaml` with contents: + + ```yaml + apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding - apiVersion: rbac.authorization.k8s.io/v1 metadata: - name: gitlab-cluster-admin - subjects: - - kind: ServiceAccount - name: gitlab - namespace: default + name: gitlab-admin roleRef: + apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin - apiGroup: rbac.authorization.k8s.io - EOF + subjects: + - kind: ServiceAccount + name: gitlab-admin + namespace: kube-system + ``` + + 4. Apply the cluster role binding to your cluster: + + ```bash + kubectl apply -f gitlab-admin-cluster-role-binding.yaml + ``` + + Output: + + ```bash + clusterrolebinding "gitlab-admin" created ``` + + 5. Retrieve the token for the `gitlab-admin` service account: + + ```bash + kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}') + ``` + + Copy the `<authentication_token>` value from the output: + + ```yaml + Name: gitlab-admin-token-b5zv4 + Namespace: kube-system + Labels: <none> + Annotations: kubernetes.io/service-account.name=gitlab-admin + kubernetes.io/service-account.uid=bcfe66ac-39be-11e8-97e8-026dce96b6e8 + + Type: kubernetes.io/service-account-token + + Data + ==== + ca.crt: 1025 bytes + namespace: 11 bytes + token: <authentication_token> + ``` + NOTE: **Note:** For GKE clusters, you will need the `container.clusterRoleBindings.create` permission to create a cluster diff --git a/doc/user/project/clusters/runbooks/index.md b/doc/user/project/clusters/runbooks/index.md index e1b8dc07b50..512a4cb32f4 100644 --- a/doc/user/project/clusters/runbooks/index.md +++ b/doc/user/project/clusters/runbooks/index.md @@ -23,7 +23,7 @@ runbooks. A sample runbook is provided, showcasing common operations. **<i class="fa fa-youtube-play youtube" aria-hidden="true"></i> Watch this [video](https://www.youtube.com/watch?v=Q_OqHIIUPjE) -for an overview of how this is acomplished in GitLab!** +for an overview of how this is accomplished in GitLab!** ## Requirements diff --git a/doc/user/project/clusters/serverless/img/app-domain.png b/doc/user/project/clusters/serverless/img/app-domain.png Binary files differdeleted file mode 100644 index d113dfadd2e..00000000000 --- a/doc/user/project/clusters/serverless/img/app-domain.png +++ /dev/null diff --git a/doc/user/project/clusters/serverless/img/dns-entry.png b/doc/user/project/clusters/serverless/img/dns-entry.png Binary files differindex 678743f256e..351e40b77d5 100644 --- a/doc/user/project/clusters/serverless/img/dns-entry.png +++ b/doc/user/project/clusters/serverless/img/dns-entry.png diff --git a/doc/user/project/clusters/serverless/img/install-knative.png b/doc/user/project/clusters/serverless/img/install-knative.png Binary files differindex 93b1cbe602f..ecc2f8fb481 100644 --- a/doc/user/project/clusters/serverless/img/install-knative.png +++ b/doc/user/project/clusters/serverless/img/install-knative.png diff --git a/doc/user/project/clusters/serverless/img/serverless-page.png b/doc/user/project/clusters/serverless/img/serverless-page.png Binary files differindex 814b8532205..a872fda7740 100644 --- a/doc/user/project/clusters/serverless/img/serverless-page.png +++ b/doc/user/project/clusters/serverless/img/serverless-page.png diff --git a/doc/user/project/clusters/serverless/index.md b/doc/user/project/clusters/serverless/index.md index fc3a4a757d0..f7e72efa2ba 100644 --- a/doc/user/project/clusters/serverless/index.md +++ b/doc/user/project/clusters/serverless/index.md @@ -25,8 +25,12 @@ To run Knative on Gitlab, you will need: 1. **Kubernetes Cluster:** An RBAC-enabled Kubernetes cluster is required to deploy Knative. The simplest way to get started is to add a cluster using [GitLab's GKE integration](../index.md#adding-and-creating-a-new-gke-cluster-via-gitlab). + The set of minimum recommended cluster specifications to run Knative is 3 nodes, 6 vCPUs, and 22.50 GB memory. 1. **Helm Tiller:** Helm is a package manager for Kubernetes and is required to install Knative. +1. **GitLab Runner:** A runner is required to run the CI jobs that will deploy serverless + applications or functions onto your cluster. You can install the GitLab Runner + onto the existing Kubernetes cluster. See [Installing Applications](../index.md#installing-applications) for more information. 1. **Domain Name:** Knative will provide its own load balancer using Istio. It will provide an external IP address for all the applications served by Knative. You will be prompted to enter a wildcard domain where your applications will be served. Configure your DNS server to use the @@ -45,9 +49,9 @@ To run Knative on Gitlab, you will need: NOTE: **Note:** The minimum recommended cluster size to run Knative is 3-nodes, 6 vCPUs, and 22.50 GB memory. **RBAC must be enabled.** -1. [Add a Kubernetes cluster](../index.md) and install Helm. -1. Once Helm has been successfully installed, on the Knative app section, enter the domain to be used with - your application and click "Install". +1. [Add a Kubernetes cluster](../index.md) and [install Helm](../index.md#installing-applications). +1. Once Helm has been successfully installed, scroll down to the Knative app section. Enter the domain to be used with + your application/functions (e.g. `example.com`) and click **Install**. ![install-knative](img/install-knative.png) @@ -66,12 +70,16 @@ The minimum recommended cluster size to run Knative is 3-nodes, 6 vCPUs, and 22. 1. The ingress is now available at this address and will route incoming requests to the proper service based on the DNS name in the request. To support this, a wildcard DNS A record should be created for the desired domain name. For example, - if your Knative base domain is `knative.info` then you need to create an A record with domain `*.knative.info` + if your Knative base domain is `example.com` then you need to create an A record with domain `*.example.com` pointing the ip address of the ingress. ![dns entry](img/dns-entry.png) -## Deploying Functions +NOTE: **Note:** +You can deploy either [functions](#deploying-functions) or [serverless applications](#deploying-serverless-applications) +on a given project but not both. The current implementation makes use of a `serverless.yml` file to signal a FaaS project. + +## Deploying functions > Introduced in GitLab 11.6. @@ -84,7 +92,7 @@ Currently the following [runtimes](https://gitlab.com/triggermesh/runtimes) are - node.js - kaniko -You can find all the files referenced in this doc in the [functions example project](https://gitlab.com/knative-examples/functions). +You can find and import all the files referenced in this doc in the **[functions example project](https://gitlab.com/knative-examples/functions)**. Follow these steps to deploy a function using the Node.js runtime to your Knative instance: @@ -188,16 +196,27 @@ The function details can be retrieved directly from Knative on the cluster: kubectl -n "$KUBE_NAMESPACE" get services.serving.knative.dev ``` -The sample function can now be triggered from any HTTP client using a simple `POST` call. +The sample function can now be triggered from any HTTP client using a simple `POST` call: + + 1. Using curl -![function exection](img/function-execution.png) + ```bash + curl \ + --header "Content-Type: application/json" \ + --request POST \ + --data '{"GitLab":"FaaS"}' \ + http://functions-echo.functions-1.functions.example.net/ + ``` + 2. Using a web-based tool (ie. postman, restlet, etc) + + ![function execution](img/function-execution.png) ## Deploying Serverless applications > Introduced in GitLab 11.5. NOTE: **Note:** -You can reference the sample [Knative Ruby App](https://gitlab.com/knative-examples/knative-ruby-app) to get started. +You can reference and import the sample [Knative Ruby App](https://gitlab.com/knative-examples/knative-ruby-app) to get started. Add the following `.gitlab-ci.yml` to the root of your repository (you may skip this step if using the sample [Knative Ruby App](https://gitlab.com/knative-examples/knative-ruby-app) mentioned above): @@ -236,11 +255,7 @@ With all the pieces in place, the next time a CI pipeline runs, the Knative appl ### Obtain the URL for the Knative deployment -Go to the **Operations > Serverless** page to find the URL for your deployment in the **Domain** column. - -![app domain](img/app-domain.png) - -Alternatively, use the CI/CD deployment job output to obtain the deployment URL. Once all the stages of the pipeline finish, click the **deploy** stage. +Go to the **CI/CD > Pipelines** and click on the pipeline that deployed your app. Once all the stages of the pipeline finish, click the **deploy** stage. ![deploy stage](img/deploy-stage.png) @@ -262,7 +277,7 @@ registry.staging.gitlab.com/danielgruesso/knative $ tm -n "$KUBE_NAMESPACE" --config "$KUBECONFIG" deploy service "$CI_PROJECT_NAME" --from-image "$CI_REGISTRY_IMAGE" --wait Deployment started. Run "tm -n knative-4342902 describe service knative" to see the details Waiting for ready state....... -Service domain: knative.knative-4342902.knative.info +Service domain: knative.knative-4342902.example.com Job succeeded ``` diff --git a/doc/user/project/cycle_analytics.md b/doc/user/project/cycle_analytics.md index 529a82ded9e..05127b274e0 100644 --- a/doc/user/project/cycle_analytics.md +++ b/doc/user/project/cycle_analytics.md @@ -80,6 +80,7 @@ Here's a little explanation of how this works behind the scenes: To sum up, anything that doesn't follow the [GitLab flow] won't be tracked at all. So, the Cycle Analytics dashboard won't present any data: + - For merge requests that do not close an issue. - For issues not labeled with a label present in the Issue Board. - For issues not assigned a milestone. diff --git a/doc/user/project/import/bitbucket_server.md b/doc/user/project/import/bitbucket_server.md index ebf87890cfd..d51a0c0ccca 100644 --- a/doc/user/project/import/bitbucket_server.md +++ b/doc/user/project/import/bitbucket_server.md @@ -22,14 +22,14 @@ Import your projects from Bitbucket Server to GitLab with minimal effort. ## Limitations 1. Currently GitLab doesn't allow comments on arbitrary lines of code, so any -Bitbucket comments out of bounds will be inserted as comments in the merge -request. + Bitbucket comments out of bounds will be inserted as comments in the merge + request. 1. Bitbucket Server allows multiple levels of threading. GitLab -import will collapse this into one discussion and quote part of the original -comment. + import will collapse this into one discussion and quote part of the original + comment. 1. Declined pull requests have unreachable commits, which prevents the GitLab -importer from generating a proper diff. These pull requests will show up as -empty changes. + importer from generating a proper diff. These pull requests will show up as + empty changes. 1. Attachments in Markdown are currently not imported. 1. Task lists are not imported. 1. Emoji reactions are not imported diff --git a/doc/user/project/import/fogbugz.md b/doc/user/project/import/fogbugz.md index 17222c53675..13409c93929 100644 --- a/doc/user/project/import/fogbugz.md +++ b/doc/user/project/import/fogbugz.md @@ -23,6 +23,6 @@ users to GitLab users. ![Import Project](img/fogbugz_import_select_project.png) 1. Once the import has finished click the link to take you to the project -dashboard. Follow the directions to push your existing repository. + dashboard. Follow the directions to push your existing repository. ![Finished](img/fogbugz_import_finished.png) diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md index cf99dded5e2..63b90dd76fd 100644 --- a/doc/user/project/import/github.md +++ b/doc/user/project/import/github.md @@ -67,7 +67,7 @@ developer documentation. Before you begin, ensure that any GitHub users who you want to map to GitLab users have either: - A GitLab account that has logged in using the GitHub icon -\- or - + \- or - - A GitLab account with an email address that matches the [public email address](https://help.github.com/articles/setting-your-commit-email-address-on-github/) of the GitHub user User-matching attempts occur in that order, and if a user is not identified either way, the activity is associated with diff --git a/doc/user/project/index.md b/doc/user/project/index.md index 6a1aadf058e..c62de41c539 100644 --- a/doc/user/project/index.md +++ b/doc/user/project/index.md @@ -19,7 +19,7 @@ When you create a project in GitLab, you'll have access to a large number of - [Issue Boards](issue_board.md): Organize and prioritize your workflow - [Multiple Issue Boards](https://docs.gitlab.com/ee/user/project/issue_board.html#multiple-issue-boards): Allow your teams to create their own workflows (Issue Boards) for the same project **[STARTER]** - [Repositories](repository/index.md): Host your code in a fully -integrated platform + integrated platform - [Branches](repository/branches/index.md): use Git branching strategies to collaborate on code - [Protected branches](protected_branches.md): Prevent collaborators @@ -29,7 +29,7 @@ integrated platform - [Signing commits](gpg_signed_commits/index.md): use GPG to sign your commits - [Deploy tokens](deploy_tokens/index.md): Manage project-based deploy tokens that allow permanent access to the repository and Container Registry. - [Merge Requests](merge_requests/index.md): Apply your branching -strategy and get reviewed by your team + strategy and get reviewed by your team - [Merge Request Approvals](https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_approvals.html): Ask for approval before implementing a change **[STARTER]** - [Fix merge conflicts from the UI](merge_requests/resolve_conflicts.md): @@ -38,13 +38,13 @@ strategy and get reviewed by your team of the changes proposed in a merge request in a per-branch basis - [Labels](labels.md): Organize issues and merge requests by labels - [Time Tracking](../../workflow/time_tracking.md): Track estimate time -and time spent on + and time spent on the conclusion of an issue or merge request - [Milestones](milestones/index.md): Work towards a target date - [Description templates](description_templates.md): Define context-specific -templates for issue and merge request description fields for your project + templates for issue and merge request description fields for your project - [Slash commands (quick actions)](quick_actions.md): Textual shortcuts for -common actions on issues or merge requests + common actions on issues or merge requests - [Web IDE](web_ide/index.md) **GitLab CI/CD:** @@ -68,7 +68,7 @@ common actions on issues or merge requests - [Kubernetes cluster integration](clusters/index.md): Connecting your GitLab project with a Kubernetes cluster - [GitLab Pages](pages/index.md): Build, test, and deploy your static -website with GitLab Pages + website with GitLab Pages **Other features:** @@ -76,11 +76,11 @@ website with GitLab Pages - [Snippets](../snippets.md): store, share and collaborate on code snippets. - [Cycle Analytics](cycle_analytics.md): review your development lifecycle. - [Syntax highlighting](highlighting.md): an alternative to customize -your code blocks, overriding GitLab's default choice of language. + your code blocks, overriding GitLab's default choice of language. - [Badges](badges.md): badges for the project overview. - [Releases](releases/index.md): a way to track deliverables in your project as snapshot in time of -the source, build output, and other metadata or artifacts -associated with a released version of your code. + the source, build output, and other metadata or artifacts + associated with a released version of your code. ### Project's integrations @@ -96,7 +96,7 @@ Learn how to [create a new project](../../gitlab-basics/create-project.md) in Gi You can [fork a project](../../gitlab-basics/fork-project.md) in order to: - Collaborate on code by forking a project and creating a merge request -from your fork to the upstream project + from your fork to the upstream project - Fork a sample project to work on the top of that ## Project settings diff --git a/doc/user/project/integrations/irker.md b/doc/user/project/integrations/irker.md index f220fa8497a..4fb753d1707 100644 --- a/doc/user/project/integrations/irker.md +++ b/doc/user/project/integrations/irker.md @@ -30,12 +30,12 @@ need to follow the firsts steps of the next section. 1. Click "Irker". 1. Select the "Active" checkbox. 1. Enter the server host address where `irkerd` runs (defaults to `localhost`) -in the `Server host` field on the Web page + in the `Server host` field on the Web page 1. Enter the server port of `irkerd` (e.g. defaults to 6659) in the -`Server port` field on the Web page. + `Server port` field on the Web page. 1. Optional: if `Default IRC URI` is set, it has to be in the format -`irc[s]://domain.name` and will be prepend to each and every channel provided -by the user which is not a full URI. + `irc[s]://domain.name` and will be prepend to each and every channel provided + by the user which is not a full URI. 1. Specify the recipients (e.g. #channel1, user1, etc.) 1. Save or optionally click "Test Settings". diff --git a/doc/user/project/integrations/redmine.md b/doc/user/project/integrations/redmine.md index 76a2617125e..8112aa21859 100644 --- a/doc/user/project/integrations/redmine.md +++ b/doc/user/project/integrations/redmine.md @@ -1,9 +1,9 @@ # Redmine Service 1. To enable the Redmine integration in a project, navigate to the -[Integrations page](project_services.md#accessing-the-project-services), click -the **Redmine** service, and fill in the required details on the page as described -in the table below. + [Integrations page](project_services.md#accessing-the-project-services), click + the **Redmine** service, and fill in the required details on the page as described + in the table below. | Field | Description | | ----- | ----------- | diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md index cbf08a4f30a..c3fc6d4b859 100644 --- a/doc/user/project/integrations/webhooks.md +++ b/doc/user/project/integrations/webhooks.md @@ -48,9 +48,9 @@ Navigate to the webhooks page by going to your project's ## Use-cases - You can set up a webhook in GitLab to send a notification to -[Slack](https://api.slack.com/incoming-webhooks) every time a build fails, for example + [Slack](https://api.slack.com/incoming-webhooks) every time a build fails, for example - You can [integrate with Twilio to be notified via SMS](https://www.datadoghq.com/blog/send-alerts-sms-customizable-webhooks-twilio/) -every time an issue is created for a specific project or group within GitLab + every time an issue is created for a specific project or group within GitLab - You can use them to [automatically assign labels to merge requests](https://about.gitlab.com/2016/08/19/applying-gitlab-labels-automatically/). ## Webhook endpoint tips diff --git a/doc/user/project/issue_board.md b/doc/user/project/issue_board.md index 7962eeada5c..0bd565547c3 100644 --- a/doc/user/project/issue_board.md +++ b/doc/user/project/issue_board.md @@ -78,9 +78,9 @@ with labels, and from there organize and prioritize them with Issue Boards. For example, let's consider this simplified development workflow: 1. You have a repository hosting your app's codebase -and your team actively contributing to code + and your team actively contributing to code 1. Your **backend** team starts working a new -implementation, gathers feedback and approval, and pass it over to **frontend** + implementation, gathers feedback and approval, and pass it over to **frontend** 1. When frontend is complete, the new feature is deployed to **staging** to be tested 1. When successful, it is deployed to **production** @@ -88,7 +88,7 @@ If we have the labels "**backend**", "**frontend**", "**staging**", and "**production**", and an Issue Board with a list for each, we can: - Visualize the entire flow of implementations since the -beginning of the development lifecycle until deployed to production + beginning of the development lifecycle until deployed to production - Prioritize the issues in a list by moving them vertically - Move issues between lists to organize them according to the labels you've set - Add multiple issues to lists in the board by selecting one or more existing issues @@ -177,7 +177,7 @@ menu from where you can create another Issue Board and rename or delete the existing one. Using the search box at the top of the menu, you can filter the listed boards. -When you're revisiting an issue board in a project or group with multiple boards, +When you're revisiting an issue board in a project or group with multiple boards, GitLab will automatically load the last board you visited. NOTE: **Note:** @@ -234,7 +234,7 @@ group-level objects are available. NOTE: **Note:** Multiple group issue boards were originally introduced in [GitLab 10.0 Premium](https://about.gitlab.com/2017/09/22/gitlab-10-0-released/#group-issue-boards) and -one group issue board per group was made available in GitLab 10.6 Core. +one group issue board per group was made available in GitLab 10.6 Core. ![Group issue board](img/group_issue_board.png) diff --git a/doc/user/project/issues/automatic_issue_closing.md b/doc/user/project/issues/automatic_issue_closing.md index afb7d9ada5f..c3e06b219ff 100644 --- a/doc/user/project/issues/automatic_issue_closing.md +++ b/doc/user/project/issues/automatic_issue_closing.md @@ -1,6 +1,7 @@ # Automatic issue closing >**Notes:** +> > - This is the user docs. In order to change the default issue closing pattern, > follow the steps in the [administration docs]. > - For performance reasons, automatic issue closing is disabled for the very diff --git a/doc/user/project/issues/create_new_issue.md b/doc/user/project/issues/create_new_issue.md index 2bf4fa287e9..40040e44d64 100644 --- a/doc/user/project/issues/create_new_issue.md +++ b/doc/user/project/issues/create_new_issue.md @@ -79,6 +79,6 @@ in the same URL (since a description template just populates the description fie Follow these examples to form your new issue URL with prefilled fields. - For a new issue in the GitLab Community Edition project with a pre-entered title -and a pre-entered description, the URL would be `https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issue[title]=Validate%20new%20concept&issue[description]=Research%20idea` + and a pre-entered description, the URL would be `https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issue[title]=Validate%20new%20concept&issue[description]=Research%20idea` - For a new issue in the GitLab Community Edition project with a pre-entered title -and a pre-entered description template, the URL would be `https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issue[title]=Validate%20new%20concept&issuable_template=Research%20proposal` + and a pre-entered description template, the URL would be `https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issue[title]=Validate%20new%20concept&issuable_template=Research%20proposal` diff --git a/doc/user/project/issues/due_dates.md b/doc/user/project/issues/due_dates.md index 93306437c6c..7972c14c1c4 100644 --- a/doc/user/project/issues/due_dates.md +++ b/doc/user/project/issues/due_dates.md @@ -42,6 +42,7 @@ server's timezone. Issues with due dates can also be exported as an iCalendar feed. The URL of the feed can be added to calendar applications. The feed is accessible by clicking on the _Subscribe to calendar_ button on the following pages: + - on the **Assigned Issues** page that is linked on the right-hand side of the GitLab header - on the **Project Issues** page diff --git a/doc/user/project/issues/issues_functionalities.md b/doc/user/project/issues/issues_functionalities.md index e4a3ff52e07..27b9dc51760 100644 --- a/doc/user/project/issues/issues_functionalities.md +++ b/doc/user/project/issues/issues_functionalities.md @@ -99,16 +99,16 @@ Learn more in the [Issue Weight documentation](https://docs.gitlab.com/ee/workfl #### 10. Notifications - Subscribe: if you are not a participant of the discussion on that issue, but -want to receive notifications on each new input, subscribe to it. + want to receive notifications on each new input, subscribe to it. - Unsubscribe: if you are receiving notifications on that issue but no -longer want to receive them, unsubscribe from it. + longer want to receive them, unsubscribe from it. Read more in the [notifications documentation](../../../workflow/notifications.md#issue--merge-request-events). #### 11. Reference - A quick "copy to clipboard" button for that issue's reference, `foo/bar#xxx`, where `foo` is the `username` or `groupname`, `bar` -is the `project-name`, and `xxx` is the issue number. + is the `project-name`, and `xxx` is the issue number. #### 12. Title and description @@ -138,7 +138,7 @@ interpreted as spam. #### 14. Related Merge Requests - Any merge requests mentioned in that issue's description -or in the issue discussion thread. + or in the issue discussion thread. #### 15. Award emoji @@ -152,8 +152,8 @@ know you like it without spamming them. #### 16. Thread - Comments: collaborate to that issue by posting comments in its thread. -These text fields also fully support -[GitLab Flavored Markdown](../../markdown.md#gitlab-flavored-markdown-gfm). + These text fields also fully support + [GitLab Flavored Markdown](../../markdown.md#gitlab-flavored-markdown-gfm). #### 17. Comment, start a discussion, or comment and close @@ -166,7 +166,7 @@ Once you write a comment, you can either: #### 18. New Merge Request - Create a new merge request (with a new source branch named after the issue) in one action. -The merge request will automatically inherit the milestone and labels of the issue. The merge -request will automatically close that issue when it is merged. + The merge request will automatically inherit the milestone and labels of the issue. The merge + request will automatically close that issue when it is merged. - Optionally, you can just create a [new branch](../repository/web_editor.md#create-a-new-branch-from-an-issue) -named after that issue. + named after that issue. diff --git a/doc/user/project/operations/error_tracking.md b/doc/user/project/operations/error_tracking.md index 90bb92d2062..41aa5b91aa7 100644 --- a/doc/user/project/operations/error_tracking.md +++ b/doc/user/project/operations/error_tracking.md @@ -21,7 +21,7 @@ GitLab provides an easy way to connect Sentry to your project: 1. Sign up to Sentry.io or [deploy your own](#deploying-sentry) Sentry instance. 1. [Find or generate](https://docs.sentry.io/api/auth/) a Sentry auth token for your Sentry project. -Make sure to give the token at least the following scopes: `event:read` and `project:read`. + Make sure to give the token at least the following scopes: `event:read` and `project:read`. 1. Navigate to your project’s **Settings > Operations** and provide the Sentry API URL and auth token. 1. Ensure that the 'Active' checkbox is set. 1. Click **Save changes** for the changes to take effect. diff --git a/doc/user/project/pages/getting_started_part_four.md b/doc/user/project/pages/getting_started_part_four.md index e4ee2f7cdfa..05d5a2fd99a 100644 --- a/doc/user/project/pages/getting_started_part_four.md +++ b/doc/user/project/pages/getting_started_part_four.md @@ -376,11 +376,11 @@ manually in the past. Read through the to understand how to go even further on your scripts. - On this blog post, understand the concept of -[using GitLab CI `environments` to deploy your -web app to staging and production](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/). + [using GitLab CI `environments` to deploy your + web app to staging and production](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/). - On this post, learn [how to run jobs sequentially, -in parallel, or build a custom pipeline](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/) + in parallel, or build a custom pipeline](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/) - On this blog post, we go through the process of -[pulling specific directories from different projects](https://about.gitlab.com/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/) -to deploy this website you're looking at, docs.gitlab.com. + [pulling specific directories from different projects](https://about.gitlab.com/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/) + to deploy this website you're looking at, docs.gitlab.com. - On this blog post, we teach you [how to use GitLab Pages to produce a code coverage report](https://about.gitlab.com/2016/11/03/publish-code-coverage-report-with-gitlab-pages/). diff --git a/doc/user/project/pages/getting_started_part_one.md b/doc/user/project/pages/getting_started_part_one.md index 595241b2cba..9a95fb70964 100644 --- a/doc/user/project/pages/getting_started_part_one.md +++ b/doc/user/project/pages/getting_started_part_one.md @@ -77,41 +77,41 @@ Learn more about [namespaces](../../group/index.md#namespaces). #### Project Websites - You created a project called `blog` under your username `john`, -therefore your project URL is `https://gitlab.com/john/blog/`. -Once you enable GitLab Pages for this project, and build your site, -it will be available under `https://john.gitlab.io/blog/`. + therefore your project URL is `https://gitlab.com/john/blog/`. + Once you enable GitLab Pages for this project, and build your site, + it will be available under `https://john.gitlab.io/blog/`. - You created a group for all your websites called `websites`, -and a project within this group is called `blog`. Your project -URL is `https://gitlab.com/websites/blog/`. Once you enable -GitLab Pages for this project, the site will live under -`https://websites.gitlab.io/blog/`. + and a project within this group is called `blog`. Your project + URL is `https://gitlab.com/websites/blog/`. Once you enable + GitLab Pages for this project, the site will live under + `https://websites.gitlab.io/blog/`. - You created a group for your engineering department called `engineering`, -a subgroup for all your documentation websites called `docs`, -and a project within this subgroup is called `workflows`. Your project -URL is `https://gitlab.com/engineering/docs/workflows/`. Once you enable -GitLab Pages for this project, the site will live under -`https://engineering.gitlab.io/docs/workflows`. + a subgroup for all your documentation websites called `docs`, + and a project within this subgroup is called `workflows`. Your project + URL is `https://gitlab.com/engineering/docs/workflows/`. Once you enable + GitLab Pages for this project, the site will live under + `https://engineering.gitlab.io/docs/workflows`. #### User and Group Websites - Under your username, `john`, you created a project called -`john.gitlab.io`. Your project URL will be `https://gitlab.com/john/john.gitlab.io`. -Once you enable GitLab Pages for your project, your website -will be published under `https://john.gitlab.io`. + `john.gitlab.io`. Your project URL will be `https://gitlab.com/john/john.gitlab.io`. + Once you enable GitLab Pages for your project, your website + will be published under `https://john.gitlab.io`. - Under your group `websites`, you created a project called -`websites.gitlab.io`. your project's URL will be `https://gitlab.com/websites/websites.gitlab.io`. -Once you enable GitLab Pages for your project, -your website will be published under `https://websites.gitlab.io`. + `websites.gitlab.io`. your project's URL will be `https://gitlab.com/websites/websites.gitlab.io`. + Once you enable GitLab Pages for your project, + your website will be published under `https://websites.gitlab.io`. > Support for subgroup project's websites was [introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/30548) in GitLab 11.8. **General example:** - On GitLab.com, a project site will always be available under -`https://namespace.gitlab.io/project-name` + `https://namespace.gitlab.io/project-name` - On GitLab.com, a user or group website will be available under -`https://namespace.gitlab.io/` + `https://namespace.gitlab.io/` - On your GitLab instance, replace `gitlab.io` above with your -Pages server domain. Ask your sysadmin for this information. + Pages server domain. Ask your sysadmin for this information. _Read on about [Projects for GitLab Pages and URL structure](getting_started_part_two.md)._ diff --git a/doc/user/project/pages/getting_started_part_three.md b/doc/user/project/pages/getting_started_part_three.md index b2da1c85c62..daae2f4b5a3 100644 --- a/doc/user/project/pages/getting_started_part_three.md +++ b/doc/user/project/pages/getting_started_part_three.md @@ -19,7 +19,7 @@ To use one or more custom domain with your Pages site, there are two things you should consider first, which we'll cover in this guide: 1. Either if you're adding a **root domain** or a **subdomain**, for which -you'll need to set up [DNS records](#dns-records) + you'll need to set up [DNS records](#dns-records) 1. Whether you want to add an [SSL/TLS certificate](#ssl-tls-certificates) or not To finish the association, you need to [add your domain to your project's Pages settings](#add-your-custom-domain-to-gitlab-pages-settings). @@ -136,13 +136,13 @@ verify your domain's ownership with a TXT record: > **Notes**: > > - **Do not** use a CNAME record if you want to point your -`domain.com` to your GitLab Pages site. Use an `A` record instead. + `domain.com` to your GitLab Pages site. Use an `A` record instead. > - **Do not** add any special chars after the default Pages -domain. E.g., **do not** point your `subdomain.domain.com` to -`namespace.gitlab.io.` or `namespace.gitlab.io/`. + domain. E.g., **do not** point your `subdomain.domain.com` to + `namespace.gitlab.io.` or `namespace.gitlab.io/`. > - GitLab Pages IP on GitLab.com [was changed](https://about.gitlab.com/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/) in 2017 > - GitLab Pages IP on GitLab.com [has been changed](https://about.gitlab.com/2018/07/19/gcp-move-update/#gitlab-pages-and-custom-domains) -from `52.167.214.135` to `35.185.44.232` in 2018 + from `52.167.214.135` to `35.185.44.232` in 2018 ### Add your custom domain to GitLab Pages settings @@ -278,15 +278,15 @@ These fields are found under your **Project**'s **Settings** > **Pages** > **New ### What's what? - A PEM certificate is the certificate generated by the CA, -which needs to be added to the field **Certificate (PEM)**. + which needs to be added to the field **Certificate (PEM)**. - An [intermediate certificate](https://en.wikipedia.org/wiki/Intermediate_certificate_authority) (aka "root certificate") is -the part of the encryption keychain that identifies the CA. -Usually it's combined with the PEM certificate, but there are -some cases in which you need to add them manually. -[CloudFlare certs](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/) -are one of these cases. + the part of the encryption keychain that identifies the CA. + Usually it's combined with the PEM certificate, but there are + some cases in which you need to add them manually. + [CloudFlare certs](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/) + are one of these cases. - A private key is an encrypted key which validates -your PEM against your domain. + your PEM against your domain. ### Now what? @@ -295,9 +295,9 @@ of this, it's simple: - Your PEM certificate needs to be added to the first field - If your certificate is missing its intermediate, copy -and paste the root certificate (usually available from your CA website) -and paste it in the [same field as your PEM certificate](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/), -just jumping a line between them. + and paste the root certificate (usually available from your CA website) + and paste it in the [same field as your PEM certificate](https://about.gitlab.com/2017/02/07/setting-up-gitlab-pages-with-cloudflare-certificates/), + just jumping a line between them. - Copy your private key and paste it in the last field >**Note:** diff --git a/doc/user/project/pages/getting_started_part_two.md b/doc/user/project/pages/getting_started_part_two.md index c9081a6d72b..644a1c951d3 100644 --- a/doc/user/project/pages/getting_started_part_two.md +++ b/doc/user/project/pages/getting_started_part_two.md @@ -16,7 +16,7 @@ To get started with GitLab Pages, you need: 1. A project 1. A configuration file (`.gitlab-ci.yml`) to deploy your site 1. A specific `job` called `pages` in the configuration file -that will make GitLab aware that you are deploying a GitLab Pages website + that will make GitLab aware that you are deploying a GitLab Pages website 1. A `public` directory with the content of the website Optional Features: @@ -85,16 +85,16 @@ is useful for submitting merge requests to the upstream. ### Create a project from scratch 1. From your **Project**'s **[Dashboard](https://gitlab.com/dashboard/projects)**, -click **New project**, and name it considering the -[practical examples](getting_started_part_one.md#practical-examples). + click **New project**, and name it considering the + [practical examples](getting_started_part_one.md#practical-examples). 1. Clone it to your local computer, add your website -files to your project, add, commit and push to GitLab. + files to your project, add, commit and push to GitLab. 1. From the your **Project**'s page, click **Set up CI/CD**: ![setup GitLab CI/CD](img/setup_ci.png) 1. Choose one of the templates from the dropbox menu. -Pick up the template corresponding to the SSG you're using (or plain HTML). + Pick up the template corresponding to the SSG you're using (or plain HTML). ![gitlab-ci templates](img/choose_ci_template.png) @@ -107,20 +107,20 @@ where you'll find its default URL. > **Notes:** > > - GitLab Pages [supports any SSG](https://about.gitlab.com/2016/06/17/ssg-overview-gitlab-pages-part-3-examples-ci/), but, -if you don't find yours among the templates, you'll need -to configure your own `.gitlab-ci.yml`. To do that, please -read through the article [Creating and Tweaking GitLab CI/CD for GitLab Pages](getting_started_part_four.md). New SSGs are very welcome among -the [example projects](https://gitlab.com/pages). If you set -up a new one, please -[contribute](https://gitlab.com/pages/pages.gitlab.io/blob/master/CONTRIBUTING.md) -to our examples. + if you don't find yours among the templates, you'll need + to configure your own `.gitlab-ci.yml`. To do that, please + read through the article [Creating and Tweaking GitLab CI/CD for GitLab Pages](getting_started_part_four.md). New SSGs are very welcome among + the [example projects](https://gitlab.com/pages). If you set + up a new one, please + [contribute](https://gitlab.com/pages/pages.gitlab.io/blob/master/CONTRIBUTING.md) + to our examples. > > - The second step _"Clone it to your local computer"_, can be done -differently, achieving the same results: instead of cloning the bare -repository to you local computer and moving your site files into it, -you can run `git init` in your local website directory, add the -remote URL: `git remote add origin git@gitlab.com:namespace/project-name.git`, -then add, commit, and push. + differently, achieving the same results: instead of cloning the bare + repository to you local computer and moving your site files into it, + you can run `git init` in your local website directory, add the + remote URL: `git remote add origin git@gitlab.com:namespace/project-name.git`, + then add, commit, and push. ## URLs and Baseurls diff --git a/doc/user/project/pages/index.md b/doc/user/project/pages/index.md index 2de3fb7e080..e0b78753e21 100644 --- a/doc/user/project/pages/index.md +++ b/doc/user/project/pages/index.md @@ -91,13 +91,13 @@ site under the HTTPS protocol. ## Getting started -To get started with GitLab Pages, you can either [create a project from scratch](getting_started_part_two.md#create-a-project-from-scratch), +To get started with GitLab Pages, you can either [create a project from scratch](getting_started_part_two.md#create-a-project-from-scratch), use a [bundled template](getting_started_part_two.md#use-one-of-the-popular-pages-templates-bundled-with-gitlab), or copy any of our existing example projects: 1. Choose an [example project](https://gitlab.com/pages) to [fork](../../../gitlab-basics/fork-project.md#how-to-fork-a-project): by forking a project, you create a copy of the codebase you're forking from to start from a template instead of starting from scratch. 1. From the left sidebar, navigate to your project's **CI/CD > Pipelines** and click -**Run pipeline** so that GitLab CI/CD will build and deploy your site to the server. + **Run pipeline** so that GitLab CI/CD will build and deploy your site to the server. 1. Once the pipeline has finished successfully, find the link to visit your website from your project's **Settings > Pages**. @@ -164,7 +164,7 @@ with Pages, read through this series: ### GitLab Pages with SSL/TLS certificates -If you're using GitLab Pages default domain (`.gitlab.io`), your website will be +If you're using GitLab Pages default domain (`.gitlab.io`), your website will be automatically secure and available under HTTPS. If you're using your own domain, you can optionally secure it with SSL/TLS certificates. You can read the following tutorials to learn how to use these third-party certificates with GitLab Pages: diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md index fa65a206273..23eb88fd305 100644 --- a/doc/user/project/pages/introduction.md +++ b/doc/user/project/pages/introduction.md @@ -151,7 +151,7 @@ Depending on how you plan to publish your website, the steps defined in the Be aware that Pages are by default branch/tag agnostic and their deployment relies solely on what you specify in `.gitlab-ci.yml`. If you don't limit the -`pages` job with the [`only` parameter](../../../ci/yaml/README.md#only-and-except), +`pages` job with the [`only` parameter](../../../ci/yaml/README.md#only-and-except-simplified), whenever a new commit is pushed to whatever branch or tag, the Pages will be overwritten. In the example below, we limit the Pages to be deployed whenever a commit is pushed only on the `master` branch: @@ -252,7 +252,7 @@ get you started. Remember that GitLab Pages are by default branch/tag agnostic and their deployment relies solely on what you specify in `.gitlab-ci.yml`. You can limit -the `pages` job with the [`only` parameter](../../../ci/yaml/README.md#only-and-except), +the `pages` job with the [`only` parameter](../../../ci/yaml/README.md#only-and-except-simplified), whenever a new commit is pushed to a branch that will be used specifically for your pages. diff --git a/doc/user/project/pipelines/job_artifacts.md b/doc/user/project/pipelines/job_artifacts.md index 4ab66063dcf..bf939dbdaa3 100644 --- a/doc/user/project/pipelines/job_artifacts.md +++ b/doc/user/project/pipelines/job_artifacts.md @@ -195,5 +195,5 @@ artifacts and the job's trace. In order to retrieve a job artifact of a different project, you might need to use a private token in order to [authenticate and download](../../../api/jobs.md#get-job-artifacts) the artifacts. -[expiry date]: ../../../ci/yaml/README.md#artifacts-expire_in +[expiry date]: ../../../ci/yaml/README.md#artifactsexpire_in [ce-14399]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14399
\ No newline at end of file diff --git a/doc/user/project/pipelines/settings.md b/doc/user/project/pipelines/settings.md index cce330aecc7..4a989afad4d 100644 --- a/doc/user/project/pipelines/settings.md +++ b/doc/user/project/pipelines/settings.md @@ -23,7 +23,7 @@ in `.gitlab-ci.yml`. ## Timeout Timeout defines the maximum amount of time in minutes that a job is able run. -This is configureable under your project's **Settings > CI/CD > General pipelines settings**. +This is configurable under your project's **Settings > CI/CD > General pipelines settings**. The default value is 60 minutes. Decrease the time limit if you want to impose a hard limit on your jobs' running time or increase it otherwise. In any case, if the job surpasses the threshold, it is marked as failed. @@ -134,7 +134,7 @@ Depending on the status of your job, a badge can have the following values: You can access a pipeline status badge image using the following link: ```text -https://example.gitlab.com/<namespace>/<project>/badges/<branch>/build.svg +https://example.gitlab.com/<namespace>/<project>/badges/<branch>/pipeline.svg ``` ### Test coverage report badge diff --git a/doc/user/project/repository/index.md b/doc/user/project/repository/index.md index fac5975a0dc..22d912cd9d1 100644 --- a/doc/user/project/repository/index.md +++ b/doc/user/project/repository/index.md @@ -146,9 +146,9 @@ you are introducing those changes to your branch. Via command line, you can commit multiple times before pushing. - **Commit message:** -A commit message is important to identity what is being changed and, -more importantly, why. In GitLab, you can add keywords to the commit -message that will perform one of the actions below: + A commit message is important to identity what is being changed and, + more importantly, why. In GitLab, you can add keywords to the commit + message that will perform one of the actions below: - **Trigger a GitLab CI/CD pipeline:** If you have your project configured with [GitLab CI/CD](../../../ci/README.md), you will trigger a pipeline per push, not per commit. @@ -162,14 +162,14 @@ message that will perform one of the actions below: If you mention an issue or a merge request in a commit message, they will be shown on their respective thread. - **Cherry-pick a commit:** -In GitLab, you can -[cherry-pick a commit](../merge_requests/cherry_pick_changes.md#cherry-picking-a-commit) -right from the UI. + In GitLab, you can + [cherry-pick a commit](../merge_requests/cherry_pick_changes.md#cherry-picking-a-commit) + right from the UI. - **Revert a commit:** -Easily [revert a commit](../merge_requests/revert_changes.md#reverting-a-commit) -from the UI to a selected branch. + Easily [revert a commit](../merge_requests/revert_changes.md#reverting-a-commit) + from the UI to a selected branch. - **Sign a commit:** -Use GPG to [sign your commits](gpg_signed_commits/index.md). + Use GPG to [sign your commits](gpg_signed_commits/index.md). ## Repository size diff --git a/doc/user/project/web_ide/index.md b/doc/user/project/web_ide/index.md index 3e85e97d7a5..46a1b2bc3aa 100644 --- a/doc/user/project/web_ide/index.md +++ b/doc/user/project/web_ide/index.md @@ -24,21 +24,21 @@ file path fragments to start seeing results. ## Syntax highlighting -As expected from an IDE, syntax highlighting for many languages within +As expected from an IDE, syntax highlighting for many languages within the Web IDE will make your direct editing even easier. The Web IDE currently provides: -- Basic syntax colorization for a variety of programming, scripting and markup -languages such as XML, PHP, C#, C++, Markdown, Java, VB, Batch, Python, Ruby -and Objective-C. -- IntelliSense and validation support (displaying errors and warnings, providing -smart completions, formatting, and outlining) for some languages. For example: -TypeScript, JavaScript, CSS, LESS, SCSS, JSON and HTML. +- Basic syntax colorization for a variety of programming, scripting and markup + languages such as XML, PHP, C#, C++, Markdown, Java, VB, Batch, Python, Ruby + and Objective-C. +- IntelliSense and validation support (displaying errors and warnings, providing + smart completions, formatting, and outlining) for some languages. For example: +TypeScript, JavaScript, CSS, LESS, SCSS, JSON and HTML. -Because the Web IDE is based on the [Monaco Editor](https://microsoft.github.io/monaco-editor/), -you can find a more complete list of supported languages in the -[Monaco languages](https://github.com/Microsoft/monaco-languages) repository. +Because the Web IDE is based on the [Monaco Editor](https://microsoft.github.io/monaco-editor/), +you can find a more complete list of supported languages in the +[Monaco languages](https://github.com/Microsoft/monaco-languages) repository. NOTE: **Note:** Single file editing is based on the [Ace Editor](https://ace.c9.io). diff --git a/doc/user/reserved_names.md b/doc/user/reserved_names.md index a14df6c8402..9aa81e33fc0 100644 --- a/doc/user/reserved_names.md +++ b/doc/user/reserved_names.md @@ -5,6 +5,7 @@ existing routes used by GitLab. For a list of words that are not allowed to be used as group or project names, see the [`path_regex.rb` file][reserved] under the `TOP_LEVEL_ROUTES`, `PROJECT_WILDCARD_ROUTES` and `GROUP_ROUTES` lists: + - `TOP_LEVEL_ROUTES`: are names that are reserved as usernames or top level groups - `PROJECT_WILDCARD_ROUTES`: are names that are reserved for child groups or projects. - `GROUP_ROUTES`: are names that are reserved for all groups or projects. diff --git a/doc/workflow/time_tracking.md b/doc/workflow/time_tracking.md index ad43189148c..e60b6819bf1 100644 --- a/doc/workflow/time_tracking.md +++ b/doc/workflow/time_tracking.md @@ -11,7 +11,7 @@ Time Tracking lets you: - Record the time spent working on an issue or a merge request. - Add an estimate of the amount of time needed to complete an issue or a merge -request. + request. You don't have to indicate an estimate to enter the time spent, and vice versa. diff --git a/jest.config.js b/jest.config.js index fac2e435cef..3fa39dd7e8d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,11 +13,13 @@ if (process.env.CI) { // eslint-disable-next-line import/no-commonjs module.exports = { - testMatch: ['<rootDir>/spec/frontend/**/*_spec.js'], + testMatch: ['<rootDir>/spec/frontend/**/*_spec.js', '<rootDir>/ee/spec/frontend/**/*_spec.js'], moduleFileExtensions: ['js', 'json', 'vue'], moduleNameMapper: { '^~(.*)$': '<rootDir>/app/assets/javascripts$1', + '^ee(.*)$': '<rootDir>/ee/app/assets/javascripts$1', '^helpers(.*)$': '<rootDir>/spec/frontend/helpers$1', + '^vendor(.*)$': '<rootDir>/vendor/assets/javascripts$1', }, collectCoverageFrom: ['<rootDir>/app/assets/javascripts/**/*.{js,vue}'], coverageDirectory: '<rootDir>/coverage-frontend/', diff --git a/lib/api/api.rb b/lib/api/api.rb index 4dd1b459554..3bcf5150b43 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -115,6 +115,7 @@ module API mount ::API::GroupVariables mount ::API::ImportGithub mount ::API::Internal + mount ::API::IssuableBulkUpdate mount ::API::Issues mount ::API::JobArtifacts mount ::API::Jobs diff --git a/lib/api/helpers/runner.rb b/lib/api/helpers/runner.rb index 16df8e830e1..ff73a49d5e8 100644 --- a/lib/api/helpers/runner.rb +++ b/lib/api/helpers/runner.rb @@ -26,7 +26,7 @@ module API end def get_runner_ip - { ip_address: request.env["HTTP_X_FORWARDED_FOR"] || request.ip } + { ip_address: env["action_dispatch.remote_ip"].to_s || request.ip } end def current_runner diff --git a/lib/api/issuable_bulk_update.rb b/lib/api/issuable_bulk_update.rb new file mode 100644 index 00000000000..5ac6c252d96 --- /dev/null +++ b/lib/api/issuable_bulk_update.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +module API + class IssuableBulkUpdate < Grape::API + params do + requires :id, type: String, desc: 'The ID of a project' + end + resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do + %w(issue merge_request).each do |issuable| + desc "Updates a list of #{issuable.pluralize}" do + detail 'This feature was introduced in 11.9' + end + params do + requires :issuable_ids, type: Array[Integer], desc: "Array of #{issuable.pluralize} IDs to be updated" + optional :state_event, type: String, values: %w(reopen close), desc: 'Reopens or closes a resource' + optional :milestone_id, type: Integer, desc: 'The milestone ID number' + optional :add_label_ids, type: Array[Integer], desc: 'IDs of labels to be added' + optional :remove_label_ids, type: Array[Integer], desc: 'IDs of labels to be removed' + optional :subscription_event, type: String, values: %w(subscribe unsubscribe), + desc: 'Subscribes or unsubscribes from a resource' + + if issuable == 'issue' + optional :assignee_ids, type: Array[Integer], desc: 'List of assignee IDs' + at_least_one_of :state_event, :milestone_id, :add_label_ids, :remove_label_ids, + :subscription_event, :assignee_ids + else + optional :assignee_id, type: Integer, desc: 'ID of the assignee' + at_least_one_of :state_event, :milestone_id, :add_label_ids, :remove_label_ids, + :subscription_event, :assignee_id + end + end + put ":id/#{issuable.pluralize}/bulk_update" do + authorize! :"admin_#{issuable}", user_project + + update_params = declared_params(include_missing: false) + + result = Issuable::BulkUpdateService.new(user_project, current_user, update_params) + .execute(issuable) + + if result[:success] + status 200 + quantity = result[:count] + { message: "#{quantity} #{issuable.pluralize(quantity)} updated" } + else + render_api_error!('Bulk update failed', 400) + end + end + end + end + end +end diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 94ed9ac6fb1..f43f4d961d6 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -54,6 +54,7 @@ module API optional :scope, type: String, values: %w[created-by-me assigned-to-me created_by_me assigned_to_me all], desc: 'Return issues for the given scope: `created_by_me`, `assigned_to_me` or `all`' optional :my_reaction_emoji, type: String, desc: 'Return issues reacted by the authenticated user by the given emoji' + optional :confidential, type: Boolean, desc: 'Filter confidential or public issues' use :pagination use :issues_params_ee diff --git a/lib/api/project_templates.rb b/lib/api/project_templates.rb index d05ddad7466..119902a189c 100644 --- a/lib/api/project_templates.rb +++ b/lib/api/project_templates.rb @@ -36,7 +36,10 @@ module API optional :project, type: String, desc: 'The project name to use when expanding placeholders in the template. Only affects licenses' optional :fullname, type: String, desc: 'The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses' end - get ':id/templates/:type/:name', requirements: { name: /[\w\.-]+/ } do + # The regex is needed to ensure a period (e.g. agpl-3.0) + # isn't confused with a format type. We also need to allow encoded + # values (e.g. C%2B%2B for C++), so allow % and + as well. + get ':id/templates/:type/:name', requirements: { name: /[\w%.+-]+/ } do template = TemplateFinder .build(params[:type], user_project, name: params[:name]) .execute diff --git a/lib/banzai/filter/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb index 93e6d6470f1..2745905c5ff 100644 --- a/lib/banzai/filter/relative_link_filter.rb +++ b/lib/banzai/filter/relative_link_filter.rb @@ -150,7 +150,10 @@ module Banzai end def uri_type(path) - @uri_types[path] ||= current_commit.uri_type(path) + # https://gitlab.com/gitlab-org/gitlab-ce/issues/58011 + Gitlab::GitalyClient.allow_n_plus_1_calls do + @uri_types[path] ||= current_commit.uri_type(path) + end end def current_commit diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb index 0ab53f8f706..5aeedb0f50d 100644 --- a/lib/gitlab/gitaly_client.rb +++ b/lib/gitlab/gitaly_client.rb @@ -28,7 +28,7 @@ module Gitlab PEM_REGEX = /\-+BEGIN CERTIFICATE\-+.+?\-+END CERTIFICATE\-+/m SERVER_VERSION_FILE = 'GITALY_SERVER_VERSION' - MAXIMUM_GITALY_CALLS = 35 + MAXIMUM_GITALY_CALLS = 30 CLIENT_NAME = (Sidekiq.server? ? 'gitlab-sidekiq' : 'gitlab-web').freeze MUTEX = Mutex.new diff --git a/lib/gitlab/project_template.rb b/lib/gitlab/project_template.rb index ef656e5b2ce..45045cb8c7d 100644 --- a/lib/gitlab/project_template.rb +++ b/lib/gitlab/project_template.rb @@ -32,7 +32,12 @@ module Gitlab ProjectTemplate.new('jekyll', 'Pages/Jekyll', _('Everything you need to create a GitLab Pages site using Jekyll.'), 'https://gitlab.com/pages/jekyll'), ProjectTemplate.new('plainhtml', 'Pages/Plain HTML', _('Everything you need to create a GitLab Pages site using plain HTML.'), 'https://gitlab.com/pages/plain-html'), ProjectTemplate.new('gitbook', 'Pages/GitBook', _('Everything you need to create a GitLab Pages site using GitBook.'), 'https://gitlab.com/pages/gitbook'), - ProjectTemplate.new('hexo', 'Pages/Hexo', _('Everything you need to create a GitLab Pages site using Hexo.'), 'https://gitlab.com/pages/hexo') + ProjectTemplate.new('hexo', 'Pages/Hexo', _('Everything you need to create a GitLab Pages site using Hexo.'), 'https://gitlab.com/pages/hexo'), + ProjectTemplate.new('nfhugo', 'Netlify/Hugo', _('A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfhugo', 'illustrations/logos/netlify.svg'), + ProjectTemplate.new('nfjekyll', 'Netlify/Jekyll', _('A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfjekyll', 'illustrations/logos/netlify.svg'), + ProjectTemplate.new('nfplainhtml', 'Netlify/Plain HTML', _('A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfplain-html', 'illustrations/logos/netlify.svg'), + ProjectTemplate.new('nfgitbook', 'Netlify/GitBook', _('A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfgitbook', 'illustrations/logos/netlify.svg'), + ProjectTemplate.new('nfhexo', 'Netlify/Hexo', _('A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfhexo', 'illustrations/logos/netlify.svg') ].freeze class << self diff --git a/lib/gitlab/shell.rb b/lib/gitlab/shell.rb index 1153e69d3de..c7d8dfcd495 100644 --- a/lib/gitlab/shell.rb +++ b/lib/gitlab/shell.rb @@ -280,7 +280,10 @@ module Gitlab # add_namespace("default", "gitlab") # def add_namespace(storage, name) - Gitlab::GitalyClient::NamespaceService.new(storage).add(name) + # https://gitlab.com/gitlab-org/gitlab-ce/issues/58012 + Gitlab::GitalyClient.allow_n_plus_1_calls do + Gitlab::GitalyClient::NamespaceService.new(storage).add(name) + end rescue GRPC::InvalidArgument => e raise ArgumentError, e.message end diff --git a/lib/gitlab/tracing.rb b/lib/gitlab/tracing.rb index 0d9b0be1c8e..29517591c51 100644 --- a/lib/gitlab/tracing.rb +++ b/lib/gitlab/tracing.rb @@ -27,10 +27,11 @@ module Gitlab def self.tracing_url return unless tracing_url_enabled? - tracing_url_template % { - correlation_id: Gitlab::CorrelationId.current_id.to_s, - service: Gitlab.process_name - } + # Avoid using `format` since it can throw TypeErrors + # which we want to avoid on unsanitised env var input + tracing_url_template.to_s + .gsub(/\{\{\s*correlation_id\s*\}\}/, Gitlab::CorrelationId.current_id.to_s) + .gsub(/\{\{\s*service\s*\}\}/, Gitlab.process_name) end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index fa680cd5ef0..f26103ef6ae 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -285,6 +285,18 @@ msgstr "" msgid "A 'Runner' is a process which runs a job. You can set up as many Runners as you need." msgstr "" +msgid "A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features." +msgstr "" + +msgid "A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features." +msgstr "" + +msgid "A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features." +msgstr "" + +msgid "A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features." +msgstr "" + msgid "A collection of graphs regarding Continuous Integration" msgstr "" @@ -300,6 +312,9 @@ msgstr "" msgid "A new branch will be created in your fork and a new merge request will be started." msgstr "" +msgid "A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features." +msgstr "" + msgid "A project is where you house your files (repository), plan your work (issues), and publish your documentation (wiki), %{among_other_things_link}." msgstr "" @@ -951,6 +966,9 @@ msgstr "" msgid "Average per day: %{average}" msgstr "" +msgid "Background Color" +msgstr "" + msgid "Background Jobs" msgstr "" @@ -2450,6 +2468,9 @@ msgstr "" msgid "Custom notification levels are the same as participating levels. With custom notification levels you will also receive notifications for select events. To find out more, check out %{notification_link}." msgstr "" +msgid "Customize colors" +msgstr "" + msgid "Customize how FogBugz email addresses and usernames are imported into GitLab. In the next step, you'll be able to select the projects you want to import." msgstr "" @@ -3432,6 +3453,12 @@ msgstr "" msgid "Follow the steps below to export your Google Code project data." msgstr "" +msgid "Font Color" +msgstr "" + +msgid "Footer message" +msgstr "" + msgid "For internal projects, any logged in user can view pipelines and access job details (output logs and artifacts)" msgstr "" @@ -3759,6 +3786,9 @@ msgstr "" msgid "GroupsTree|Search by name" msgstr "" +msgid "Header message" +msgstr "" + msgid "Health Check" msgstr "" @@ -4847,9 +4877,6 @@ msgstr "" msgid "New Snippet" msgstr "" -msgid "New Snippets" -msgstr "" - msgid "New branch" msgstr "" @@ -6775,6 +6802,24 @@ msgstr "" msgid "Snippets" msgstr "" +msgid "SnippetsEmptyState|Explore public snippets" +msgstr "" + +msgid "SnippetsEmptyState|New snippet" +msgstr "" + +msgid "SnippetsEmptyState|No snippets found" +msgstr "" + +msgid "SnippetsEmptyState|Snippets are small pieces of code or notes that you want to keep." +msgstr "" + +msgid "SnippetsEmptyState|There are no snippets to show." +msgstr "" + +msgid "SnippetsEmptyState|They can be either public or private." +msgstr "" + msgid "Someone edited this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again." msgstr "" @@ -7051,6 +7096,9 @@ msgstr "" msgid "Starts at (UTC)" msgstr "" +msgid "State your message to activate" +msgstr "" + msgid "Status" msgstr "" @@ -7132,6 +7180,9 @@ msgstr "" msgid "System default (%{default})" msgstr "" +msgid "System header and footer" +msgstr "" + msgid "System metrics (Custom)" msgstr "" diff --git a/package.json b/package.json index 1a6538cf791..4ec484a5e86 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@babel/plugin-syntax-import-meta": "^7.2.0", "@babel/preset-env": "^7.3.1", "@gitlab/csslab": "^1.8.0", - "@gitlab/svgs": "^1.53.0", + "@gitlab/svgs": "^1.54.0", "@gitlab/ui": "^2.0.4", "apollo-boost": "^0.1.20", "apollo-client": "^2.4.5", @@ -260,6 +260,10 @@ module QA autoload :Sidebar, 'qa/page/issuable/sidebar' end + module Alert + autoload :AutoDevopsAlert, 'qa/page/alert/auto_devops_alert' + end + module Layout autoload :Banner, 'qa/page/layout/banner' end diff --git a/qa/qa/page/alert/auto_devops_alert.rb b/qa/qa/page/alert/auto_devops_alert.rb new file mode 100644 index 00000000000..8f66c805b77 --- /dev/null +++ b/qa/qa/page/alert/auto_devops_alert.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module QA + module Page + module Alert + class AutoDevopsAlert < Page::Base + view 'app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml' do + element :auto_devops_banner + end + end + end + end +end diff --git a/qa/qa/page/project/pipeline/show.rb b/qa/qa/page/project/pipeline/show.rb index f192f1fc64b..22b0a168964 100644 --- a/qa/qa/page/project/pipeline/show.rb +++ b/qa/qa/page/project/pipeline/show.rb @@ -18,6 +18,10 @@ module QA::Page element :status_icon, 'ci-status-icon-${status}' # rubocop:disable QA/ElementWithPattern end + view 'app/views/projects/pipelines/_info.html.haml' do + element :pipeline_badges + end + def running? within('.ci-header-container') do page.has_content?('running') @@ -32,6 +36,12 @@ module QA::Page end end + def has_tag?(tag_name) + within_element(:pipeline_badges) do + has_selector?('.badge', text: tag_name) + end + end + def go_to_job(job_name) find_element(:job_link, job_name).click end diff --git a/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb b/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb index 8b165a04382..02bd378acfc 100644 --- a/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb +++ b/qa/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb @@ -4,13 +4,13 @@ require 'pathname' module QA # Transient failure issue: https://gitlab.com/gitlab-org/quality/nightly/issues/68 - context 'Configure', :orchestrated, :kubernetes, :quarantine do - describe 'Auto DevOps support' do - def login - Runtime::Browser.visit(:gitlab, Page::Main::Login) - Page::Main::Login.perform(&:sign_in_using_credentials) - end + context 'Configure' do + def login + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform(&:sign_in_using_credentials) + end + describe 'Auto DevOps support', :orchestrated, :kubernetes, :quarantine do [true, false].each do |rbac| context "when rbac is #{rbac ? 'enabled' : 'disabled'}" do before(:all) do @@ -173,5 +173,38 @@ module QA end end end + + describe 'Auto DevOps', :smoke do + it 'enables AutoDevOps by default' do + login + + project = Resource::Project.fabricate! do |p| + p.name = Runtime::Env.auto_devops_project_name || 'project-with-autodevops' + p.description = 'Project with AutoDevOps' + end + + project.visit! + + Page::Alert::AutoDevopsAlert.perform do |alert| + expect(alert).to have_text(/.*The Auto DevOps pipeline has been enabled.*/) + end + + # Create AutoDevOps repo + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.directory = Pathname + .new(__dir__) + .join('../../../../../fixtures/auto_devops_rack') + push.commit_message = 'Create AutoDevOps compatible Project' + end + + Page::Project::Menu.perform(&:click_ci_cd_pipelines) + Page::Project::Pipeline::Index.perform(&:go_to_latest_pipeline) + + Page::Project::Pipeline::Show.perform do |pipeline| + expect(pipeline).to have_tag('Auto DevOps') + end + end + end end end diff --git a/spec/controllers/admin/appearances_controller_spec.rb b/spec/controllers/admin/appearances_controller_spec.rb new file mode 100644 index 00000000000..4ddd0953267 --- /dev/null +++ b/spec/controllers/admin/appearances_controller_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +describe Admin::AppearancesController do + let(:admin) { create(:admin) } + let(:header_message) { "Header message" } + let(:footer_message) { "Footer" } + + describe 'POST #create' do + let(:create_params) do + { + title: "Foo", + description: "Bar", + header_message: header_message, + footer_message: footer_message + } + end + + before do + sign_in(admin) + end + + it 'creates appearance with footer and header message' do + post :create, params: { appearance: create_params } + + expect(Appearance.current).to have_attributes( + header_message: header_message, + footer_message: footer_message + ) + end + end + + describe 'PUT #update' do + let(:update_params) do + { + header_message: header_message, + footer_message: footer_message + } + end + + before do + create(:appearance) + + sign_in(admin) + end + + it 'updates appearance with footer and header message' do + put :update, params: { appearance: update_params } + + expect(Appearance.current).to have_attributes( + header_message: header_message, + footer_message: footer_message + ) + end + end +end diff --git a/spec/controllers/concerns/issuable_collections_spec.rb b/spec/controllers/concerns/issuable_collections_spec.rb index 307c5d60c57..8580900215c 100644 --- a/spec/controllers/concerns/issuable_collections_spec.rb +++ b/spec/controllers/concerns/issuable_collections_spec.rb @@ -112,7 +112,8 @@ describe IssuableCollections do assignee_username: 'user1', author_id: '2', author_username: 'user2', - authorized_only: 'true', + authorized_only: 'yes', + confidential: true, due_date: '2017-01-01', group_id: '3', iids: '4', @@ -140,6 +141,7 @@ describe IssuableCollections do 'assignee_username' => 'user1', 'author_id' => '2', 'author_username' => 'user2', + 'confidential' => true, 'label_name' => 'foo', 'milestone_title' => 'bar', 'my_reaction_emoji' => 'thumbsup', diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb index 81892575889..0b0f5117784 100644 --- a/spec/controllers/projects/notes_controller_spec.rb +++ b/spec/controllers/projects/notes_controller_spec.rb @@ -252,8 +252,8 @@ describe Projects::NotesController do note: 'some note', noteable_id: merge_request.id.to_s, noteable_type: 'MergeRequest', - merge_request_diff_head_sha: 'sha', - in_reply_to_discussion_id: nil + commit_id: nil, + merge_request_diff_head_sha: 'sha' }).permit! expect(Notes::CreateService).to receive(:new).with(project, user, service_params).and_return(double(execute: true)) @@ -266,6 +266,22 @@ describe Projects::NotesController do end end + context 'when creating a comment on a commit with SHA1 starting with a large number' do + let(:commit) { create(:commit, project: project, id: '842616594688d2351480dfebd67b3d8d15571e6d') } + + it 'creates a note successfully' do + expect do + post :create, params: { + note: { note: 'some note', commit_id: commit.id }, + namespace_id: project.namespace, + project_id: project, + target_type: 'commit', + target_id: commit.id + } + end.to change { Note.count }.by(1) + end + end + context 'when creating a commit comment from an MR fork' do let(:project) { create(:project, :repository) } diff --git a/spec/features/admin/admin_appearance_spec.rb b/spec/features/admin/admin_appearance_spec.rb index 57215c0d1e9..83cd686818c 100644 --- a/spec/features/admin/admin_appearance_spec.rb +++ b/spec/features/admin/admin_appearance_spec.rb @@ -39,6 +39,38 @@ describe 'Admin Appearance' do expect_custom_new_project_appearance(appearance) end + context 'Custom system header and footer' do + before do + sign_in(create(:admin)) + end + + context 'when system header and footer messages are empty' do + it 'shows custom system header and footer fields' do + visit admin_appearances_path + + expect(page).to have_field('appearance_header_message', with: '') + expect(page).to have_field('appearance_footer_message', with: '') + expect(page).to have_field('appearance_message_background_color') + expect(page).to have_field('appearance_message_font_color') + end + end + + context 'when system header and footer messages are not empty' do + before do + appearance.update(header_message: 'Foo', footer_message: 'Bar') + end + + it 'shows custom system header and footer fields' do + visit admin_appearances_path + + expect(page).to have_field('appearance_header_message', with: appearance.header_message) + expect(page).to have_field('appearance_footer_message', with: appearance.footer_message) + expect(page).to have_field('appearance_message_background_color') + expect(page).to have_field('appearance_message_font_color') + end + end + end + it 'Custom sign-in page' do visit new_user_session_path diff --git a/spec/features/dashboard/shortcuts_spec.rb b/spec/features/dashboard/shortcuts_spec.rb index cbddf117462..55f5ff04d01 100644 --- a/spec/features/dashboard/shortcuts_spec.rb +++ b/spec/features/dashboard/shortcuts_spec.rb @@ -44,7 +44,7 @@ describe 'Dashboard shortcuts', :js do find('body').send_keys([:shift, 'S']) find('.nothing-here-block') - expect(page).to have_selector('.snippets-list-holder') + expect(page).to have_content('No snippets found') find('body').send_keys([:shift, 'P']) diff --git a/spec/features/dashboard/snippets_spec.rb b/spec/features/dashboard/snippets_spec.rb index fb4263d74c4..0e248c8732d 100644 --- a/spec/features/dashboard/snippets_spec.rb +++ b/spec/features/dashboard/snippets_spec.rb @@ -13,6 +13,21 @@ describe 'Dashboard snippets' do it_behaves_like 'paginated snippets' end + context 'when there are no project snippets', :js do + let(:project) { create(:project, :public) } + before do + sign_in(project.owner) + visit dashboard_snippets_path + end + + it 'shows the empty state when there are no snippets' do + element = page.find('.row.empty-state') + + expect(element).to have_content("Snippets are small pieces of code or notes that you want to keep.") + expect(element.find('.svg-content img')['src']).to have_content('illustrations/snippets_empty') + end + end + context 'filtering by visibility' do let(:user) { create(:user) } let!(:snippets) do diff --git a/spec/features/display_system_header_and_footer_bar_spec.rb b/spec/features/display_system_header_and_footer_bar_spec.rb new file mode 100644 index 00000000000..af9d9a5834f --- /dev/null +++ b/spec/features/display_system_header_and_footer_bar_spec.rb @@ -0,0 +1,137 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Display system header and footer bar' do + let(:header_message) { "Foo" } + let(:footer_message) { "Bar" } + + shared_examples 'system header is configured' do + it 'shows system header' do + expect(page).to have_css('.header-message') + end + + it 'shows the correct content' do + page.within('.header-message') do + expect(page).to have_content(header_message) + end + end + end + + shared_examples 'system footer is configured' do + it 'shows system footer' do + expect(page).to have_css('.footer-message') + end + + it 'shows the correct content' do + page.within('.footer-message') do + expect(page).to have_content(footer_message) + end + end + end + + shared_examples 'system header is not configured' do + it 'does not show system header' do + expect(page).not_to have_css('.header-message') + end + end + + shared_examples 'system footer is not configured' do + it 'does not show system footer' do + expect(page).not_to have_css('.footer-message') + end + end + + context 'when authenticated' do + context 'when system header and footer are not configured' do + before do + sign_in(create(:user)) + + visit root_path + end + + it_behaves_like 'system header is not configured' + it_behaves_like 'system footer is not configured' + end + + context 'when only system header is defined' do + before do + create(:appearance, header_message: header_message) + + sign_in(create(:user)) + visit root_path + end + + it_behaves_like 'system header is configured' + it_behaves_like 'system footer is not configured' + end + + context 'when only system footer is defined' do + before do + create(:appearance, footer_message: footer_message) + + sign_in(create(:user)) + visit root_path + end + + it_behaves_like 'system header is not configured' + it_behaves_like 'system footer is configured' + end + + context 'when system header and footer are defined' do + before do + create(:appearance, header_message: header_message, footer_message: footer_message) + + sign_in(create(:user)) + visit root_path + end + + it_behaves_like 'system header is configured' + it_behaves_like 'system footer is configured' + end + end + + context 'when not authenticated' do + context 'when system header and footer are not configured' do + before do + visit root_path + end + + it_behaves_like 'system header is not configured' + it_behaves_like 'system footer is not configured' + end + + context 'when only system header is defined' do + before do + create(:appearance, header_message: header_message) + + visit root_path + end + + it_behaves_like 'system header is configured' + it_behaves_like 'system footer is not configured' + end + + context 'when only system footer is defined' do + before do + create(:appearance, footer_message: footer_message) + + visit root_path + end + + it_behaves_like 'system header is not configured' + it_behaves_like 'system footer is configured' + end + + context 'when system header and footer are defined' do + before do + create(:appearance, header_message: header_message, footer_message: footer_message) + + visit root_path + end + + it_behaves_like 'system header is configured' + it_behaves_like 'system footer is configured' + end + end +end diff --git a/spec/features/issuables/issuable_list_spec.rb b/spec/features/issuables/issuable_list_spec.rb index 2f45ef856a5..7b6e9cd66b2 100644 --- a/spec/features/issuables/issuable_list_spec.rb +++ b/spec/features/issuables/issuable_list_spec.rb @@ -28,6 +28,22 @@ describe 'issuable list' do expect(first('.fa-thumbs-down').find(:xpath, '..')).to have_content(1) expect(first('.fa-comments').find(:xpath, '..')).to have_content(2) end + + it 'sorts labels alphabetically' do + label1 = create(:label, project: project, title: 'a') + label2 = create(:label, project: project, title: 'z') + label3 = create(:label, project: project, title: 'X') + label4 = create(:label, project: project, title: 'B') + issuable = create_issuable(issuable_type) + issuable.labels << [label1, label2, label3, label4] + + visit_issuable_list(issuable_type) + + expect(all('.label-link')[0].text).to have_content('B') + expect(all('.label-link')[1].text).to have_content('X') + expect(all('.label-link')[2].text).to have_content('a') + expect(all('.label-link')[3].text).to have_content('z') + end end it "counts merge requests closing issues icons for each issue" do @@ -45,6 +61,14 @@ describe 'issuable list' do end end + def create_issuable(issuable_type) + if issuable_type == :issue + create(:issue, project: project) + else + create(:merge_request, source_project: project) + end + end + def create_issuables(issuable_type) 3.times do |n| issuable = diff --git a/spec/features/issues/filtered_search/dropdown_hint_spec.rb b/spec/features/issues/filtered_search/dropdown_hint_spec.rb index 0e296ab2109..096756f19cc 100644 --- a/spec/features/issues/filtered_search/dropdown_hint_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_hint_spec.rb @@ -66,7 +66,7 @@ describe 'Dropdown hint', :js do it 'filters with text' do filtered_search.set('a') - expect(find(js_dropdown_hint)).to have_selector('.filter-dropdown .filter-dropdown-item', count: 4) + expect(find(js_dropdown_hint)).to have_selector('.filter-dropdown .filter-dropdown-item', count: 5) end end @@ -119,6 +119,15 @@ describe 'Dropdown hint', :js do expect_tokens([{ name: 'my-reaction' }]) expect_filtered_search_input_empty end + + it 'opens the yes-no dropdown when you click on confidential' do + click_hint('confidential') + + expect(page).to have_css(js_dropdown_hint, visible: false) + expect(page).to have_css('#js-dropdown-confidential', visible: true) + expect_tokens([{ name: 'confidential' }]) + expect_filtered_search_input_empty + end end describe 'selecting from dropdown with some input' do diff --git a/spec/features/issues/filtered_search/search_bar_spec.rb b/spec/features/issues/filtered_search/search_bar_spec.rb index 8abab3f35d6..c4468922883 100644 --- a/spec/features/issues/filtered_search/search_bar_spec.rb +++ b/spec/features/issues/filtered_search/search_bar_spec.rb @@ -100,7 +100,7 @@ describe 'Search bar', :js do find('.filtered-search-box .clear-search').click filtered_search.click - expect(find('#js-dropdown-hint')).to have_selector('.filter-dropdown .filter-dropdown-item', count: 5) + expect(find('#js-dropdown-hint')).to have_selector('.filter-dropdown .filter-dropdown-item', count: 6) expect(get_left_style(find('#js-dropdown-hint')['style'])).to eq(hint_offset) end end diff --git a/spec/features/issues/gfm_autocomplete_spec.rb b/spec/features/issues/gfm_autocomplete_spec.rb index c22ad0d20ef..986f3823275 100644 --- a/spec/features/issues/gfm_autocomplete_spec.rb +++ b/spec/features/issues/gfm_autocomplete_spec.rb @@ -278,7 +278,7 @@ describe 'GFM autocomplete', :js do end end - # This context has jsut one example in each contexts in order to improve spec performance. + # This context has just one example in each contexts in order to improve spec performance. context 'labels', :quarantine do let!(:backend) { create(:label, project: project, title: 'backend') } let!(:bug) { create(:label, project: project, title: 'bug') } diff --git a/spec/features/projects/blobs/edit_spec.rb b/spec/features/projects/blobs/edit_spec.rb index 6e6c299ee2e..1522a3361a1 100644 --- a/spec/features/projects/blobs/edit_spec.rb +++ b/spec/features/projects/blobs/edit_spec.rb @@ -77,7 +77,7 @@ describe 'Editing file blob', :js do click_link 'Preview' wait_for_requests - # the above generates two seperate lists (not embedded) in CommonMark + # the above generates two separate lists (not embedded) in CommonMark expect(page).to have_content("sublist") expect(page).not_to have_xpath("//ol//li//ul") end diff --git a/spec/features/projects/branches_spec.rb b/spec/features/projects/branches_spec.rb index 97757e8da92..ee71c843b80 100644 --- a/spec/features/projects/branches_spec.rb +++ b/spec/features/projects/branches_spec.rb @@ -229,6 +229,38 @@ describe 'Branches' do end end + describe 'comparing branches' do + before do + sign_in(user) + project.add_developer(user) + end + + shared_examples 'compares branches' do + it 'compares branches' do + visit project_branches_path(project) + + page.within first('.all-branches li') do + click_link 'Compare' + end + + expect(page).to have_content 'Commits' + expect(page).to have_link 'Create merge request' + end + end + + context 'on a read-only instance' do + before do + allow(Gitlab::Database).to receive(:read_only?).and_return(true) + end + + it_behaves_like 'compares branches' + end + + context 'on a read-write instance' do + it_behaves_like 'compares branches' + end + end + def sorted_branches(repository, count:, sort_by:, state: nil) branches = repository.branches_sorted_by(sort_by) branches = branches.select { |b| state == 'active' ? b.active? : b.stale? } if state diff --git a/spec/features/projects/wiki/markdown_preview_spec.rb b/spec/features/projects/wiki/markdown_preview_spec.rb index 49244c53a91..49058d1372a 100644 --- a/spec/features/projects/wiki/markdown_preview_spec.rb +++ b/spec/features/projects/wiki/markdown_preview_spec.rb @@ -170,7 +170,7 @@ describe 'Projects > Wiki > User previews markdown changes', :js do fill_in :wiki_content, with: "1. one\n - sublist\n" click_on "Preview" - # the above generates two seperate lists (not embedded) in CommonMark + # the above generates two separate lists (not embedded) in CommonMark expect(page).to have_content("sublist") expect(page).not_to have_xpath("//ol//li//ul") end diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb index 34cb09942be..47e2548c3d6 100644 --- a/spec/finders/issues_finder_spec.rb +++ b/spec/finders/issues_finder_spec.rb @@ -416,6 +416,36 @@ describe IssuesFinder do end end + context 'filtering by closed_at' do + let!(:closed_issue1) { create(:issue, project: project1, state: :closed, closed_at: 1.week.ago) } + let!(:closed_issue2) { create(:issue, project: project2, state: :closed, closed_at: 1.week.from_now) } + let!(:closed_issue3) { create(:issue, project: project2, state: :closed, closed_at: 2.weeks.from_now) } + + context 'through closed_after' do + let(:params) { { state: :closed, closed_after: closed_issue3.closed_at } } + + it 'returns issues closed on or after the given date' do + expect(issues).to contain_exactly(closed_issue3) + end + end + + context 'through closed_before' do + let(:params) { { state: :closed, closed_before: closed_issue1.closed_at } } + + it 'returns issues closed on or before the given date' do + expect(issues).to contain_exactly(closed_issue1) + end + end + + context 'through closed_after and closed_before' do + let(:params) { { state: :closed, closed_after: closed_issue2.closed_at, closed_before: closed_issue3.closed_at } } + + it 'returns issues closed between the given dates' do + expect(issues).to contain_exactly(closed_issue2, closed_issue3) + end + end + end + context 'filtering by reaction name' do context 'user searches by no reaction' do let(:params) { { my_reaction_emoji: 'None' } } @@ -460,6 +490,32 @@ describe IssuesFinder do end end + context 'filtering by confidential' do + set(:confidential_issue) { create(:issue, project: project1, confidential: true) } + + context 'no filtering' do + it 'returns all issues' do + expect(issues).to contain_exactly(issue1, issue2, issue3, issue4, confidential_issue) + end + end + + context 'user filters confidential issues' do + let(:params) { { confidential: true } } + + it 'returns only confdential issues' do + expect(issues).to contain_exactly(confidential_issue) + end + end + + context 'user filters only public issues' do + let(:params) { { confidential: false } } + + it 'returns only confdential issues' do + expect(issues).to contain_exactly(issue1, issue2, issue3, issue4) + end + end + end + context 'when the user is unauthorized' do let(:search_user) { nil } @@ -526,7 +582,7 @@ describe IssuesFinder do it 'returns the number of rows for the default state' do finder = described_class.new(user) - expect(finder.row_count).to eq(4) + expect(finder.row_count).to eq(5) end it 'returns the number of rows for a given state' do diff --git a/spec/javascripts/gfm_auto_complete_spec.js b/spec/frontend/gfm_auto_complete_spec.js index a14031f43ed..c7008c780d6 100644 --- a/spec/javascripts/gfm_auto_complete_spec.js +++ b/spec/frontend/gfm_auto_complete_spec.js @@ -6,58 +6,62 @@ import GfmAutoComplete from '~/gfm_auto_complete'; import 'vendor/jquery.caret'; import 'vendor/jquery.atwho'; -describe('GfmAutoComplete', function() { +describe('GfmAutoComplete', () => { const gfmAutoCompleteCallbacks = GfmAutoComplete.prototype.getDefaultCallbacks.call({ fetchData: () => {}, }); - describe('DefaultOptions.sorter', function() { - describe('assets loading', function() { - beforeEach(function() { - spyOn(GfmAutoComplete, 'isLoading').and.returnValue(true); + let atwhoInstance; + let items; + let sorterValue; - this.atwhoInstance = { setting: {} }; - this.items = []; + describe('DefaultOptions.sorter', () => { + describe('assets loading', () => { + beforeEach(() => { + jest.spyOn(GfmAutoComplete, 'isLoading').mockReturnValue(true); - this.sorterValue = gfmAutoCompleteCallbacks.sorter.call(this.atwhoInstance, '', this.items); + atwhoInstance = { setting: {} }; + items = []; + + sorterValue = gfmAutoCompleteCallbacks.sorter.call(atwhoInstance, '', items); }); - it('should disable highlightFirst', function() { - expect(this.atwhoInstance.setting.highlightFirst).toBe(false); + it('should disable highlightFirst', () => { + expect(atwhoInstance.setting.highlightFirst).toBe(false); }); - it('should return the passed unfiltered items', function() { - expect(this.sorterValue).toEqual(this.items); + it('should return the passed unfiltered items', () => { + expect(sorterValue).toEqual(items); }); }); - describe('assets finished loading', function() { - beforeEach(function() { - spyOn(GfmAutoComplete, 'isLoading').and.returnValue(false); - spyOn($.fn.atwho.default.callbacks, 'sorter'); + describe('assets finished loading', () => { + beforeEach(() => { + jest.spyOn(GfmAutoComplete, 'isLoading').mockReturnValue(false); + jest.spyOn($.fn.atwho.default.callbacks, 'sorter').mockImplementation(() => {}); }); - it('should enable highlightFirst if alwaysHighlightFirst is set', function() { - const atwhoInstance = { setting: { alwaysHighlightFirst: true } }; + it('should enable highlightFirst if alwaysHighlightFirst is set', () => { + atwhoInstance = { setting: { alwaysHighlightFirst: true } }; gfmAutoCompleteCallbacks.sorter.call(atwhoInstance); expect(atwhoInstance.setting.highlightFirst).toBe(true); }); - it('should enable highlightFirst if a query is present', function() { - const atwhoInstance = { setting: {} }; + it('should enable highlightFirst if a query is present', () => { + atwhoInstance = { setting: {} }; gfmAutoCompleteCallbacks.sorter.call(atwhoInstance, 'query'); expect(atwhoInstance.setting.highlightFirst).toBe(true); }); - it('should call the default atwho sorter', function() { - const atwhoInstance = { setting: {} }; + it('should call the default atwho sorter', () => { + atwhoInstance = { setting: {} }; const query = 'query'; - const items = []; + items = []; const searchKey = 'searchKey'; gfmAutoCompleteCallbacks.sorter.call(atwhoInstance, query, items, searchKey); @@ -71,7 +75,9 @@ describe('GfmAutoComplete', function() { const beforeInsert = (context, value) => gfmAutoCompleteCallbacks.beforeInsert.call(context, value); - const atwhoInstance = { setting: { skipSpecialCharacterTest: false } }; + beforeEach(() => { + atwhoInstance = { setting: { skipSpecialCharacterTest: false } }; + }); it('should not quote if value only contains alphanumeric charecters', () => { expect(beforeInsert(atwhoInstance, '@user1')).toBe('@user1'); @@ -96,7 +102,7 @@ describe('GfmAutoComplete', function() { }); }); - describe('DefaultOptions.matcher', function() { + describe('DefaultOptions.matcher', () => { const defaultMatcher = (context, flag, subtext) => gfmAutoCompleteCallbacks.matcher.call(context, flag, subtext); @@ -108,7 +114,10 @@ describe('GfmAutoComplete', function() { hash[el] = null; return hash; }, {}); - const atwhoInstance = { setting: {}, app: { controllers: flagsHash } }; + + beforeEach(() => { + atwhoInstance = { setting: {}, app: { controllers: flagsHash } }; + }); const minLen = 1; const maxLen = 20; @@ -182,38 +191,38 @@ describe('GfmAutoComplete', function() { }); }); - describe('isLoading', function() { - it('should be true with loading data object item', function() { + describe('isLoading', () => { + it('should be true with loading data object item', () => { expect(GfmAutoComplete.isLoading({ name: 'loading' })).toBe(true); }); - it('should be true with loading data array', function() { + it('should be true with loading data array', () => { expect(GfmAutoComplete.isLoading(['loading'])).toBe(true); }); - it('should be true with loading data object array', function() { + it('should be true with loading data object array', () => { expect(GfmAutoComplete.isLoading([{ name: 'loading' }])).toBe(true); }); - it('should be false with actual array data', function() { + it('should be false with actual array data', () => { expect( GfmAutoComplete.isLoading([{ title: 'Foo' }, { title: 'Bar' }, { title: 'Qux' }]), ).toBe(false); }); - it('should be false with actual data item', function() { + it('should be false with actual data item', () => { expect(GfmAutoComplete.isLoading({ title: 'Foo' })).toBe(false); }); }); - describe('Issues.insertTemplateFunction', function() { - it('should return default template', function() { + describe('Issues.insertTemplateFunction', () => { + it('should return default template', () => { expect(GfmAutoComplete.Issues.insertTemplateFunction({ id: 5, title: 'Some Issue' })).toBe( '${atwho-at}${id}', // eslint-disable-line no-template-curly-in-string ); }); - it('should return reference when reference is set', function() { + it('should return reference when reference is set', () => { expect( GfmAutoComplete.Issues.insertTemplateFunction({ id: 5, @@ -224,14 +233,14 @@ describe('GfmAutoComplete', function() { }); }); - describe('Issues.templateFunction', function() { - it('should return html with id and title', function() { + describe('Issues.templateFunction', () => { + it('should return html with id and title', () => { expect(GfmAutoComplete.Issues.templateFunction({ id: 5, title: 'Some Issue' })).toBe( '<li><small>5</small> Some Issue</li>', ); }); - it('should replace id with reference if reference is set', function() { + it('should replace id with reference if reference is set', () => { expect( GfmAutoComplete.Issues.templateFunction({ id: 5, diff --git a/spec/graphql/resolvers/issues_resolver_spec.rb b/spec/graphql/resolvers/issues_resolver_spec.rb index 66de372e9fe..5f9c180cbb7 100644 --- a/spec/graphql/resolvers/issues_resolver_spec.rb +++ b/spec/graphql/resolvers/issues_resolver_spec.rb @@ -5,16 +5,63 @@ describe Resolvers::IssuesResolver do let(:current_user) { create(:user) } set(:project) { create(:project) } - set(:issue) { create(:issue, project: project) } - set(:issue2) { create(:issue, project: project, title: 'foo') } + set(:issue1) { create(:issue, project: project, state: :opened, created_at: 3.hours.ago, updated_at: 3.hours.ago) } + set(:issue2) { create(:issue, project: project, state: :closed, title: 'foo', created_at: 1.hour.ago, updated_at: 1.hour.ago, closed_at: 1.hour.ago) } + set(:label1) { create(:label, project: project) } + set(:label2) { create(:label, project: project) } before do project.add_developer(current_user) + create(:label_link, label: label1, target: issue1) + create(:label_link, label: label1, target: issue2) + create(:label_link, label: label2, target: issue2) end describe '#resolve' do it 'finds all issues' do - expect(resolve_issues).to contain_exactly(issue, issue2) + expect(resolve_issues).to contain_exactly(issue1, issue2) + end + + it 'filters by state' do + expect(resolve_issues(state: 'opened')).to contain_exactly(issue1) + expect(resolve_issues(state: 'closed')).to contain_exactly(issue2) + end + + it 'filters by labels' do + expect(resolve_issues(label_name: [label1.title])).to contain_exactly(issue1, issue2) + expect(resolve_issues(label_name: [label1.title, label2.title])).to contain_exactly(issue2) + end + + describe 'filters by created_at' do + it 'filters by created_before' do + expect(resolve_issues(created_before: 2.hours.ago)).to contain_exactly(issue1) + end + + it 'filters by created_after' do + expect(resolve_issues(created_after: 2.hours.ago)).to contain_exactly(issue2) + end + end + + describe 'filters by updated_at' do + it 'filters by updated_before' do + expect(resolve_issues(updated_before: 2.hours.ago)).to contain_exactly(issue1) + end + + it 'filters by updated_after' do + expect(resolve_issues(updated_after: 2.hours.ago)).to contain_exactly(issue2) + end + end + + describe 'filters by closed_at' do + let!(:issue3) { create(:issue, project: project, state: :closed, closed_at: 3.hours.ago) } + + it 'filters by closed_before' do + expect(resolve_issues(closed_before: 2.hours.ago)).to contain_exactly(issue3) + end + + it 'filters by closed_after' do + expect(resolve_issues(closed_after: 2.hours.ago)).to contain_exactly(issue2) + end end it 'searches issues' do @@ -22,7 +69,7 @@ describe Resolvers::IssuesResolver do end it 'sort issues' do - expect(resolve_issues(sort: 'created_desc')).to eq [issue2, issue] + expect(resolve_issues(sort: 'created_desc')).to eq [issue2, issue1] end it 'returns issues user can see' do @@ -30,31 +77,31 @@ describe Resolvers::IssuesResolver do create(:issue, confidential: true) - expect(resolve_issues).to contain_exactly(issue, issue2) + expect(resolve_issues).to contain_exactly(issue1, issue2) end it 'finds a specific issue with iid' do - expect(resolve_issues(iid: issue.iid)).to contain_exactly(issue) + expect(resolve_issues(iid: issue1.iid)).to contain_exactly(issue1) end it 'finds a specific issue with iids' do - expect(resolve_issues(iids: issue.iid)).to contain_exactly(issue) + expect(resolve_issues(iids: issue1.iid)).to contain_exactly(issue1) end it 'finds multiple issues with iids' do - expect(resolve_issues(iids: [issue.iid, issue2.iid])) - .to contain_exactly(issue, issue2) + expect(resolve_issues(iids: [issue1.iid, issue2.iid])) + .to contain_exactly(issue1, issue2) end it 'finds only the issues within the project we are looking at' do another_project = create(:project) - iids = [issue, issue2].map(&:iid) + iids = [issue1, issue2].map(&:iid) iids.each do |iid| create(:issue, project: another_project, iid: iid) end - expect(resolve_issues(iids: iids)).to contain_exactly(issue, issue2) + expect(resolve_issues(iids: iids)).to contain_exactly(issue1, issue2) end end diff --git a/spec/graphql/types/issuable_state_enum_spec.rb b/spec/graphql/types/issuable_state_enum_spec.rb new file mode 100644 index 00000000000..65a80fa4176 --- /dev/null +++ b/spec/graphql/types/issuable_state_enum_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['IssuableState'] do + it { expect(described_class.graphql_name).to eq('IssuableState') } + + it_behaves_like 'issuable state' +end diff --git a/spec/graphql/types/issue_state_enum_spec.rb b/spec/graphql/types/issue_state_enum_spec.rb new file mode 100644 index 00000000000..de19e6fc505 --- /dev/null +++ b/spec/graphql/types/issue_state_enum_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['IssueState'] do + it { expect(described_class.graphql_name).to eq('IssueState') } + + it_behaves_like 'issuable state' +end diff --git a/spec/graphql/types/merge_request_state_enum_spec.rb b/spec/graphql/types/merge_request_state_enum_spec.rb new file mode 100644 index 00000000000..626e33b18d3 --- /dev/null +++ b/spec/graphql/types/merge_request_state_enum_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GitlabSchema.types['MergeRequestState'] do + it { expect(described_class.graphql_name).to eq('MergeRequestState') } + + it_behaves_like 'issuable state' + + it 'exposes all the existing merge request states' do + expect(described_class.values.keys).to include('merged') + end +end diff --git a/spec/helpers/appearances_helper_spec.rb b/spec/helpers/appearances_helper_spec.rb new file mode 100644 index 00000000000..8d717b968dd --- /dev/null +++ b/spec/helpers/appearances_helper_spec.rb @@ -0,0 +1,76 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe AppearancesHelper do + before do + user = create(:user) + allow(helper).to receive(:current_user).and_return(user) + end + + describe '#header_message' do + it 'returns nil when header message field is not set' do + create(:appearance) + + expect(helper.header_message).to be_nil + end + + context 'when header message is set' do + it 'includes current message' do + message = "Foo bar" + create(:appearance, header_message: message) + + expect(helper.header_message).to include(message) + end + end + end + + describe '#footer_message' do + it 'returns nil when footer message field is not set' do + create(:appearance) + + expect(helper.footer_message).to be_nil + end + + context 'when footer message is set' do + it 'includes current message' do + message = "Foo bar" + create(:appearance, footer_message: message) + + expect(helper.footer_message).to include(message) + end + end + end + + describe '#brand_image' do + let!(:appearance) { create(:appearance, :with_logo) } + + context 'when there is a logo' do + it 'returns a path' do + expect(helper.brand_image).to match(%r(img data-src="/uploads/-/system/appearance/.*png)) + end + end + + context 'when there is a logo but no associated upload' do + before do + # Legacy attachments were not tracked in the uploads table + appearance.logo.upload.destroy + appearance.reload + end + + it 'falls back to using the original path' do + expect(helper.brand_image).to match(%r(img data-src="/uploads/-/system/appearance/.*png)) + end + end + end + + describe '#brand_title' do + it 'returns the default CE title when no appearance is present' do + allow(helper) + .to receive(:current_appearance) + .and_return(nil) + + expect(helper.brand_title).to eq('GitLab Community Edition') + end + end +end diff --git a/spec/helpers/labels_helper_spec.rb b/spec/helpers/labels_helper_spec.rb index c04f679bcf0..012678db9c2 100644 --- a/spec/helpers/labels_helper_spec.rb +++ b/spec/helpers/labels_helper_spec.rb @@ -236,4 +236,17 @@ describe LabelsHelper do expect(labels_filter_path(format: :json)).to eq(dashboard_labels_path(format: :json)) end end + + describe 'labels_sorted_by_title' do + it 'sorts labels alphabetically' do + label1 = double(:label, title: 'a') + label2 = double(:label, title: 'B') + label3 = double(:label, title: 'c') + label4 = double(:label, title: 'D') + labels = [label1, label2, label3, label4] + + expect(labels_sorted_by_title(labels)) + .to match_array([label2, label4, label1, label3]) + end + end end diff --git a/spec/javascripts/fixtures/blob.rb b/spec/javascripts/fixtures/blob.rb index 1b2a3b484bb..cd66d98f92a 100644 --- a/spec/javascripts/fixtures/blob.rb +++ b/spec/javascripts/fixtures/blob.rb @@ -15,6 +15,7 @@ describe Projects::BlobController, '(JavaScript fixtures)', type: :controller do before do sign_in(admin) + allow(SecureRandom).to receive(:hex).and_return('securerandomhex:thereisnospoon') end after do diff --git a/spec/javascripts/fixtures/commit.rb b/spec/javascripts/fixtures/commit.rb index f0e4bb50c67..295f13b34a4 100644 --- a/spec/javascripts/fixtures/commit.rb +++ b/spec/javascripts/fixtures/commit.rb @@ -16,6 +16,7 @@ describe Projects::CommitController, '(JavaScript fixtures)', type: :controller before do project.add_maintainer(user) sign_in(user) + allow(SecureRandom).to receive(:hex).and_return('securerandomhex:thereisnospoon') end it 'commit/show.html.raw' do |example| diff --git a/spec/javascripts/fixtures/deploy_keys.rb b/spec/javascripts/fixtures/deploy_keys.rb index efbda955972..a333d9c0150 100644 --- a/spec/javascripts/fixtures/deploy_keys.rb +++ b/spec/javascripts/fixtures/deploy_keys.rb @@ -25,7 +25,7 @@ describe Projects::DeployKeysController, '(JavaScript fixtures)', type: :control render_views it 'deploy_keys/keys.json' do |example| - create(:deploy_key, public: true) + create(:rsa_deploy_key_2048, public: true) project_key = create(:deploy_key, key: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCdMHEHyhRjbhEZVddFn6lTWdgEy5Q6Bz4nwGB76xWZI5YT/1WJOMEW+sL5zYd31kk7sd3FJ5L9ft8zWMWrr/iWXQikC2cqZK24H1xy+ZUmrRuJD4qGAaIVoyyzBL+avL+lF8J5lg6YSw8gwJY/lX64/vnJHUlWw2n5BF8IFOWhiw== dummy@gitlab.com') internal_key = create(:deploy_key, key: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNd/UJWhPrpb+b/G5oL109y57yKuCxE+WUGJGYaj7WQKsYRJmLYh1mgjrl+KVyfsWpq4ylOxIfFSnN9xBBFN8mlb0Fma5DC7YsSsibJr3MZ19ZNBprwNcdogET7aW9I0In7Wu5f2KqI6e5W/spJHCy4JVxzVMUvk6Myab0LnJ2iQ== dummy@gitlab.com') create(:deploy_keys_project, project: project, deploy_key: project_key) diff --git a/spec/javascripts/fixtures/groups.rb b/spec/javascripts/fixtures/groups.rb index f8d55fc97c3..03136f4e661 100644 --- a/spec/javascripts/fixtures/groups.rb +++ b/spec/javascripts/fixtures/groups.rb @@ -4,7 +4,7 @@ describe 'Groups (JavaScript fixtures)', type: :controller do include JavaScriptFixturesHelpers let(:admin) { create(:admin) } - let(:group) { create(:group, name: 'frontend-fixtures-group' )} + let(:group) { create(:group, name: 'frontend-fixtures-group', runners_token: 'runnerstoken:intabulasreferre')} render_views diff --git a/spec/javascripts/fixtures/issues.rb b/spec/javascripts/fixtures/issues.rb index 18fb1bebf8b..9b8e90c2a43 100644 --- a/spec/javascripts/fixtures/issues.rb +++ b/spec/javascripts/fixtures/issues.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Projects::IssuesController, '(JavaScript fixtures)', type: :controller do include JavaScriptFixturesHelpers - let(:admin) { create(:admin) } + let(:admin) { create(:admin, feed_token: 'feedtoken:coldfeed') } let(:namespace) { create(:namespace, name: 'frontend-fixtures' )} let(:project) { create(:project_empty_repo, namespace: namespace, path: 'issues-project') } diff --git a/spec/javascripts/fixtures/merge_requests.rb b/spec/javascripts/fixtures/merge_requests.rb index 26e81f06c0b..eb37be87e1d 100644 --- a/spec/javascripts/fixtures/merge_requests.rb +++ b/spec/javascripts/fixtures/merge_requests.rb @@ -35,6 +35,7 @@ describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: :cont before do sign_in(admin) + allow(Discussion).to receive(:build_discussion_id).and_return(['discussionid:ceterumcenseo']) end after do @@ -54,8 +55,10 @@ describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: :cont end it 'merge_requests/merged_merge_request.html.raw' do |example| - allow_any_instance_of(MergeRequest).to receive(:source_branch_exists?).and_return(true) - allow_any_instance_of(MergeRequest).to receive(:can_remove_source_branch?).and_return(true) + expect_next_instance_of(MergeRequest) do |merge_request| + allow(merge_request).to receive(:source_branch_exists?).and_return(true) + allow(merge_request).to receive(:can_remove_source_branch?).and_return(true) + end render_merge_request(example.description, merged_merge_request) end diff --git a/spec/javascripts/fixtures/projects.rb b/spec/javascripts/fixtures/projects.rb index 9b48646f8f0..85f02923804 100644 --- a/spec/javascripts/fixtures/projects.rb +++ b/spec/javascripts/fixtures/projects.rb @@ -3,13 +3,13 @@ require 'spec_helper' describe 'Projects (JavaScript fixtures)', type: :controller do include JavaScriptFixturesHelpers + runners_token = 'runnerstoken:intabulasreferre' + let(:admin) { create(:admin) } let(:namespace) { create(:namespace, name: 'frontend-fixtures' )} - let(:project) { create(:project, namespace: namespace, path: 'builds-project') } + let(:project) { create(:project, namespace: namespace, path: 'builds-project', runners_token: runners_token) } let(:project_with_repo) { create(:project, :repository, description: 'Code and stuff') } - let(:project_variable_populated) { create(:project, namespace: namespace, path: 'builds-project2') } - let!(:variable1) { create(:ci_variable, project: project_variable_populated) } - let!(:variable2) { create(:ci_variable, project: project_variable_populated) } + let(:project_variable_populated) { create(:project, namespace: namespace, path: 'builds-project2', runners_token: runners_token) } render_views @@ -20,6 +20,7 @@ describe 'Projects (JavaScript fixtures)', type: :controller do before do project.add_maintainer(admin) sign_in(admin) + allow(SecureRandom).to receive(:hex).and_return('securerandomhex:thereisnospoon') end after do @@ -70,6 +71,9 @@ describe 'Projects (JavaScript fixtures)', type: :controller do end it 'projects/ci_cd_settings_with_variables.html.raw' do |example| + create(:ci_variable, project: project_variable_populated) + create(:ci_variable, project: project_variable_populated) + get :show, params: { namespace_id: project_variable_populated.namespace.to_param, project_id: project_variable_populated diff --git a/spec/javascripts/fixtures/snippet.rb b/spec/javascripts/fixtures/snippet.rb index a14837e4d4a..bcd6546f3df 100644 --- a/spec/javascripts/fixtures/snippet.rb +++ b/spec/javascripts/fixtures/snippet.rb @@ -7,7 +7,6 @@ describe SnippetsController, '(JavaScript fixtures)', type: :controller do let(:namespace) { create(:namespace, name: 'frontend-fixtures' )} let(:project) { create(:project, :repository, namespace: namespace, path: 'branches-project') } let(:snippet) { create(:personal_snippet, title: 'snippet.md', content: '# snippet', file_name: 'snippet.md', author: admin) } - let!(:snippet_note) { create(:discussion_note_on_snippet, noteable: snippet, project: project, author: admin, note: '- [ ] Task List Item') } render_views @@ -17,6 +16,7 @@ describe SnippetsController, '(JavaScript fixtures)', type: :controller do before do sign_in(admin) + allow(Discussion).to receive(:build_discussion_id).and_return(['discussionid:ceterumcenseo']) end after do @@ -24,6 +24,8 @@ describe SnippetsController, '(JavaScript fixtures)', type: :controller do end it 'snippets/show.html.raw' do |example| + create(:discussion_note_on_snippet, noteable: snippet, project: project, author: admin, note: '- [ ] Task List Item') + get(:show, params: { id: snippet.to_param }) expect(response).to be_success diff --git a/spec/javascripts/fixtures/u2f.rb b/spec/javascripts/fixtures/u2f.rb index f0aa874bf75..5cdbadef639 100644 --- a/spec/javascripts/fixtures/u2f.rb +++ b/spec/javascripts/fixtures/u2f.rb @@ -3,7 +3,7 @@ require 'spec_helper' context 'U2F' do include JavaScriptFixturesHelpers - let(:user) { create(:user, :two_factor_via_u2f) } + let(:user) { create(:user, :two_factor_via_u2f, otp_secret: 'otpsecret:coolkids') } before(:all) do clean_frontend_fixtures('u2f/') @@ -33,6 +33,7 @@ context 'U2F' do before do sign_in(user) + allow_any_instance_of(Profiles::TwoFactorAuthsController).to receive(:build_qr_code).and_return('qrcode:blackandwhitesquares') end it 'u2f/register.html.raw' do |example| diff --git a/spec/javascripts/import_projects/components/provider_repo_table_row_spec.js b/spec/javascripts/import_projects/components/provider_repo_table_row_spec.js index 7191fc923ce..69377f8d685 100644 --- a/spec/javascripts/import_projects/components/provider_repo_table_row_spec.js +++ b/spec/javascripts/import_projects/components/provider_repo_table_row_spec.js @@ -49,6 +49,19 @@ describe('ProviderRepoTableRow', () => { expect(vm.$el.querySelector('.js-import-button')).not.toBeNull(); }); + it('renders a select2 namespace select', () => { + vm = createComponent(); + + const dropdownTrigger = vm.$el.querySelector('.js-namespace-select'); + + expect(dropdownTrigger).not.toBeNull(); + expect(dropdownTrigger.classList.contains('select2-container')).toBe(true); + + dropdownTrigger.click(); + + expect(vm.$el.querySelector('.select2-drop')).not.toBeNull(); + }); + it('imports repo when clicking import button', done => { const importPath = '/import-path'; const defaultTargetNamespace = 'user'; diff --git a/spec/javascripts/lib/utils/common_utils_spec.js b/spec/javascripts/lib/utils/common_utils_spec.js index c02e37950f8..0bb43c94f6a 100644 --- a/spec/javascripts/lib/utils/common_utils_spec.js +++ b/spec/javascripts/lib/utils/common_utils_spec.js @@ -409,13 +409,6 @@ describe('common_utils', () => { }); }); - describe('convertPermissionToBoolean', () => { - it('should convert a boolean in a string to a boolean', () => { - expect(commonUtils.convertPermissionToBoolean('true')).toEqual(true); - expect(commonUtils.convertPermissionToBoolean('false')).toEqual(false); - }); - }); - describe('backOff', () => { beforeEach(() => { // shortcut our timeouts otherwise these tests will take a long time to finish diff --git a/spec/javascripts/lib/utils/poll_spec.js b/spec/javascripts/lib/utils/poll_spec.js index d0da659c3d7..138041a349f 100644 --- a/spec/javascripts/lib/utils/poll_spec.js +++ b/spec/javascripts/lib/utils/poll_spec.js @@ -153,6 +153,36 @@ describe('Poll', () => { }); }); + describe('enable', () => { + it('should enable polling upon a response', done => { + jasmine.clock().install(); + + const Polling = new Poll({ + resource: service, + method: 'fetch', + data: { page: 1 }, + successCallback: () => {}, + }); + + Polling.enable({ + data: { page: 4 }, + response: { status: 200, headers: { 'poll-interval': 1 } }, + }); + + jasmine.clock().tick(1); + jasmine.clock().uninstall(); + + waitForAllCallsToFinish(service, 1, () => { + Polling.stop(); + + expect(service.fetch.calls.count()).toEqual(1); + expect(service.fetch).toHaveBeenCalledWith({ page: 4 }); + expect(Polling.options.data).toEqual({ page: 4 }); + done(); + }); + }); + }); + describe('restart', () => { it('should restart polling when its called', done => { mockServiceCall(service, { status: 200, headers: { 'poll-interval': 1 } }); @@ -171,6 +201,7 @@ describe('Poll', () => { }); spyOn(Polling, 'stop').and.callThrough(); + spyOn(Polling, 'enable').and.callThrough(); spyOn(Polling, 'restart').and.callThrough(); Polling.makeRequest(); @@ -181,6 +212,7 @@ describe('Poll', () => { expect(service.fetch.calls.count()).toEqual(2); expect(service.fetch).toHaveBeenCalledWith({ page: 4 }); expect(Polling.stop).toHaveBeenCalled(); + expect(Polling.enable).toHaveBeenCalled(); expect(Polling.restart).toHaveBeenCalled(); expect(Polling.options.data).toEqual({ page: 4 }); done(); diff --git a/spec/javascripts/monitoring/charts/area_spec.js b/spec/javascripts/monitoring/charts/area_spec.js index 0b36fc9f5f7..d334ef7ba4f 100644 --- a/spec/javascripts/monitoring/charts/area_spec.js +++ b/spec/javascripts/monitoring/charts/area_spec.js @@ -127,7 +127,7 @@ describe('Area component', () => { }); it('formats tooltip content', () => { - expect(areaChart.vm.tooltip.content).toBe('CPU (Cores) 5.556'); + expect(areaChart.vm.tooltip.content).toBe('CPU 5.556'); }); }); @@ -213,7 +213,7 @@ describe('Area component', () => { describe('yAxisLabel', () => { it('constructs a label for the chart y-axis', () => { - expect(areaChart.vm.yAxisLabel).toBe('CPU (Cores)'); + expect(areaChart.vm.yAxisLabel).toBe('CPU'); }); }); }); diff --git a/spec/lib/gitlab/project_template_spec.rb b/spec/lib/gitlab/project_template_spec.rb index 1cc2bde50e9..2cd6f35b93b 100644 --- a/spec/lib/gitlab/project_template_spec.rb +++ b/spec/lib/gitlab/project_template_spec.rb @@ -11,7 +11,12 @@ describe Gitlab::ProjectTemplate do described_class.new('jekyll', 'Pages/Jekyll', 'Everything you need to get started using a Jekyll Pages site.', 'https://gitlab.com/pages/jekyll'), described_class.new('plainhtml', 'Pages/Plain HTML', 'Everything you need to get started using a plain HTML Pages site.', 'https://gitlab.com/pages/plain-html'), described_class.new('gitbook', 'Pages/GitBook', 'Everything you need to get started using a GitBook Pages site.', 'https://gitlab.com/pages/gitbook'), - described_class.new('hexo', 'Pages/Hexo', 'Everything you need to get started using a plan Hexo Pages site.', 'https://gitlab.com/pages/hexo') + described_class.new('hexo', 'Pages/Hexo', 'Everything you need to get started using a Hexo Pages site.', 'https://gitlab.com/pages/hexo'), + described_class.new('nfhugo', 'Netlify/Hugo', _('A Hugo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfhugo'), + described_class.new('nfjekyll', 'Netlify/Jekyll', _('A Jekyll site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfjekyll'), + described_class.new('nfplainhtml', 'Netlify/Plain HTML', _('A plain HTML site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfplain-html'), + described_class.new('nfgitbook', 'Netlify/GitBook', _('A GitBook site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfgitbook'), + described_class.new('nfhexo', 'Netlify/Hexo', _('A Hexo site that uses Netlify for CI/CD instead of GitLab, but still with all the other great GitLab features.'), 'https://gitlab.com/pages/nfhexo') ] expect(described_class.all).to be_an(Array) diff --git a/spec/lib/gitlab/tracing_spec.rb b/spec/lib/gitlab/tracing_spec.rb index 2cddc895026..566b5050e47 100644 --- a/spec/lib/gitlab/tracing_spec.rb +++ b/spec/lib/gitlab/tracing_spec.rb @@ -44,12 +44,15 @@ describe Gitlab::Tracing do describe '.tracing_url' do where(:tracing_url_enabled?, :tracing_url_template, :correlation_id, :process_name, :tracing_url) do - false | "https://localhost" | "123" | "web" | nil - true | "https://localhost" | "123" | "web" | "https://localhost" - true | "https://localhost?service=%{service}" | "123" | "web" | "https://localhost?service=web" - true | "https://localhost?c=%{correlation_id}" | "123" | "web" | "https://localhost?c=123" - true | "https://localhost?c=%{correlation_id}&s=%{service}" | "123" | "web" | "https://localhost?c=123&s=web" - true | "https://localhost?c=%{correlation_id}" | nil | "web" | "https://localhost?c=" + false | "https://localhost" | "123" | "web" | nil + true | "https://localhost" | "123" | "web" | "https://localhost" + true | "https://localhost?service={{ service }}" | "123" | "web" | "https://localhost?service=web" + true | "https://localhost?c={{ correlation_id }}" | "123" | "web" | "https://localhost?c=123" + true | "https://localhost?c={{ correlation_id }}&s={{ service }}" | "123" | "web" | "https://localhost?c=123&s=web" + true | "https://localhost?c={{ correlation_id }}" | nil | "web" | "https://localhost?c=" + true | "https://localhost?c={{ correlation_id }}&s=%22{{ service }}%22" | "123" | "web" | "https://localhost?c=123&s=%22web%22" + true | "https://localhost?c={{correlation_id}}&s={{service}}" | "123" | "web" | "https://localhost?c=123&s=web" + true | "https://localhost?c={{correlation_id }}&s={{ service}}" | "123" | "web" | "https://localhost?c=123&s=web" end with_them do diff --git a/spec/models/appearance_spec.rb b/spec/models/appearance_spec.rb index cc76a2019ec..28d482adebf 100644 --- a/spec/models/appearance_spec.rb +++ b/spec/models/appearance_spec.rb @@ -63,4 +63,19 @@ describe Appearance do %i(logo header_logo favicon).each do |logo_type| it_behaves_like 'logo paths', logo_type end + + describe 'validations' do + let(:triplet) { '#000' } + let(:hex) { '#AABBCC' } + + it { is_expected.to allow_value(nil).for(:message_background_color) } + it { is_expected.to allow_value(triplet).for(:message_background_color) } + it { is_expected.to allow_value(hex).for(:message_background_color) } + it { is_expected.not_to allow_value('000').for(:message_background_color) } + + it { is_expected.to allow_value(nil).for(:message_font_color) } + it { is_expected.to allow_value(triplet).for(:message_font_color) } + it { is_expected.to allow_value(hex).for(:message_font_color) } + it { is_expected.not_to allow_value('000').for(:message_font_color) } + end end diff --git a/spec/models/clusters/applications/runner_spec.rb b/spec/models/clusters/applications/runner_spec.rb index 5e5b25cbf8a..6972fc03415 100644 --- a/spec/models/clusters/applications/runner_spec.rb +++ b/spec/models/clusters/applications/runner_spec.rb @@ -22,7 +22,7 @@ describe Clusters::Applications::Runner do it 'should be initialized with 4 arguments' do expect(subject.name).to eq('runner') expect(subject.chart).to eq('runner/gitlab-runner') - expect(subject.version).to eq('0.1.45') + expect(subject.version).to eq('0.2.0') expect(subject).to be_rbac expect(subject.repository).to eq('https://charts.gitlab.io') expect(subject.files).to eq(gitlab_runner.files) @@ -40,7 +40,7 @@ describe Clusters::Applications::Runner do let(:gitlab_runner) { create(:clusters_applications_runner, :errored, runner: ci_runner, version: '0.1.13') } it 'should be initialized with the locked version' do - expect(subject.version).to eq('0.1.45') + expect(subject.version).to eq('0.2.0') end end end diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 5d18e085a6f..6101df2e099 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -765,6 +765,15 @@ describe Issue do end end + describe '.confidential_only' do + it 'only returns confidential_only issues' do + create(:issue) + confidential_issue = create(:issue, confidential: true) + + expect(described_class.confidential_only).to eq([confidential_issue]) + end + end + it_behaves_like 'throttled touch' do subject { create(:issue, updated_at: 1.hour.ago) } end diff --git a/spec/models/prometheus_metric_spec.rb b/spec/models/prometheus_metric_spec.rb index 2b978c1c8ff..3610408c138 100644 --- a/spec/models/prometheus_metric_spec.rb +++ b/spec/models/prometheus_metric_spec.rb @@ -4,7 +4,6 @@ require 'spec_helper' describe PrometheusMetric do subject { build(:prometheus_metric) } - let(:other_project) { build(:project) } it_behaves_like 'having unique enum values' @@ -16,17 +15,17 @@ describe PrometheusMetric do describe 'common metrics' do using RSpec::Parameterized::TableSyntax - where(:common, :project, :result) do - false | other_project | true - false | nil | false - true | other_project | false - true | nil | true + where(:common, :with_project, :result) do + false | true | true + false | false | false + true | true | false + true | false | true end with_them do before do subject.common = common - subject.project = project + subject.project = with_project ? build(:project) : nil end it { expect(subject.valid?).to eq(result) } diff --git a/spec/requests/api/issuable_bulk_update_spec.rb b/spec/requests/api/issuable_bulk_update_spec.rb new file mode 100644 index 00000000000..6463f3f5d35 --- /dev/null +++ b/spec/requests/api/issuable_bulk_update_spec.rb @@ -0,0 +1,154 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::IssuableBulkUpdate do + set(:project) { create(:project) } + set(:user) { project.creator } + + shared_examples "PUT /projects/:id/:issuable/bulk_update" do |issuable| + def bulk_update(issuable, issuables, params, update_user = user) + put api("/projects/#{project.id}/#{issuable.pluralize}/bulk_update", update_user), + params: { issuable_ids: Array(issuables).map(&:id) }.merge(params) + end + + context 'with not enough permissions' do + it 'returns 403 for guest users' do + guest = create(:user) + project.add_guest(guest) + + bulk_update(issuable, issuables, { state_event: 'close' }, guest) + + expect(response).to have_gitlab_http_status(403) + end + end + + context 'when modifying the state' do + it "closes #{issuable}" do + bulk_update(issuable, issuables, { state_event: 'close' }) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['message']).to eq("#{issuables.count} #{issuable.pluralize(issuables.count)} updated") + expect(project.public_send(issuable.pluralize).opened).to be_empty + expect(project.public_send(issuable.pluralize).closed).not_to be_empty + end + + it "opens #{issuable}" do + closed_issuables = create_list("closed_#{issuable}".to_sym, 2) + + bulk_update(issuable, closed_issuables, { state_event: 'reopen' }) + + expect(response).to have_gitlab_http_status(200) + expect(project.public_send(issuable.pluralize).closed).to be_empty + end + end + + context 'when modifying the milestone' do + let(:milestone) { create(:milestone, project: project) } + + it "adds a milestone #{issuable}" do + bulk_update(issuable, issuables, { milestone_id: milestone.id }) + + expect(response).to have_gitlab_http_status(200) + issuables.each do |issuable| + expect(issuable.reload.milestone).to eq(milestone) + end + end + + it 'removes a milestone' do + issuables.first.milestone = milestone + milestone_issuable = issuables.first + + bulk_update(issuable, [milestone_issuable], { milestone_id: 0 }) + + expect(response).to have_gitlab_http_status(200) + expect(milestone_issuable.reload.milestone).to eq(nil) + end + end + + context 'when modifying the subscription state' do + it "subscribes to #{issuable}" do + bulk_update(issuable, issuables, { subscription_event: 'subscribe' }) + + expect(response).to have_gitlab_http_status(200) + expect(issuables).to all(be_subscribed(user, project)) + end + + it 'unsubscribes from issues' do + issuables.each do |issuable| + issuable.subscriptions.create(user: user, project: project, subscribed: true) + end + + bulk_update(issuable, issuables, { subscription_event: 'unsubscribe' }) + + expect(response).to have_gitlab_http_status(200) + issuables.each do |issuable| + expect(issuable).not_to be_subscribed(user, project) + end + end + end + + context 'when modifying the assignee' do + it 'adds assignee to issues' do + params = issuable == 'issue' ? { assignee_ids: [user.id] } : { assignee_id: user.id } + + bulk_update(issuable, issuables, params) + + expect(response).to have_gitlab_http_status(200) + issuables.each do |issuable| + expect(issuable.reload.assignees).to eq([user]) + end + end + + it 'removes assignee' do + assigned_issuable = issuables.first + + if issuable == 'issue' + params = { assignee_ids: 0 } + assigned_issuable.assignees << user + else + params = { assignee_id: 0 } + assigned_issuable.update_attribute(:assignee, user) + end + + bulk_update(issuable, [assigned_issuable], params) + expect(assigned_issuable.reload.assignees).to eq([]) + end + end + + context 'when modifying labels' do + let(:bug) { create(:label, project: project) } + let(:regression) { create(:label, project: project) } + let(:feature) { create(:label, project: project) } + + it 'adds new labels' do + bulk_update(issuable, issuables, { add_label_ids: [bug.id, regression.id, feature.id] }) + + issuables.each do |issusable| + expect(issusable.reload.label_ids).to contain_exactly(bug.id, regression.id, feature.id) + end + end + + it 'removes labels' do + labled_issuable = issuables.first + labled_issuable.labels << bug + labled_issuable.labels << regression + labled_issuable.labels << feature + + bulk_update(issuable, [labled_issuable], { remove_label_ids: [bug.id, regression.id] }) + + expect(labled_issuable.reload.label_ids).to contain_exactly(feature.id) + end + end + end + + it_behaves_like 'PUT /projects/:id/:issuable/bulk_update', 'issue' do + let(:issuables) { create_list(:issue, 2, project: project) } + end + + it_behaves_like 'PUT /projects/:id/:issuable/bulk_update', 'merge_request' do + let(:merge_request_1) { create(:merge_request, source_project: project) } + let(:merge_request_2) { create(:merge_request, :simple, source_project: project) } + let(:issuables) { [merge_request_1, merge_request_2] } + end +end diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index d10ee6cc320..1a4be2bd30f 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -183,6 +183,18 @@ describe API::Issues do expect_paginated_array_response([issue.id, confidential_issue.id, closed_issue.id]) end + it 'returns only confidential issues' do + get api('/issues', user), params: { confidential: true, scope: 'all' } + + expect_paginated_array_response(confidential_issue.id) + end + + it 'returns only public issues' do + get api('/issues', user), params: { confidential: false } + + expect_paginated_array_response([issue.id, closed_issue.id]) + end + it 'returns issues reacted by the authenticated user' do issue2 = create(:issue, project: project, author: user, assignees: [user]) create(:award_emoji, awardable: issue2, user: user2, name: 'star') @@ -557,6 +569,18 @@ describe API::Issues do expect_paginated_array_response([group_confidential_issue.id, group_issue.id]) end + it 'returns only confidential issues' do + get api(base_url, user), params: { confidential: true } + + expect_paginated_array_response(group_confidential_issue.id) + end + + it 'returns only public issues' do + get api(base_url, user), params: { confidential: false } + + expect_paginated_array_response([group_closed_issue.id, group_issue.id]) + end + it 'returns an array of labeled group issues' do get api(base_url, user), params: { labels: group_label.title } @@ -782,6 +806,18 @@ describe API::Issues do expect_paginated_array_response([issue.id, confidential_issue.id, closed_issue.id]) end + it 'returns only confidential issues' do + get api("#{base_url}/issues", author), params: { confidential: true } + + expect_paginated_array_response(confidential_issue.id) + end + + it 'returns only public issues' do + get api("#{base_url}/issues", author), params: { confidential: false } + + expect_paginated_array_response([issue.id, closed_issue.id]) + end + it 'returns project confidential issues for assignee' do get api("#{base_url}/issues", assignee) diff --git a/spec/requests/api/project_templates_spec.rb b/spec/requests/api/project_templates_spec.rb index ab5d4de7ff7..80e5033dab4 100644 --- a/spec/requests/api/project_templates_spec.rb +++ b/spec/requests/api/project_templates_spec.rb @@ -92,6 +92,22 @@ describe API::ProjectTemplates do expect(json_response['name']).to eq('Actionscript') end + it 'returns C++ gitignore' do + get api("/projects/#{public_project.id}/templates/gitignores/C++") + + expect(response).to have_gitlab_http_status(200) + expect(response).to match_response_schema('public_api/v4/template') + expect(json_response['name']).to eq('C++') + end + + it 'returns C++ gitignore for URL-encoded names' do + get api("/projects/#{public_project.id}/templates/gitignores/C%2B%2B") + + expect(response).to have_gitlab_http_status(200) + expect(response).to match_response_schema('public_api/v4/template') + expect(json_response['name']).to eq('C++') + end + it 'returns a specific gitlab_ci_yml' do get api("/projects/#{public_project.id}/templates/gitlab_ci_ymls/Android") @@ -125,6 +141,18 @@ describe API::ProjectTemplates do expect(response).to have_gitlab_http_status(200) expect(response).to match_response_schema('public_api/v4/license') end + + shared_examples 'path traversal attempt' do |template_type| + it 'rejects invalid filenames' do + get api("/projects/#{public_project.id}/templates/#{template_type}/%2e%2e%2fPython%2ea") + + expect(response).to have_gitlab_http_status(500) + end + end + + TemplateFinder::VENDORED_TEMPLATES.each do |template_type, _| + it_behaves_like 'path traversal attempt', template_type + end end describe 'GET /projects/:id/templates/licenses/:key' do diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index d7ddd97e8c8..91981f7c56a 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -526,6 +526,15 @@ describe API::Runner, :clean_gitlab_redis_shared_state do expect(runner.reload.ip_address).to eq('123.222.123.222') end + it "handles multiple X-Forwarded-For addresses" do + post api('/jobs/request'), + params: { token: runner.token }, + headers: { 'User-Agent' => user_agent, 'X-Forwarded-For' => '123.222.123.222, 127.0.0.1' } + + expect(response).to have_gitlab_http_status 201 + expect(runner.reload.ip_address).to eq('123.222.123.222') + end + context 'when concurrently updating a job' do before do expect_any_instance_of(Ci::Build).to receive(:run!) diff --git a/spec/support/helpers/test_env.rb b/spec/support/helpers/test_env.rb index f485eb7b0eb..06bcf4f8013 100644 --- a/spec/support/helpers/test_env.rb +++ b/spec/support/helpers/test_env.rb @@ -63,7 +63,8 @@ module TestEnv 'after-create-delete-modify-move' => 'ba3faa7', 'with-codeowners' => '219560e', 'submodule_inside_folder' => 'b491b92', - 'png-lfs' => 'fe42f41' + 'png-lfs' => 'fe42f41', + 'sha-starting-with-large-number' => '8426165' }.freeze # gitlab-test-fork is a fork of gitlab-fork, but we don't necessarily diff --git a/spec/support/shared_examples/graphql/issuable_state_shared_examples.rb b/spec/support/shared_examples/graphql/issuable_state_shared_examples.rb new file mode 100644 index 00000000000..713f0a879c1 --- /dev/null +++ b/spec/support/shared_examples/graphql/issuable_state_shared_examples.rb @@ -0,0 +1,5 @@ +RSpec.shared_examples 'issuable state' do + it 'exposes all the existing issuable states' do + expect(described_class.values.keys).to include(*%w[opened closed locked]) + end +end diff --git a/spec/views/layouts/_head.html.haml_spec.rb b/spec/views/layouts/_head.html.haml_spec.rb index 9d1efcabb80..cbb4199954a 100644 --- a/spec/views/layouts/_head.html.haml_spec.rb +++ b/spec/views/layouts/_head.html.haml_spec.rb @@ -62,6 +62,14 @@ describe 'layouts/_head' do end end + it 'adds selected syntax highlight stylesheet' do + allow_any_instance_of(PreferencesHelper).to receive(:user_color_scheme).and_return("solarised-light") + + render + + expect(rendered).to match('<link rel="stylesheet" media="all" href="/stylesheets/highlight/themes/solarised-light.css" />') + end + def stub_helper_with_safe_string(method) allow_any_instance_of(PageLayoutHelper).to receive(method) .and_return(%q{foo" http-equiv="refresh}.html_safe) diff --git a/vendor/project_templates/nfgitbook.tar.gz b/vendor/project_templates/nfgitbook.tar.gz Binary files differnew file mode 100644 index 00000000000..e10873e1a9e --- /dev/null +++ b/vendor/project_templates/nfgitbook.tar.gz diff --git a/vendor/project_templates/nfhexo.tar.gz b/vendor/project_templates/nfhexo.tar.gz Binary files differnew file mode 100644 index 00000000000..25632f241cc --- /dev/null +++ b/vendor/project_templates/nfhexo.tar.gz diff --git a/vendor/project_templates/nfhugo.tar.gz b/vendor/project_templates/nfhugo.tar.gz Binary files differnew file mode 100644 index 00000000000..14e6289b841 --- /dev/null +++ b/vendor/project_templates/nfhugo.tar.gz diff --git a/vendor/project_templates/nfjekyll.tar.gz b/vendor/project_templates/nfjekyll.tar.gz Binary files differnew file mode 100644 index 00000000000..3b93f8661b5 --- /dev/null +++ b/vendor/project_templates/nfjekyll.tar.gz diff --git a/vendor/project_templates/nfplainhtml.tar.gz b/vendor/project_templates/nfplainhtml.tar.gz Binary files differnew file mode 100644 index 00000000000..cdf5ea9fe12 --- /dev/null +++ b/vendor/project_templates/nfplainhtml.tar.gz diff --git a/yarn.lock b/yarn.lock index 9ecb2b82f8f..3143524e331 100644 --- a/yarn.lock +++ b/yarn.lock @@ -653,10 +653,10 @@ eslint-plugin-promise "^4.0.1" eslint-plugin-vue "^5.0.0" -"@gitlab/svgs@^1.53.0": - version "1.53.0" - resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.53.0.tgz#a0c463953f24ff07a5871a68d3e9ae3cb45e5267" - integrity sha512-u4AqIKCVcnG727BLW6wxRkXDfDexD4KlT2JxiPtKBJLmA6mwhSiCCD3ZDMd5W+bbTfl48KdcuV03MXmiqyONNw== +"@gitlab/svgs@^1.54.0": + version "1.54.0" + resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.54.0.tgz#00320e845efd46716042cde0c348b990d4908daf" + integrity sha512-DR17iy8TM5IbXEacqiDP0p8SuC/J8EL+98xbfVz5BKvRsPHpeZJQNlBF/petIV5d+KWM5A9v3GZTY7uMU7z/JQ== "@gitlab/ui@^2.0.4": version "2.0.4" |