diff options
445 files changed, 1997 insertions, 1561 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d1e324c5518..9be6c68c6ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,335 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.6.4 (2019-01-15) + +### Security (1 change) + +- Validate bundle files before unpacking them. + + +## 11.6.3 (2019-01-04) + +### Fixed (1 change) + +- Fix clone URL not showing if protocol is HTTPS. !24131 + + +## 11.6.2 (2019-01-02) + +### Fixed (7 changes) + +- Hide cluster features that don't work yet with Group Clusters. !23935 +- Fix a 500 error that could occur until all migrations are done. !23939 +- Fix missing Git clone button when protocol restriction setting enabled. !24015 +- Fix clone dropdown parent inheritance issues in HAML. !24029 +- Fix content-disposition in blobs and files API endpoint. !24078 +- Fixed markdown toolbar buttons. +- Adjust line-height of blame view line numbers. + + +## 11.6.1 (2018-12-28) + +### Security (15 changes) + +- Escape label and milestone titles to prevent XSS in GFM autocomplete. !2740 +- Prevent private snippets from being embeddable. +- Add subresources removal to member destroy service. +- Escape html entities in LabelReferenceFilter when no label found. +- Allow changing group CI/CD settings only for owners. +- Authorize before reading job information via API. +- Prevent leaking protected variables for ambiguous refs. +- Ensure that build token is only used when running. +- Issuable no longer is visible to users when project can't be viewed. +- Don't expose cross project repositories through diffs when creating merge reqeusts. +- Fix SSRF with import_url and remote mirror url. +- Fix persistent symlink in project import. +- Set URL rel attribute for broken URLs. +- Project guests no longer are able to see refs page. +- Delete confidential todos for user when downgraded to Guest. + +### Other (1 change) + +- Fix due date test. !23845 + + +## 11.6.0 (2018-12-22) + +### Security (24 changes, 1 of them is from the community) + +- Fix possible XSS attack in Markdown urls with spaces. !2599 +- Update rack to 2.0.6 (for QA environments). !23171 (Takuya Noguchi) +- Bump nokogiri, loofah, and rack gems for security updates. !23204 +- Encrypt runners tokens. !23412 +- Encrypt CI/CD builds authentication tokens. !23436 +- Configure mermaid to not render HTML content in diagrams. +- Fix a possible symlink time of check to time of use race condition in GitLab Pages. +- Removed ability to see private group names when the group id is entered in the url. +- Fix stored XSS for Environments. +- Fix persistent symlink in project import. +- Fixed ability of guest users to edit/delete comments on locked or confidential issues. +- Fixed ability to comment on locked/confidential issues. +- Fix CRLF vulnerability in Project hooks. +- Fix SSRF in project integrations. +- Resolve reflected XSS in Ouath authorize window. +- Restrict Personal Access Tokens to API scope on web requests. +- Provide email notification when a user changes their email address. +- Don't expose confidential information in commit message list. +- Validate LFS hrefs before downloading them. +- Do not follow redirects in Prometheus service when making http requests to the configured api url. +- Escape user fullname while rendering autocomplete template to prevent XSS. +- Redact sensitive information on gitlab-workhorse log. +- Fix milestone promotion authorization check. +- Prevent a path traversal attack on global file templates. + +### Removed (1 change) + +- Remove obsolete gitlab_shell rake tasks. !22417 + +### Fixed (86 changes, 13 of them are from the community) + +- Remove limit of 100 when searching repository code. !8671 +- Show error message when attempting to reopen an MR and there is an open MR for the same branch. !16447 (Akos Gyimesi) +- Fix a bug where internal email pattern wasn't respected. !22516 +- Fix project selector consistency in groups issues / MRs / boards pages. !22612 (Heinrich Lee Yu) +- Add empty state for graphs with no values. !22630 +- Fix navigating by unresolved discussions on Merge Request page. !22789 +- Fix "merged with [commit]" info for merge requests being merged automatically by other actions. !22794 +- Fixing regression issues on pages settings and details. !22821 +- Remove duplicate primary button in dashboard snippets on small viewports. !22902 (George Tsiolis) +- Fix API::Namespaces routing to accept namepaces with dots. !22912 +- Switch kubernetes:active with checking in Auto-DevOps.gitlab-ci.yml. !22929 +- Avoid Gitaly RPC errors when fetching diff stats. !22995 +- Removes promote to group label for anonymous user. !23042 (Jacopo Beschi @jacopo-beschi) +- Fix enabling project deploy key for admins. !23043 +- Align issue status label and confidential icon. !23046 (George Tsiolis) +- Fix default sorting for subgroups and projects list. !23058 (Jacopo Beschi @jacopo-beschi) +- Hashed Storage: allow migration to be retried in partially migrated projects. !23087 +- Fix line height of numbers in file blame view. !23090 (Johann Hubert Sonntagbauer) +- Fixes an issue where default values from models would override values set in the interface (e.g. users would be set to external even though their emails matches the internal email address pattern). !23114 +- Remove display of local Sidekiq process in /admin/sidekiq. !23118 +- Fix unrelated deployment status in MR widget. !23175 +- Respect confirmed flag on secondary emails. !23181 +- Restrict member access level to be higher than that of any parent group. !23226 +- Return real deployment status to frontend. !23270 +- Handle force_remove_source_branch when creating merge request. !23281 +- Avoid creating invalid refs using rugged, shelling out for writing refs. !23286 +- Remove needless auto-capitalization on Wiki page titles. !23288 +- Modify the wording for the knative cluster application to match upstream. !23289 (Chris Baumbauer) +- Change container width for project import. !23318 (George Tsiolis) +- Validate chunk size when persist. !23341 +- Resolve Main navbar is broken in certain viewport widths. !23348 +- Gracefully handle references with null bytes. !23365 +- Display commit ID for commit diff discussion on merge request. !23370 +- Pass commit when posting diff discussions. !23371 +- Fix flash notice styling for fluid layout. !23382 +- Add monkey patch to unicorn to fix eof? problem. !23385 +- Commits API: Preserve file content in move operations if unspecified. !23387 +- Disable password autocomplete in mirror form fill. !23402 +- Fix "protected branches only" checkbox not set properly at init. !23409 +- Support RSA and ECDSA algorithms in Omniauth JWT provider. !23411 (Michael Tsyganov) +- Make KUBECONFIG nil if KUBE_TOKEN is nil. !23414 +- Allow search and sort users at same time on admin users page. !23439 +- Fix: Unstar icon button is misaligned. !23444 +- Fix error when searching for group issues with priority or popularity sort. !23445 +- Fix Order By dropdown menu styling in tablet and mobile screens. !23446 +- Fix collapsing discussion replies. !23462 +- Gracefully handle unknown/invalid GPG keys. !23492 +- Fix multiple commits shade overlapping vertical discussion line. !23515 +- Use read_repository scope on read-only files API. !23534 +- Avoid 500's when serializing legacy diff notes. !23544 +- Fix web hook functionality when the database encryption key is too short. !23573 +- Hide Knative from group cluster applications until supported. !23577 +- Add top padding for nested environment items loading icon. !23580 (George Tsiolis) +- Improve help and validation sections of maximum build timeout inputs. !23586 +- Fix milestone select in issue sidebar of issue boards. !23625 +- Fix gitlab:web_hook tasks. !23635 +- Avoid caching BroadcastMessage as an ActiveRecord object. !23662 +- Only allow strings in URL::Sanitizer.valid?. !23675 +- Fix a frozen string error in app/mailers/notify.rb. !23683 +- Fix a frozen string error in lib/gitlab/utils.rb. !23690 +- Fix MR resolved discussion counts being too low. !23710 +- Fix a potential frozen string error in app/mailers/notify.rb. !23728 +- Remove unnecessary div from MarkdownField to apply list styles correctly. !23733 +- Display reply field if resolved discussion has no replies. !23801 +- Restore kubernetes:active in Auto-DevOps.gitlab-ci.yml (reverts 22929). !23826 +- Fix mergeUrlParams with fragment URL. !54218 (Thomas Holder) +- Fixed multiple diff line discussions not expanding. +- Fixed diff files expanding not loading commit content. +- Fixed styling of image comment badges on commits. +- Resolve possible cherry pick API race condition. +- When user clicks linenumber in MR changes, highlight that line. +- Remove old webhook logs after 90 days, as documented, instead of after 2. +- Add an external IP address to the knative cluster application page. (Chris Baumbauer) +- Fixed duplicate discussions getting added to diff lines. +- Fix deadlock on ChunkedIO. +- Show tree collapse button for merge request commit diffs. +- Use approximate count for big tables for usage statistics. +- Lock writes to trace stream. +- Ensure that SVG sprite icons are properly rendered in IE11. +- Make new branch form fields' fonts consistent. +- Open first 10 merge request files in IDE. +- Prevent user from navigating away from file edit without commit. +- Prevent empty button being rendered in empty state. +- Adds margins between tags when a job is stuck. +- Fix Image Lazy Loader for some older browsers. +- Correctly styles tags in sidebar for job page. + +### Changed (34 changes, 9 of them are from the community) + +- Include new link in breadcrumb for issues, merge requests, milestones, and labels. !18515 (George Tsiolis) +- Allow sorting issues and MRs in reverse order. !21438 +- Design improvements to project overview page. !22196 +- Remove auto deactivation when failed to create a pipeline via pipeline schedules. !22243 +- Use group clusters when deploying (DeploymentPlatform). !22308 +- Improve initial discussion rendering performance. !22607 +- removes partially matching of No Label filter and makes it case-insensitive. !22622 (Jacopo Beschi @jacopo-beschi) +- Use search bar for filtering in dashboard issues / MRs. !22641 (Heinrich Lee Yu) +- Show different empty state for filtered issues and MRs. !22775 (Heinrich Lee Yu) +- Relocate JSONWebToken::HMACToken from EE. !22906 +- Resolve Add border around the repository file tree. !23018 +- Change breadcrumb title for contribution charts. !23071 (George Tsiolis) +- Update environments metrics empty state. !23074 (George Tsiolis) +- Refine cursor positioning in Markdown Editor for wrap tags. !23085 (Johann Hubert Sonntagbauer) +- Use reports syntax for SAST in Auto DevOps. !23163 +- SystemCheck: Use a more reliable way to detect current Ruby version. !23291 +- Changed frontmatter filtering to support YAML, JSON, TOML, and arbitrary languages. !23331 (Travis Miller) +- Don't remove failed install pods after installing GitLab managed applications. !23350 +- Expose merge request pipeline variables. !23398 +- Scope default MR search in WebIDE dropdown to current project. !23400 +- Show user contributions in correct timezone within user profile. !23419 +- Redesign of MR header sections (CE). !23465 +- Auto DevOps: Add echo for each branch of the deploy() function where we run helm upgrade. !23499 +- Updates service to update Kubernetes project namespaces and restricted service account if present. !23525 +- Adjust divider margin to comply with design specs. !23548 +- Adjust dropdown item and header padding to comply with design specs. !23552 +- Truncate merge request titles with periods instead of ellipsis. !23558 +- Remove close icon from projects dropdown in issue boards. !23567 +- Change dropdown divider color to gray-200 (#dfdfdf). !23592 +- Define the default value for only/except policies. !23765 +- Don't show Memory Usage for unmerged MRs. +- reorder notification settings by noisy-ness. (C.J. Jameson) +- Changed merge request filtering to be by path instead of name. +- Make diff file headers sticky. + +### Performance (22 changes, 6 of them are from the community) + +- Upgrade to Ruby 2.5.3. !2806 +- Removes all the irrelevant code and columns that were migrated from the Project table over to the ProjectImportState table. !21497 +- Approximate counting strategy with TABLESAMPLE. !22650 +- Replace tooltip directive with gl-tooltip diretive in badges, cycle analytics, and diffs. !22770 (George Tsiolis) +- Validate foreign keys being created and indexed for column with _id. !22808 +- Remove monospace extend. !23089 (George Tsiolis) +- Use Nokogiri as the ActiveSupport XML backend. !23136 +- Improve memory performance by reducing dirty pages after fork(). !23169 +- Add partial index for ci_builds on project_id and status. !23268 +- Reduce Gitaly calls in projects dashboard. !23307 +- Batch load only data from same repository when lazy object is accessed. !23309 +- Add index for events on project_id and created_at. !23354 +- Remove index for notes on updated_at. !23356 +- Improves performance of Project#readme_url by caching the README path. !23357 +- Populate MR metrics with events table information (migration). !23564 +- Remove unused data from discussions endpoint. !23570 +- Speed up issue board lists in groups with many projects. +- Use cached size when passing artifacts to Runner. +- Enable even more frozen string for lib/gitlab. (gfyoung) +- Enable even more frozen string in lib/gitlab/**/*.rb. (gfyoung) +- Enable even more frozen string in lib/gitlab/**/*.rb. (gfyoung) +- Enable even more frozen string for lib/gitlab. (gfyoung) + +### Added (32 changes, 13 of them are from the community) + +- Add ability to create group level clusters and install gitlab managed applications. !22450 +- Creates /create_merge_request quickaction. !22485 (Jacopo Beschi @jacopo-beschi) +- Filter by None/Any for labels in issues/mrs API. !22622 (Jacopo Beschi @jacopo-beschi) +- Chat message push notifications now include links back to GitLab branches. !22651 (Tony Castrogiovanni) +- Added feature flag to signal content headers detection by Workhorse. !22667 +- Add Discord integration. !22684 (@blackst0ne) +- Upgrade helm to 2.11.0 and upgrade on every install. !22693 +- Add knative client to kubeclient library. !22968 (cab105) +- Allow SSH public-key authentication for push mirroring. !22982 +- Allow deleting a Pipeline via the API. !22988 +- #40635: Adds support for cert-manager. !23036 (Amit Rathi) +- WebIDE: Pressing Ctrl-Enter while typing on the commit message now performs the commit action. !23049 (Thomas Pathier) +- Adds Any option to label filters. !23111 (Jacopo Beschi @jacopo-beschi) +- Added glob for CI changes detection. !23128 (Kirill Zaitsev) +- Add model and relation to store repo full path in database. !23143 +- Add ability to render suggestions. !23147 +- Introduce Knative and Serverless Components. !23174 (Chris Baumbauer) +- Use BFG object maps to clean projects. !23189 +- Merge request pipelines. !23217 +- Extended user centric tooltips on issue and MR page. !23231 +- Add a rebase API endpoint for merge requests. !23296 +- Add config to prohibit impersonation. !23338 +- Merge request pipeline tag, and adds tags to pipeline view. !23364 +- #52753: HTTPS for JupyterHub installation. !23479 (Amit Rathi) +- Fill project_repositories for hashed storage projects. !23482 +- Ability to override email for cert-manager. !23503 (Amit Rathi) +- Allow public forks to be deduplicated. !23508 +- Pipeline trigger variable values are hidden in the UI by default. Maintainers have the option to reveal them. !23518 (jhampton) +- Add new endpoint to download single artifact file for a ref. !23538 +- Log and pass correlation-id between Unicorn, Sidekiq and Gitaly. +- Allow user to scroll to top of tab on MR page. +- Adds states to the deployment widget. + +### Other (54 changes, 30 of them are from the community) + +- Switch to Rails 5. !21492 +- Migration to write fullpath in all repository configs. !22322 +- Rails5: env is deprecated and will be removed from Rails 5.1. !22626 (Jasper Maes) +- Update haml_lint to 0.28.0. !22660 (Takuya Noguchi) +- Update ffaker to 2.10.0. !22661 (Takuya Noguchi) +- Drop gcp_clusters table. !22713 +- Upgrade minimum required Git version to 2.18.0. !22803 +- Adds new icon size to Vue icon component. !22899 +- Make sure there's only one slash as path separator. !22954 +- Show HTTP response code for Kubernetes errors. !22964 +- Update config map for gitlab managed application if already present on install. !22969 +- Drop default value on status column in deployments table. !22971 +- UI improvements to user's profile. !22977 +- Update asana to 0.8.1. !23039 (Takuya Noguchi) +- Update asciidoctor to 1.5.8. !23047 (Takuya Noguchi) +- Make auto-generated icons for subgroups in the breadcrumb dropdown display as a circle. !23062 (Thomas Pathier) +- Make reply shortcut only quote selected discussion text. !23096 (Thomas Pathier) +- Fix typo in notebook props. !23103 (George Tsiolis) +- Fix typos in lib. !23106 (George Tsiolis) +- Rename diffs store variable. !23123 (George Tsiolis) +- Fix overlapping navbar separator and overflowing navbar dropdown on small displays. !23126 (Thomas Pathier) +- Show what RPC is called in the performance bar. !23140 +- Updated Gitaly to v0.133.0. !23148 +- Rails5: Passing a class as a value in an Active Record query is deprecated. !23164 (Jasper Maes) +- Fix project identicon aligning Harry Kiselev. !23166 (Harry Kiselev) +- Fix horizontal scrollbar overlapping on horizontal scrolling-tabs. !23167 (Harry Kiselev) +- Fix bottom paddings of profile header and some markup updates of profile. !23168 (Harry Kiselev) +- Fixes to AWS documentation spelling and grammar. !23198 (Brendan O'Leary) +- Adds a PHILOSOPHY.md which references GitLab Product Handbook. !23200 +- Externalize strings from `/app/views/invites`. !23205 (Tao Wang) +- Externalize strings from `/app/views/project/runners`. !23208 (Tao Wang) +- Fix typo for scheduled pipeline. !23218 (Davy Defaud) +- Force content disposition attachment to several endpoints. !23223 +- Upgrade kubeclient to 4.0.0. !23261 (Praveen Arimbrathodiyil @pravi) +- Update used version of Runner Helm Chart to 0.1.38. !23304 +- render :nothing option is deprecated, Use head method to respond with empty response body. !23311 (Jasper Maes) +- Passing an argument to force an association to reload is now deprecated. !23334 (Jasper Maes) +- Externalize strings from `/app/views/snippets`. !23351 (Tao Wang) +- Fix deprecation: You are passing an instance of ActiveRecord::Base to. !23369 (Jasper Maes) +- Resolve status emoji being replaced by avatar on mobile. !23408 +- Fix deprecation: render :text is deprecated because it does not actually render a text/plain response. !23425 (Jasper Maes) +- Fix lack of documentation on how to fetch a snippet's content using API. !23448 (Colin Leroy) +- Upgrade GitLab Workhorse to v7.3.0. !23489 +- Fallback to admin KUBE_TOKEN for project clusters only. !23527 +- Update used version of Runner Helm Chart to 0.1.39. !23633 +- Show primary button when all labels are prioritized. !23648 (George Tsiolis) +- Upgrade workhorse to 7.6.0. !23694 +- Upgrade Gitaly to v1.7.1 for correlation-id logging. !23732 +- Fix due date test. !23845 +- Remove unused project method. !54103 (George Tsiolis) +- Uses new gitlab-ui components in Jobs and Pipelines components. +- Replaces tooltip directive with the new gl-tooltip directive for consistency in some ci/cd code. +- Bump gpgme gem version from 2.0.13 to 2.0.18. (asaparov) +- Enable Rubocop on lib/gitlab. (gfyoung) + + ## 11.5.3 (2018-12-06) ### Security (1 change) @@ -181,7 +181,7 @@ gem 'acts-as-taggable-on', '~> 5.0' gem 'sidekiq', '~> 5.2.1' gem 'sidekiq-cron', '~> 0.6.0' gem 'redis-namespace', '~> 1.6.0' -gem 'gitlab-sidekiq-fetcher', '~> 0.1.0', require: 'sidekiq-reliable-fetch' +gem 'gitlab-sidekiq-fetcher', '~> 0.4.0', require: 'sidekiq-reliable-fetch' # Cron Parser gem 'rufus-scheduler', '~> 3.4' diff --git a/Gemfile.lock b/Gemfile.lock index 7bc8fdbcb09..96bbfa7d4e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -280,7 +280,7 @@ GEM gitlab-default_value_for (3.1.1) activerecord (>= 3.2.0, < 6.0) gitlab-markup (1.6.5) - gitlab-sidekiq-fetcher (0.1.0) + gitlab-sidekiq-fetcher (0.4.0) sidekiq (~> 5) gitlab-styles (2.4.1) rubocop (~> 0.54.0) @@ -1011,7 +1011,7 @@ DEPENDENCIES github-markup (~> 1.7.0) gitlab-default_value_for (~> 3.1.1) gitlab-markup (~> 1.6.5) - gitlab-sidekiq-fetcher (~> 0.1.0) + gitlab-sidekiq-fetcher (~> 0.4.0) gitlab-styles (~> 2.4) gitlab_omniauth-ldap (~> 2.0.4) gon (~> 6.2) diff --git a/Gemfile.rails4.lock b/Gemfile.rails4.lock index 15c188e9d66..4518d117fdd 100644 --- a/Gemfile.rails4.lock +++ b/Gemfile.rails4.lock @@ -277,7 +277,7 @@ GEM grpc (~> 1.0) github-markup (1.7.0) gitlab-markup (1.6.5) - gitlab-sidekiq-fetcher (0.1.0) + gitlab-sidekiq-fetcher (0.4.0) sidekiq (~> 5) gitlab-styles (2.4.1) rubocop (~> 0.54.0) @@ -1002,7 +1002,7 @@ DEPENDENCIES gitaly-proto (~> 1.3.0) github-markup (~> 1.7.0) gitlab-markup (~> 1.6.5) - gitlab-sidekiq-fetcher (~> 0.1.0) + gitlab-sidekiq-fetcher (~> 0.4.0) gitlab-styles (~> 2.4) gitlab_omniauth-ldap (~> 2.0.4) gon (~> 6.2) @@ -1160,4 +1160,4 @@ DEPENDENCIES wikicloth (= 0.8.1) BUNDLED WITH - 1.17.1 + 1.17.3 @@ -1 +1 @@ -11.6.0-rc8 +11.6.4 diff --git a/app/assets/javascripts/environments/components/environment_item.vue b/app/assets/javascripts/environments/components/environment_item.vue index cd2f46fd07a..f44806d82a6 100644 --- a/app/assets/javascripts/environments/components/environment_item.vue +++ b/app/assets/javascripts/environments/components/environment_item.vue @@ -14,6 +14,7 @@ import MonitoringButtonComponent from './environment_monitoring.vue'; import CommitComponent from '../../vue_shared/components/commit.vue'; import eventHub from '../event_hub'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; +import { CLUSTER_TYPE } from '~/clusters/constants'; /** * Environment Item Component @@ -85,6 +86,15 @@ export default { }, /** + * Hide group cluster features which are not currently implemented. + * + * @returns {Boolean} + */ + disableGroupClusterFeatures() { + return this.model && this.model.cluster_type === CLUSTER_TYPE.GROUP; + }, + + /** * Returns whether the environment can be stopped. * * @returns {Boolean} @@ -547,6 +557,7 @@ export default { <terminal-button-component v-if="model && model.terminal_path" :terminal-path="model.terminal_path" + :disabled="disableGroupClusterFeatures" /> <rollback-component diff --git a/app/assets/javascripts/environments/components/environment_terminal_button.vue b/app/assets/javascripts/environments/components/environment_terminal_button.vue index 83727caad16..6d74d136a94 100644 --- a/app/assets/javascripts/environments/components/environment_terminal_button.vue +++ b/app/assets/javascripts/environments/components/environment_terminal_button.vue @@ -19,6 +19,11 @@ export default { required: false, default: '', }, + disabled: { + type: Boolean, + required: false, + default: false, + }, }, computed: { title() { @@ -33,6 +38,7 @@ export default { :title="title" :aria-label="title" :href="terminalPath" + :class="{ disabled: disabled }" class="btn terminal-button d-none d-sm-none d-md-block" > <icon name="terminal" /> diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js index c14eb936930..8178821be3d 100644 --- a/app/assets/javascripts/gfm_auto_complete.js +++ b/app/assets/javascripts/gfm_auto_complete.js @@ -256,7 +256,7 @@ class GfmAutoComplete { displayTpl(value) { let tmpl = GfmAutoComplete.Loading.template; if (value.title != null) { - tmpl = GfmAutoComplete.Milestones.template; + tmpl = GfmAutoComplete.Milestones.templateFunction(value.title); } return tmpl; }, @@ -323,7 +323,7 @@ class GfmAutoComplete { searchKey: 'search', data: GfmAutoComplete.defaultLoadingData, displayTpl(value) { - let tmpl = GfmAutoComplete.Labels.template; + let tmpl = GfmAutoComplete.Labels.templateFunction(value.color, value.title); if (GfmAutoComplete.isLoading(value)) { tmpl = GfmAutoComplete.Loading.template; } @@ -588,9 +588,11 @@ GfmAutoComplete.Members = { }, }; GfmAutoComplete.Labels = { - template: - // eslint-disable-next-line no-template-curly-in-string - '<li><span class="dropdown-label-box" style="background: ${color}"></span> ${title}</li>', + templateFunction(color, title) { + return `<li><span class="dropdown-label-box" style="background: ${_.escape( + color, + )}"></span> ${_.escape(title)}</li>`; + }, }; // Issues, MergeRequests and Snippets GfmAutoComplete.Issues = { @@ -600,8 +602,9 @@ GfmAutoComplete.Issues = { }; // Milestones GfmAutoComplete.Milestones = { - // eslint-disable-next-line no-template-curly-in-string - template: '<li>${title}</li>', + templateFunction(title) { + return `<li>${_.escape(title)}</li>`; + }, }; GfmAutoComplete.Loading = { template: diff --git a/app/assets/javascripts/lib/utils/text_markdown.js b/app/assets/javascripts/lib/utils/text_markdown.js index c095a017866..1254ec798a6 100644 --- a/app/assets/javascripts/lib/utils/text_markdown.js +++ b/app/assets/javascripts/lib/utils/text_markdown.js @@ -82,7 +82,7 @@ export function insertMarkdownText({ tag, cursorOffset, blockTag, - selected, + selected = '', wrap, select, }) { @@ -212,7 +212,7 @@ export function addMarkdownListeners(form) { blockTag: $this.data('mdBlock'), wrap: !$this.data('mdPrepend'), select: $this.data('mdSelect'), - tagContent: $this.data('mdTagContent').toString(), + tagContent: $this.data('mdTagContent'), }); }); } diff --git a/app/assets/javascripts/pipelines/components/pipeline_url.vue b/app/assets/javascripts/pipelines/components/pipeline_url.vue index 30a5bbf92ce..7d8863dff29 100644 --- a/app/assets/javascripts/pipelines/components/pipeline_url.vue +++ b/app/assets/javascripts/pipelines/components/pipeline_url.vue @@ -65,7 +65,7 @@ export default { v-if="pipeline.flags.latest" v-gl-tooltip class="js-pipeline-url-latest badge badge-success" - title="__('Latest pipeline for this branch')" + :title="__('Latest pipeline for this branch')" > latest </span> @@ -100,7 +100,7 @@ export default { <span v-if="pipeline.flags.merge_request" v-gl-tooltip - title="__('This pipeline is run in a merge request context')" + :title="__('This pipeline is run in a merge request context')" class="js-pipeline-url-mergerequest badge badge-info" > merge request diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss index 3ac7b6b704b..037a5adfb7e 100644 --- a/app/assets/stylesheets/framework/files.scss +++ b/app/assets/stylesheets/framework/files.scss @@ -24,7 +24,7 @@ } } - &:not(.use-csslab) table { + table { @extend .table; } diff --git a/app/assets/stylesheets/framework/highlight.scss b/app/assets/stylesheets/framework/highlight.scss index 73533571a2f..946f575ac13 100644 --- a/app/assets/stylesheets/framework/highlight.scss +++ b/app/assets/stylesheets/framework/highlight.scss @@ -42,7 +42,6 @@ padding: 10px; text-align: right; float: left; - line-height: 1; a { font-family: $monospace-font; @@ -69,3 +68,9 @@ } } } + +// Vertically aligns <table> line numbers (eg. blame view) +// see https://gitlab.com/gitlab-org/gitlab-ce/issues/54048 +td.line-numbers { + line-height: 1; +} diff --git a/app/assets/stylesheets/framework/modal.scss b/app/assets/stylesheets/framework/modal.scss index 7e30747963a..95291b4a9ad 100644 --- a/app/assets/stylesheets/framework/modal.scss +++ b/app/assets/stylesheets/framework/modal.scss @@ -25,8 +25,8 @@ &.w-100 { // after upgrading to Bootstrap 4.2 we can use $modal-header-padding-x here // https://github.com/twbs/bootstrap/pull/26976 - margin-right: -2rem; - padding-right: 2rem; + margin-right: -28px; + padding-right: 28px; } } diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 4449193c104..ff8f74727f0 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -198,6 +198,7 @@ $well-light-text-color: #5b6169; $gl-font-size: 14px; $gl-font-size-xs: 11px; $gl-font-size-small: 12px; +$gl-font-size-medium: 20px; $gl-font-size-large: 16px; $gl-font-weight-normal: 400; $gl-font-weight-bold: 600; diff --git a/app/assets/stylesheets/framework/variables_overrides.scss b/app/assets/stylesheets/framework/variables_overrides.scss index 5ca76bb6c5a..069f45bff49 100644 --- a/app/assets/stylesheets/framework/variables_overrides.scss +++ b/app/assets/stylesheets/framework/variables_overrides.scss @@ -28,3 +28,9 @@ $popover-border-width: 1px; $popover-border-color: $border-color; $popover-box-shadow: 0 $border-radius-small $border-radius-default 0 $shadow-color; $popover-arrow-outer-color: $shadow-color; +$h1-font-size: 14px * 2.5; +$h2-font-size: 14px * 2; +$h3-font-size: 14px * 1.75; +$h4-font-size: 14px * 1.5; +$h5-font-size: 14px * 1.25; +$h6-font-size: 14px; diff --git a/app/controllers/concerns/membership_actions.rb b/app/controllers/concerns/membership_actions.rb index ca713192c9e..6402e01ddc0 100644 --- a/app/controllers/concerns/membership_actions.rb +++ b/app/controllers/concerns/membership_actions.rb @@ -35,7 +35,9 @@ module MembershipActions respond_to do |format| format.html do - message = "User was successfully removed from #{source_type}." + source = source_type == 'group' ? 'group and any subresources' : source_type + + message = "User was successfully removed from #{source}." redirect_to members_page_url, notice: message end diff --git a/app/controllers/groups/settings/ci_cd_controller.rb b/app/controllers/groups/settings/ci_cd_controller.rb index c1dcc463de7..f476f428fdb 100644 --- a/app/controllers/groups/settings/ci_cd_controller.rb +++ b/app/controllers/groups/settings/ci_cd_controller.rb @@ -4,7 +4,7 @@ module Groups module Settings class CiCdController < Groups::ApplicationController skip_cross_project_access_check :show - before_action :authorize_admin_pipeline! + before_action :authorize_admin_group! def show define_ci_variables @@ -26,8 +26,8 @@ module Groups .map { |variable| variable.present(current_user: current_user) } end - def authorize_admin_pipeline! - return render_404 unless can?(current_user, :admin_pipeline, group) + def authorize_admin_group! + return render_404 unless can?(current_user, :admin_group, group) end end end diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb index a44acb12bdf..255f1f3569a 100644 --- a/app/controllers/projects/snippets_controller.rb +++ b/app/controllers/projects/snippets_controller.rb @@ -75,7 +75,14 @@ class Projects::SnippetsController < Projects::ApplicationController format.json do render_blob_json(blob) end - format.js { render 'shared/snippets/show'} + + format.js do + if @snippet.embeddable? + render 'shared/snippets/show' + else + head :not_found + end + end end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 8bf93bfd68d..878816475b2 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -19,6 +19,7 @@ class ProjectsController < Projects::ApplicationController before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?] before_action :project_export_enabled, only: [:export, :download_export, :remove_export, :generate_new_export] before_action :present_project, only: [:edit] + before_action :authorize_download_code!, only: [:refs] # Authorize before_action :authorize_admin_project!, only: [:edit, :update, :housekeeping, :download_export, :export, :remove_export, :generate_new_export] diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb index dd9bf17cf0c..8ea5450b4e8 100644 --- a/app/controllers/snippets_controller.rb +++ b/app/controllers/snippets_controller.rb @@ -80,7 +80,13 @@ class SnippetsController < ApplicationController render_blob_json(blob) end - format.js { render 'shared/snippets/show' } + format.js do + if @snippet.embeddable? + render 'shared/snippets/show' + else + head :not_found + end + end end end diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 086bb38ce9a..b4c6d4c6cfe 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -20,12 +20,24 @@ module ApplicationSettingsHelper def enabled_protocol case Gitlab::CurrentSettings.enabled_git_access_protocol when 'http' - gitlab_config.protocol + Gitlab.config.gitlab.protocol when 'ssh' 'ssh' end end + def all_protocols_enabled? + Gitlab::CurrentSettings.enabled_git_access_protocol.blank? + end + + def ssh_enabled? + all_protocols_enabled? || enabled_protocol == 'ssh' + end + + def http_enabled? + all_protocols_enabled? || Gitlab::CurrentSettings.enabled_git_access_protocol == 'http' + end + def enabled_project_button(project, protocol) case protocol when 'ssh' diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 5a21403bc5e..75106e62ccf 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -18,12 +18,13 @@ module MembersHelper "remove #{member.user.name} from" end - "#{text} #{action} the #{member.source.human_name} #{member.real_source_type.humanize(capitalize: false)}?" + "#{text} #{action} the #{member.source.human_name} #{source_text(member)}?" end def remove_member_title(member) action = member.request? ? 'Deny access request' : 'Remove user' - "#{action} from #{member.real_source_type.humanize(capitalize: false)}" + + "#{action} from #{source_text(member)}" end def leave_confirmation_message(member_source) @@ -35,4 +36,14 @@ module MembersHelper options = params.slice(:search, :sort).merge(options) "#{request.path}?#{options.to_param}" end + + private + + def source_text(member) + type = member.real_source_type.humanize(capitalize: false) + + return type if member.request? || member.invite? || type != 'group' + + 'group and any subresources' + end end diff --git a/app/helpers/snippets_helper.rb b/app/helpers/snippets_helper.rb index c7d31f3469d..a20c47ed91a 100644 --- a/app/helpers/snippets_helper.rb +++ b/app/helpers/snippets_helper.rb @@ -130,12 +130,4 @@ module SnippetsHelper link_to external_snippet_icon('download'), download_url, class: 'btn', target: '_blank', title: 'Download', rel: 'noopener noreferrer' end - - def public_snippet? - if @snippet.project_id? - can?(nil, :read_project_snippet, @snippet) - else - can?(nil, :read_personal_snippet, @snippet) - end - end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index d86a6eceb59..f931c8d0b58 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -10,6 +10,7 @@ module Ci include Importable include Gitlab::Utils::StrongMemoize include Deployable + include HasRef belongs_to :project, inverse_of: :builds belongs_to :runner @@ -152,6 +153,10 @@ module Ci .execute(build) # rubocop: enable CodeReuse/ServiceClass end + + def find_running_by_token(token) + running.find_by_token(token) + end end state_machine :status do @@ -640,11 +645,11 @@ module Ci def secret_group_variables return [] unless project.group - project.group.ci_variables_for(ref, project) + project.group.ci_variables_for(git_ref, project) end def secret_project_variables(environment: persisted_environment) - project.ci_variables_for(ref: ref, environment: environment) + project.ci_variables_for(ref: git_ref, environment: environment) end def steps diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index d06022a0fb7..4f64fff88ac 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -11,6 +11,7 @@ module Ci include Gitlab::Utils::StrongMemoize include AtomicInternalId include EnumWithNil + include HasRef belongs_to :project, inverse_of: :all_pipelines belongs_to :user @@ -388,7 +389,7 @@ module Ci end def branch? - !tag? && !merge_request? + super && !merge_request? end def stuck? @@ -588,7 +589,7 @@ module Ci end def protected_ref? - strong_memoize(:protected_ref) { project.protected_for?(ref) } + strong_memoize(:protected_ref) { project.protected_for?(git_ref) } end def legacy_trigger @@ -720,14 +721,10 @@ module Ci end def git_ref - if branch? + if merge_request? Gitlab::Git::BRANCH_REF_PREFIX + ref.to_s - elsif merge_request? - Gitlab::Git::BRANCH_REF_PREFIX + ref.to_s - elsif tag? - Gitlab::Git::TAG_REF_PREFIX + ref.to_s else - raise ArgumentError, 'Invalid pipeline type!' + super end end diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb index 867f0edcb07..e06cb9be89f 100644 --- a/app/models/clusters/platforms/kubernetes.rb +++ b/app/models/clusters/platforms/kubernetes.rb @@ -106,7 +106,7 @@ module Clusters def terminals(environment) with_reactive_cache do |data| pods = filter_by_label(data[:pods], app: environment.slug) - terminals = pods.flat_map { |pod| terminals_for_pod(api_url, actual_namespace, pod) } + terminals = pods.flat_map { |pod| terminals_for_pod(api_url, actual_namespace, pod) }.compact terminals.each { |terminal| add_terminal_auth(terminal, terminal_auth) } end end diff --git a/app/models/concerns/has_ref.rb b/app/models/concerns/has_ref.rb new file mode 100644 index 00000000000..d7089294efc --- /dev/null +++ b/app/models/concerns/has_ref.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module HasRef + extend ActiveSupport::Concern + + def branch? + !tag? + end + + def git_ref + if branch? + Gitlab::Git::BRANCH_REF_PREFIX + ref.to_s + elsif tag? + Gitlab::Git::TAG_REF_PREFIX + ref.to_s + end + end +end diff --git a/app/models/environment.rb b/app/models/environment.rb index 934828946b9..cdfe3b7c023 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Environment < ActiveRecord::Base + include Gitlab::Utils::StrongMemoize # Used to generate random suffixes for the slug LETTERS = 'a'..'z' NUMBERS = '0'..'9' @@ -231,7 +232,9 @@ class Environment < ActiveRecord::Base end def deployment_platform - project.deployment_platform(environment: self.name) + strong_memoize(:deployment_platform) do + project.deployment_platform(environment: self.name) + end end private diff --git a/app/models/member.rb b/app/models/member.rb index 9fc95ea00c3..5869490362c 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -78,6 +78,7 @@ class Member < ActiveRecord::Base scope :owners, -> { active.where(access_level: OWNER) } scope :owners_and_maintainers, -> { active.where(access_level: [OWNER, MAINTAINER]) } scope :owners_and_masters, -> { owners_and_maintainers } # @deprecated + scope :with_user, -> (user) { where(user: user) } scope :order_name_asc, -> { left_join_users.reorder(Gitlab::Database.nulls_last_order('users.name', 'ASC')) } scope :order_name_desc, -> { left_join_users.reorder(Gitlab::Database.nulls_last_order('users.name', 'DESC')) } diff --git a/app/models/members/group_member.rb b/app/models/members/group_member.rb index fc49ee7ac8c..2c9e1ba1d80 100644 --- a/app/models/members/group_member.rb +++ b/app/models/members/group_member.rb @@ -12,6 +12,8 @@ class GroupMember < Member validates :source_type, format: { with: /\ANamespace\z/ } default_scope { where(source_type: SOURCE_TYPE) } + scope :in_groups, ->(groups) { where(source_id: groups.select(:id)) } + after_create :update_two_factor_requirement, unless: :invite? after_destroy :update_two_factor_requirement, unless: :invite? diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb index 016c18ce6c8..5372c6084f4 100644 --- a/app/models/members/project_member.rb +++ b/app/models/members/project_member.rb @@ -12,6 +12,10 @@ class ProjectMember < Member default_scope { where(source_type: SOURCE_TYPE) } scope :in_project, ->(project) { where(source_id: project.id) } + scope :in_namespaces, ->(groups) do + joins('INNER JOIN projects ON projects.id = members.source_id') + .where('projects.namespace_id in (?)', groups.select(:id)) + end class << self # Add users to projects with passed access option diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index baf320d84a1..24b801b38a2 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -364,8 +364,7 @@ class MergeRequest < ActiveRecord::Base end def supports_suggestion? - # Should be `true` when removing the FF. - Suggestion.feature_enabled? + true end # Calls `MergeWorker` to proceed with the merge process and diff --git a/app/models/project.rb b/app/models/project.rb index 9e65f7bdbca..8194dd7a458 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -324,10 +324,9 @@ class Project < ActiveRecord::Base validates :namespace, presence: true validates :name, uniqueness: { scope: :namespace_id } - validates :import_url, url: { protocols: ->(project) { project.persisted? ? VALID_MIRROR_PROTOCOLS : VALID_IMPORT_PROTOCOLS }, - ports: ->(project) { project.persisted? ? VALID_MIRROR_PORTS : VALID_IMPORT_PORTS }, - allow_localhost: false, - enforce_user: true }, if: [:external_import?, :import_url_changed?] + validates :import_url, public_url: { protocols: ->(project) { project.persisted? ? VALID_MIRROR_PROTOCOLS : VALID_IMPORT_PROTOCOLS }, + ports: ->(project) { project.persisted? ? VALID_MIRROR_PORTS : VALID_IMPORT_PORTS }, + enforce_user: true }, if: [:external_import?, :import_url_changed?] validates :star_count, numericality: { greater_than_or_equal_to: 0 } validate :check_limit, on: :create validate :check_repository_path_availability, on: :update, if: ->(project) { project.renamed? } @@ -1742,10 +1741,21 @@ class Project < ActiveRecord::Base end def protected_for?(ref) - if repository.branch_exists?(ref) - ProtectedBranch.protected?(self, ref) - elsif repository.tag_exists?(ref) - ProtectedTag.protected?(self, ref) + raise Repository::AmbiguousRefError if repository.ambiguous_ref?(ref) + + resolved_ref = repository.expand_ref(ref) || ref + return false unless Gitlab::Git.tag_ref?(resolved_ref) || Gitlab::Git.branch_ref?(resolved_ref) + + ref_name = if resolved_ref == ref + Gitlab::Git.ref_name(resolved_ref) + else + ref + end + + if Gitlab::Git.branch_ref?(resolved_ref) + ProtectedBranch.protected?(self, ref_name) + elsif Gitlab::Git.tag_ref?(resolved_ref) + ProtectedTag.protected?(self, ref_name) end end diff --git a/app/models/remote_mirror.rb b/app/models/remote_mirror.rb index b7b4d0f1be9..327c6e7c7a3 100644 --- a/app/models/remote_mirror.rb +++ b/app/models/remote_mirror.rb @@ -17,7 +17,7 @@ class RemoteMirror < ActiveRecord::Base belongs_to :project, inverse_of: :remote_mirrors - validates :url, presence: true, url: { protocols: %w(ssh git http https), allow_blank: true, enforce_user: true } + validates :url, presence: true, public_url: { protocols: %w(ssh git http https), allow_blank: true, enforce_user: true } before_save :set_new_remote_name, if: :mirror_url_changed? diff --git a/app/models/repository.rb b/app/models/repository.rb index 0ab7e711a01..b47238b52f1 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -25,6 +25,7 @@ class Repository delegate :bundle_to_disk, to: :raw_repository CreateTreeError = Class.new(StandardError) + AmbiguousRefError = Class.new(StandardError) # Methods that cache data from the Git repository. # @@ -181,6 +182,18 @@ class Repository tags.find { |tag| tag.name == name } end + def ambiguous_ref?(ref) + tag_exists?(ref) && branch_exists?(ref) + end + + def expand_ref(ref) + if tag_exists?(ref) + Gitlab::Git::TAG_REF_PREFIX + ref + elsif branch_exists?(ref) + Gitlab::Git::BRANCH_REF_PREFIX + ref + end + end + def add_branch(user, branch_name, ref) branch = raw_repository.add_branch(branch_name, user: user, target: ref) diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 11856b55902..f9b23bbbf6c 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -175,6 +175,12 @@ class Snippet < ActiveRecord::Base :visibility_level end + def embeddable? + ability = project_id? ? :read_project_snippet : :read_personal_snippet + + Ability.allowed?(nil, ability, self) + end + def notes_with_associations notes.includes(:author) end diff --git a/app/models/suggestion.rb b/app/models/suggestion.rb index cec5ea30f9d..c76b8e71507 100644 --- a/app/models/suggestion.rb +++ b/app/models/suggestion.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true class Suggestion < ApplicationRecord - FEATURE_FLAG = :diff_suggestions - belongs_to :note, inverse_of: :suggestions validates :note, presence: true validates :commit_id, presence: true, if: :applied? @@ -10,10 +8,6 @@ class Suggestion < ApplicationRecord delegate :original_position, :position, :diff_file, :noteable, to: :note - def self.feature_enabled? - Feature.enabled?(FEATURE_FLAG) - end - def project noteable.source_project end diff --git a/app/models/todo.rb b/app/models/todo.rb index 7b64615f699..d9b86d941b6 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -4,6 +4,11 @@ class Todo < ActiveRecord::Base include Sortable include FromUnion + # Time to wait for todos being removed when not visible for user anymore. + # Prevents TODOs being removed by mistake, for example, removing access from a user + # and giving it back again. + WAIT_FOR_DELETE = 1.hour + ASSIGNED = 1 MENTIONED = 2 BUILD_FAILED = 3 diff --git a/app/policies/issuable_policy.rb b/app/policies/issuable_policy.rb index 6d8b575102e..ecb2797d1d9 100644 --- a/app/policies/issuable_policy.rb +++ b/app/policies/issuable_policy.rb @@ -11,7 +11,7 @@ class IssuablePolicy < BasePolicy @user && @subject.assignee_or_author?(@user) end - rule { assignee_or_author }.policy do + rule { can?(:guest_access) & assignee_or_author }.policy do enable :read_issue enable :update_issue enable :reopen_issue diff --git a/app/serializers/environment_entity.rb b/app/serializers/environment_entity.rb index 07a13c33b89..4a7d13915dd 100644 --- a/app/serializers/environment_entity.rb +++ b/app/serializers/environment_entity.rb @@ -23,6 +23,10 @@ class EnvironmentEntity < Grape::Entity stop_project_environment_path(environment.project, environment) end + expose :cluster_type, if: ->(environment, _) { cluster_platform_kubernetes? } do |environment| + cluster.cluster_type + end + expose :terminal_path, if: ->(*) { environment.has_terminals? && can_access_terminal? } do |environment| terminal_project_environment_path(environment.project, environment) end @@ -48,4 +52,16 @@ class EnvironmentEntity < Grape::Entity def can_access_terminal? can?(request.current_user, :create_environment_terminal, environment) end + + def cluster_platform_kubernetes? + deployment_platform && deployment_platform.is_a?(Clusters::Platforms::Kubernetes) + end + + def deployment_platform + environment.deployment_platform + end + + def cluster + deployment_platform.cluster + end end diff --git a/app/services/groups/update_service.rb b/app/services/groups/update_service.rb index 0bf0e967dcc..83ffc3dc8cd 100644 --- a/app/services/groups/update_service.rb +++ b/app/services/groups/update_service.rb @@ -31,7 +31,7 @@ module Groups def after_update if group.previous_changes.include?(:visibility_level) && group.private? # don't enqueue immediately to prevent todos removal in case of a mistake - TodosDestroyer::GroupPrivateWorker.perform_in(1.hour, group.id) + TodosDestroyer::GroupPrivateWorker.perform_in(Todo::WAIT_FOR_DELETE, group.id) end end diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index a1d0cc0e568..e992d682c79 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -44,7 +44,7 @@ module Issues if issue.previous_changes.include?('confidential') # don't enqueue immediately to prevent todos removal in case of a mistake - TodosDestroyer::ConfidentialIssueWorker.perform_in(1.hour, issue.id) if issue.confidential? + TodosDestroyer::ConfidentialIssueWorker.perform_in(Todo::WAIT_FOR_DELETE, issue.id) if issue.confidential? create_confidentiality_note(issue) end diff --git a/app/services/members/base_service.rb b/app/services/members/base_service.rb index d734571f835..e78affff797 100644 --- a/app/services/members/base_service.rb +++ b/app/services/members/base_service.rb @@ -47,5 +47,11 @@ module Members raise "Unknown action '#{action}' on #{member}!" end end + + def enqueue_delete_todos(member) + type = member.is_a?(GroupMember) ? 'Group' : 'Project' + # don't enqueue immediately to prevent todos removal in case of a mistake + TodosDestroyer::EntityLeaveWorker.perform_in(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, type) + end end end diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb index c186a5971dc..828871125a1 100644 --- a/app/services/members/destroy_service.rb +++ b/app/services/members/destroy_service.rb @@ -2,9 +2,11 @@ module Members class DestroyService < Members::BaseService - def execute(member, skip_authorization: false) + def execute(member, skip_authorization: false, skip_subresources: false) raise Gitlab::Access::AccessDeniedError unless skip_authorization || can_destroy_member?(member) + @skip_auth = skip_authorization + return member if member.is_a?(GroupMember) && member.source.last_owner?(member.user) member.destroy @@ -15,7 +17,8 @@ module Members notification_service.decline_access_request(member) end - enqeue_delete_todos(member) + delete_subresources(member) unless skip_subresources + enqueue_delete_todos(member) after_execute(member: member) @@ -24,7 +27,30 @@ module Members private - def enqeue_delete_todos(member) + def delete_subresources(member) + return unless member.is_a?(GroupMember) && member.user && member.group + + delete_project_members(member) + delete_subgroup_members(member) if Group.supports_nested_groups? + end + + def delete_project_members(member) + groups = member.group.self_and_descendants + + ProjectMember.in_namespaces(groups).with_user(member.user).each do |project_member| + self.class.new(current_user).execute(project_member, skip_authorization: @skip_auth) + end + end + + def delete_subgroup_members(member) + groups = member.group.descendants + + GroupMember.in_groups(groups).with_user(member.user).each do |group_member| + self.class.new(current_user).execute(group_member, skip_authorization: @skip_auth, skip_subresources: true) + end + end + + def enqueue_delete_todos(member) type = member.is_a?(GroupMember) ? 'Group' : 'Project' # don't enqueue immediately to prevent todos removal in case of a mistake TodosDestroyer::EntityLeaveWorker.perform_in(1.hour, member.user_id, member.source_id, type) diff --git a/app/services/members/update_service.rb b/app/services/members/update_service.rb index 1f5618dae53..ff8d5c1d8c9 100644 --- a/app/services/members/update_service.rb +++ b/app/services/members/update_service.rb @@ -10,9 +10,18 @@ module Members if member.update(params) after_execute(action: permission, old_access_level: old_access_level, member: member) + + # Deletes only confidential issues todos for guests + enqueue_delete_todos(member) if downgrading_to_guest? end member end + + private + + def downgrading_to_guest? + params[:access_level] == Gitlab::Access::GUEST + end end end diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 36767621d74..48419da98ad 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -18,7 +18,7 @@ module MergeRequests merge_request.source_project = find_source_project merge_request.target_project = find_target_project merge_request.target_branch = find_target_branch - merge_request.can_be_created = branches_valid? + merge_request.can_be_created = projects_and_branches_valid? # compare branches only if branches are valid, otherwise # compare_branches may raise an error @@ -49,15 +49,19 @@ module MergeRequests to: :merge_request def find_source_project - return source_project if source_project.present? && can?(current_user, :read_project, source_project) + return source_project if source_project.present? && can?(current_user, :create_merge_request_from, source_project) project end def find_target_project - return target_project if target_project.present? && can?(current_user, :read_project, target_project) + return target_project if target_project.present? && can?(current_user, :create_merge_request_in, target_project) - project.default_merge_request_target + target_project = project.default_merge_request_target + + return target_project if target_project.present? && can?(current_user, :create_merge_request_in, target_project) + + project end def find_target_branch @@ -72,10 +76,11 @@ module MergeRequests params[:target_branch].present? end - def branches_valid? + def projects_and_branches_valid? + return false if source_project.nil? || target_project.nil? return false unless source_branch_specified? || target_branch_specified? - validate_branches + validate_projects_and_branches errors.blank? end @@ -94,7 +99,12 @@ module MergeRequests end end - def validate_branches + def validate_projects_and_branches + merge_request.validate_target_project + merge_request.validate_fork + + return if errors.any? + add_error('You must select source and target branch') unless branches_present? add_error('You must select different branches') if same_source_and_target? add_error("Source branch \"#{source_branch}\" does not exist") unless source_branch_exists? diff --git a/app/services/projects/lfs_pointers/lfs_download_service.rb b/app/services/projects/lfs_pointers/lfs_download_service.rb index f9b9781ad5f..b5128443435 100644 --- a/app/services/projects/lfs_pointers/lfs_download_service.rb +++ b/app/services/projects/lfs_pointers/lfs_download_service.rb @@ -12,28 +12,43 @@ module Projects return if LfsObject.exists?(oid: oid) - sanitized_uri = Gitlab::UrlSanitizer.new(url) - Gitlab::UrlBlocker.validate!(sanitized_uri.sanitized_url, protocols: VALID_PROTOCOLS) + sanitized_uri = sanitize_url!(url) with_tmp_file(oid) do |file| - size = download_and_save_file(file, sanitized_uri) - lfs_object = LfsObject.new(oid: oid, size: size, file: file) + download_and_save_file(file, sanitized_uri) + lfs_object = LfsObject.new(oid: oid, size: file.size, file: file) project.all_lfs_objects << lfs_object end + rescue Gitlab::UrlBlocker::BlockedUrlError => e + Rails.logger.error("LFS file with oid #{oid} couldn't be downloaded: #{e.message}") rescue StandardError => e - Rails.logger.error("LFS file with oid #{oid} could't be downloaded from #{sanitized_uri.sanitized_url}: #{e.message}") + Rails.logger.error("LFS file with oid #{oid} couldn't be downloaded from #{sanitized_uri.sanitized_url}: #{e.message}") end # rubocop: enable CodeReuse/ActiveRecord private + def sanitize_url!(url) + Gitlab::UrlSanitizer.new(url).tap do |sanitized_uri| + # Just validate that HTTP/HTTPS protocols are used. The + # subsequent Gitlab::HTTP.get call will do network checks + # based on the settings. + Gitlab::UrlBlocker.validate!(sanitized_uri.sanitized_url, + protocols: VALID_PROTOCOLS) + end + end + def download_and_save_file(file, sanitized_uri) - IO.copy_stream(open(sanitized_uri.sanitized_url, headers(sanitized_uri)), file) # rubocop:disable Security/Open + response = Gitlab::HTTP.get(sanitized_uri.sanitized_url, headers(sanitized_uri)) do |fragment| + file.write(fragment) + end + + raise StandardError, "Received error code #{response.code}" unless response.success? end def headers(sanitized_uri) - {}.tap do |headers| + query_options.tap do |headers| credentials = sanitized_uri.credentials if credentials[:user].present? || credentials[:password].present? @@ -43,10 +58,14 @@ module Projects end end + def query_options + { stream_body: true } + end + def with_tmp_file(oid) create_tmp_storage_dir - File.open(File.join(tmp_storage_dir, oid), 'w') { |file| yield file } + File.open(File.join(tmp_storage_dir, oid), 'wb') { |file| yield file } end def create_tmp_storage_dir diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb index 93e48fc0199..dd1b9680ece 100644 --- a/app/services/projects/update_service.rb +++ b/app/services/projects/update_service.rb @@ -61,9 +61,9 @@ module Projects if project.previous_changes.include?(:visibility_level) && project.private? # don't enqueue immediately to prevent todos removal in case of a mistake - TodosDestroyer::ProjectPrivateWorker.perform_in(1.hour, project.id) + TodosDestroyer::ProjectPrivateWorker.perform_in(Todo::WAIT_FOR_DELETE, project.id) elsif (project_changed_feature_keys & todos_features_changes).present? - TodosDestroyer::PrivateFeaturesWorker.perform_in(1.hour, project.id) + TodosDestroyer::PrivateFeaturesWorker.perform_in(Todo::WAIT_FOR_DELETE, project.id) end if project.previous_changes.include?('path') diff --git a/app/views/projects/buttons/_clone.html.haml b/app/views/projects/buttons/_clone.html.haml index d453a3a9dac..159d9e44e17 100644 --- a/app/views/projects/buttons/_clone.html.haml +++ b/app/views/projects/buttons/_clone.html.haml @@ -1,16 +1,12 @@ - project = project || @project .git-clone-holder.js-git-clone-holder.input-group - - if allowed_protocols_present? - .input-group-text.clone-dropdown-btn.btn - %span.js-clone-dropdown-label - = enabled_project_button(project, enabled_protocol) - - else - %a#clone-dropdown.input-group-text.btn.btn-primary.btn-xs.clone-dropdown-btn.qa-clone-dropdown{ href: '#', data: { toggle: 'dropdown' } } - %span.append-right-4.js-clone-dropdown-label - = _('Clone') - = sprite_icon("arrow-down", css_class: "icon") - %form.p-3.dropdown-menu.dropdown-menu-right.dropdown-menu-large.dropdown-menu-selectable.clone-options-dropdown.qa-clone-options + %a#clone-dropdown.input-group-text.btn.btn-primary.btn-xs.clone-dropdown-btn.qa-clone-dropdown{ href: '#', data: { toggle: 'dropdown' } } + %span.append-right-4.js-clone-dropdown-label + = _('Clone') + = sprite_icon("arrow-down", css_class: "icon") + %ul.p-3.dropdown-menu.dropdown-menu-right.dropdown-menu-large.dropdown-menu-selectable.clone-options-dropdown.qa-clone-options + - if ssh_enabled? %li.pb-2 %label.label-bold = _('Clone with SSH') @@ -19,6 +15,7 @@ .input-group-append = clipboard_button(target: '#ssh_project_clone', title: _("Copy URL to clipboard"), class: "input-group-text btn-default btn-clipboard") = render_if_exists 'projects/buttons/geo' + - if http_enabled? %li %label.label-bold = _('Clone with %{http_label}') % { http_label: gitlab_config.protocol.upcase } diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml index a0a03838b10..e5c80aae0f7 100644 --- a/app/views/projects/merge_requests/show.html.haml +++ b/app/views/projects/merge_requests/show.html.haml @@ -5,6 +5,7 @@ - page_title "#{@merge_request.title} (#{@merge_request.to_reference})", "Merge Requests" - page_description @merge_request.description - page_card_attributes @merge_request.card_attributes +- suggest_changes_help_path = help_page_path('user/discussions/index.md', anchor: 'suggest-changes') .merge-request{ data: { mr_action: j(params[:tab].presence || 'show'), url: merge_request_path(@merge_request, format: :json), project_path: project_path(@merge_request.project) } } = render "projects/merge_requests/mr_title" @@ -67,7 +68,7 @@ noteable_data: serialize_issuable(@merge_request), noteable_type: 'MergeRequest', target_type: 'merge_request', - help_page_path: nil, + help_page_path: suggest_changes_help_path, current_user_data: UserSerializer.new(project: @project).represent(current_user, {}, MergeRequestUserEntity).to_json} } #commits.commits.tab-pane @@ -77,7 +78,7 @@ = render 'projects/commit/pipelines_list', disable_initialization: true, endpoint: pipelines_project_merge_request_path(@project, @merge_request) #js-diffs-app.diffs.tab-pane{ data: { "is-locked" => @merge_request.discussion_locked?, endpoint: diffs_project_merge_request_path(@project, @merge_request, 'json', request.query_parameters), - help_page_path: nil, + help_page_path: suggest_changes_help_path, current_user_data: UserSerializer.new(project: @project).represent(current_user, {}, MergeRequestUserEntity).to_json, project_path: project_path(@merge_request.project)} } diff --git a/app/views/shared/_mobile_clone_panel.html.haml b/app/views/shared/_mobile_clone_panel.html.haml index b43662947a8..6e2527bd1a1 100644 --- a/app/views/shared/_mobile_clone_panel.html.haml +++ b/app/views/shared/_mobile_clone_panel.html.haml @@ -7,7 +7,9 @@ %button.btn.btn-primary.dropdown-toggle.js-dropdown-toggle{ type: "button", data: { toggle: "dropdown" } } = sprite_icon("arrow-down", css_class: "dropdown-btn-icon icon") %ul.dropdown-menu.dropdown-menu-selectable.dropdown-menu-right.clone-options-dropdown{ data: { dropdown: true } } - %li - = dropdown_item_with_description(ssh_copy_label, project.ssh_url_to_repo, href: project.ssh_url_to_repo, data: { clone_type: 'ssh' }, default: true) - %li - = dropdown_item_with_description(http_copy_label, project.http_url_to_repo, href: project.http_url_to_repo, data: { clone_type: 'http' }) + - if ssh_enabled? + %li + = dropdown_item_with_description(ssh_copy_label, project.ssh_url_to_repo, href: project.ssh_url_to_repo, data: { clone_type: 'ssh' }, default: true) + - if http_enabled? + %li + = dropdown_item_with_description(http_copy_label, project.http_url_to_repo, href: project.http_url_to_repo, data: { clone_type: 'http' }) diff --git a/app/views/shared/snippets/_header.html.haml b/app/views/shared/snippets/_header.html.haml index 10bfc30492a..a43296aa806 100644 --- a/app/views/shared/snippets/_header.html.haml +++ b/app/views/shared/snippets/_header.html.haml @@ -30,7 +30,7 @@ - if @snippet.updated_at != @snippet.created_at = edited_time_ago_with_tooltip(@snippet, placement: 'bottom', html_class: 'snippet-edited-ago', exclude_author: true) - - if public_snippet? + - if @snippet.embeddable? .embed-snippet .input-group .input-group-prepend diff --git a/changelogs/unreleased/19376-post-bfg-cleanup.yml b/changelogs/unreleased/19376-post-bfg-cleanup.yml deleted file mode 100644 index fc1bcc30db9..00000000000 --- a/changelogs/unreleased/19376-post-bfg-cleanup.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use BFG object maps to clean projects -merge_request: 23189 -author: -type: added diff --git a/changelogs/unreleased/1979-redesign-mr-widget-approvals-ce.yml b/changelogs/unreleased/1979-redesign-mr-widget-approvals-ce.yml deleted file mode 100644 index d05b6054b22..00000000000 --- a/changelogs/unreleased/1979-redesign-mr-widget-approvals-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redesign of MR header sections (CE) -merge_request: 23465 -author: -type: changed diff --git a/changelogs/unreleased/20422-hide-ui-variables-by-default.yml b/changelogs/unreleased/20422-hide-ui-variables-by-default.yml deleted file mode 100644 index 60285d49718..00000000000 --- a/changelogs/unreleased/20422-hide-ui-variables-by-default.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Pipeline trigger variable values are hidden in the UI by default. Maintainers - have the option to reveal them. -merge_request: 23518 -author: jhampton -type: added diff --git a/changelogs/unreleased/22548-reopen-error-message.yml b/changelogs/unreleased/22548-reopen-error-message.yml deleted file mode 100644 index 79c20eccb12..00000000000 --- a/changelogs/unreleased/22548-reopen-error-message.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Show error message when attempting to reopen an MR and there is an open MR - for the same branch -merge_request: 16447 -author: Akos Gyimesi -type: fixed diff --git a/changelogs/unreleased/33705-merge-request-rebase-api.yml b/changelogs/unreleased/33705-merge-request-rebase-api.yml deleted file mode 100644 index 322fe31ce87..00000000000 --- a/changelogs/unreleased/33705-merge-request-rebase-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a rebase API endpoint for merge requests -merge_request: 23296 -author: -type: added diff --git a/changelogs/unreleased/34758-deployment-cluster.yml b/changelogs/unreleased/34758-deployment-cluster.yml deleted file mode 100644 index 06374098343..00000000000 --- a/changelogs/unreleased/34758-deployment-cluster.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use group clusters when deploying (DeploymentPlatform) -merge_request: 22308 -author: -type: changed diff --git a/changelogs/unreleased/34758-group-cluster-controller.yml b/changelogs/unreleased/34758-group-cluster-controller.yml deleted file mode 100644 index 88c4c872714..00000000000 --- a/changelogs/unreleased/34758-group-cluster-controller.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ability to create group level clusters and install gitlab managed applications -merge_request: 22450 -author: -type: added diff --git a/changelogs/unreleased/38495-calendar-activities-in-timezone.yml b/changelogs/unreleased/38495-calendar-activities-in-timezone.yml deleted file mode 100644 index 778d637609c..00000000000 --- a/changelogs/unreleased/38495-calendar-activities-in-timezone.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show user contributions in correct timezone within user profile -merge_request: 23419 -author: -type: changed diff --git a/changelogs/unreleased/39849_controller_sorts.yml b/changelogs/unreleased/39849_controller_sorts.yml deleted file mode 100644 index 5fad0cb4ede..00000000000 --- a/changelogs/unreleased/39849_controller_sorts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow sorting issues and MRs in reverse order -merge_request: 21438 -author: -type: changed diff --git a/changelogs/unreleased/40085-add-a-create_merge_request-quick-action.yml b/changelogs/unreleased/40085-add-a-create_merge_request-quick-action.yml deleted file mode 100644 index e1614ac7669..00000000000 --- a/changelogs/unreleased/40085-add-a-create_merge_request-quick-action.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates /create_merge_request quickaction -merge_request: 22485 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/40260-reduce-gitaly-calls-project-pipeline-status.yml b/changelogs/unreleased/40260-reduce-gitaly-calls-project-pipeline-status.yml deleted file mode 100644 index 8ab104e95f5..00000000000 --- a/changelogs/unreleased/40260-reduce-gitaly-calls-project-pipeline-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Reduce Gitaly calls in projects dashboard -merge_request: 23307 -author: -type: performance diff --git a/changelogs/unreleased/40385-prohibit_impersonation.yml b/changelogs/unreleased/40385-prohibit_impersonation.yml deleted file mode 100644 index dd061b17939..00000000000 --- a/changelogs/unreleased/40385-prohibit_impersonation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add config to prohibit impersonation -merge_request: 23338 -author: -type: added diff --git a/changelogs/unreleased/41875-allow-pipelines-to-be-deleted-by-project-owners.yml b/changelogs/unreleased/41875-allow-pipelines-to-be-deleted-by-project-owners.yml deleted file mode 100644 index 0662ff6f523..00000000000 --- a/changelogs/unreleased/41875-allow-pipelines-to-be-deleted-by-project-owners.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow deleting a Pipeline via the API. -merge_request: 22988 -author: -type: added diff --git a/changelogs/unreleased/46544-webide-ctrl-enter-commit-shortcut.yml b/changelogs/unreleased/46544-webide-ctrl-enter-commit-shortcut.yml deleted file mode 100644 index 334c9b3ec9e..00000000000 --- a/changelogs/unreleased/46544-webide-ctrl-enter-commit-shortcut.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "WebIDE: Pressing Ctrl-Enter while typing on the commit message now performs the commit action" -merge_request: 23049 -author: Thomas Pathier -type: added diff --git a/changelogs/unreleased/46950-systemcheck-ruby-version.yml b/changelogs/unreleased/46950-systemcheck-ruby-version.yml deleted file mode 100644 index e556e14223b..00000000000 --- a/changelogs/unreleased/46950-systemcheck-ruby-version.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'SystemCheck: Use a more reliable way to detect current Ruby version' -merge_request: 23291 -author: -type: changed diff --git a/changelogs/unreleased/48475-gitlab-pages-settings-regressions.yml b/changelogs/unreleased/48475-gitlab-pages-settings-regressions.yml deleted file mode 100644 index f543730a57d..00000000000 --- a/changelogs/unreleased/48475-gitlab-pages-settings-regressions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixing regression issues on pages settings and details -merge_request: 22821 -author: -type: fixed diff --git a/changelogs/unreleased/48496-merge-request-refactor-does-not-highlight-selected-line.yml b/changelogs/unreleased/48496-merge-request-refactor-does-not-highlight-selected-line.yml deleted file mode 100644 index cfc74bef638..00000000000 --- a/changelogs/unreleased/48496-merge-request-refactor-does-not-highlight-selected-line.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: When user clicks linenumber in MR changes, highlight that line -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/48889-populate-merge_commit_sha.yml b/changelogs/unreleased/48889-populate-merge_commit_sha.yml deleted file mode 100644 index 0e25d8ecfb0..00000000000 --- a/changelogs/unreleased/48889-populate-merge_commit_sha.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix "merged with [commit]" info for merge requests being merged automatically - by other actions -merge_request: 22794 -author: -type: fixed diff --git a/changelogs/unreleased/49479-hide-unmerged-env-perf-stats.yml b/changelogs/unreleased/49479-hide-unmerged-env-perf-stats.yml deleted file mode 100644 index 5118949f8a3..00000000000 --- a/changelogs/unreleased/49479-hide-unmerged-env-perf-stats.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't show Memory Usage for unmerged MRs -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/49565-ssh-push-mirroring.yml b/changelogs/unreleased/49565-ssh-push-mirroring.yml deleted file mode 100644 index 2dfeffa4088..00000000000 --- a/changelogs/unreleased/49565-ssh-push-mirroring.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow SSH public-key authentication for push mirroring -merge_request: 22982 -author: -type: added diff --git a/changelogs/unreleased/49713-main-navbar-is-broken-in-certain-viewport-widths.yml b/changelogs/unreleased/49713-main-navbar-is-broken-in-certain-viewport-widths.yml deleted file mode 100644 index 0b5d1a6b05a..00000000000 --- a/changelogs/unreleased/49713-main-navbar-is-broken-in-certain-viewport-widths.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Main navbar is broken in certain viewport widths -merge_request: 23348 -author: -type: fixed diff --git a/changelogs/unreleased/49726-upgrade-helm-to-2-11.yml b/changelogs/unreleased/49726-upgrade-helm-to-2-11.yml deleted file mode 100644 index dd26af875f5..00000000000 --- a/changelogs/unreleased/49726-upgrade-helm-to-2-11.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade helm to 2.11.0 and upgrade on every install -merge_request: 22693 -author: -type: added diff --git a/changelogs/unreleased/50157-extended-user-centric-tooltips.yml b/changelogs/unreleased/50157-extended-user-centric-tooltips.yml deleted file mode 100644 index 3b55a867b87..00000000000 --- a/changelogs/unreleased/50157-extended-user-centric-tooltips.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extended user centric tooltips on issue and MR page -merge_request: 23231 -author: -type: added diff --git a/changelogs/unreleased/50264-add-border-around-the-repository-file-tree.yml b/changelogs/unreleased/50264-add-border-around-the-repository-file-tree.yml deleted file mode 100644 index 6315c3e7f36..00000000000 --- a/changelogs/unreleased/50264-add-border-around-the-repository-file-tree.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Add border around the repository file tree -merge_request: 23018 -author: -type: changed diff --git a/changelogs/unreleased/50341-cleanup-useless-project-import-attributes.yml b/changelogs/unreleased/50341-cleanup-useless-project-import-attributes.yml deleted file mode 100644 index 3893f14e15c..00000000000 --- a/changelogs/unreleased/50341-cleanup-useless-project-import-attributes.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Removes all the irrelevant code and columns that were migrated from the Project - table over to the ProjectImportState table -merge_request: 21497 -author: -type: performance diff --git a/changelogs/unreleased/50626-searching-users-by-the-admin-panel-wipes-query-when-using-sort.yml b/changelogs/unreleased/50626-searching-users-by-the-admin-panel-wipes-query-when-using-sort.yml deleted file mode 100644 index c3251fea54d..00000000000 --- a/changelogs/unreleased/50626-searching-users-by-the-admin-panel-wipes-query-when-using-sort.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow search and sort users at same time on admin users page -merge_request: 23439 -author: -type: fixed diff --git a/changelogs/unreleased/50839-webide-mr-dropdown-filter.yml b/changelogs/unreleased/50839-webide-mr-dropdown-filter.yml deleted file mode 100644 index 1c6c8747197..00000000000 --- a/changelogs/unreleased/50839-webide-mr-dropdown-filter.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Scope default MR search in WebIDE dropdown to current project -merge_request: 23400 -author: -type: changed diff --git a/changelogs/unreleased/51029-status-emoji-currently-replaces-avatar-on-mobile.yml b/changelogs/unreleased/51029-status-emoji-currently-replaces-avatar-on-mobile.yml deleted file mode 100644 index dc11ede5c8d..00000000000 --- a/changelogs/unreleased/51029-status-emoji-currently-replaces-avatar-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve status emoji being replaced by avatar on mobile -merge_request: 23408 -author: -type: other diff --git a/changelogs/unreleased/51061-readme-url-n-1-rpc-call-resolved.yml b/changelogs/unreleased/51061-readme-url-n-1-rpc-call-resolved.yml deleted file mode 100644 index 86f91fcb427..00000000000 --- a/changelogs/unreleased/51061-readme-url-n-1-rpc-call-resolved.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improves performance of Project#readme_url by caching the README path -merge_request: 23357 -author: -type: performance diff --git a/changelogs/unreleased/51083-fix-move-api.yml b/changelogs/unreleased/51083-fix-move-api.yml deleted file mode 100644 index 8838f6f267e..00000000000 --- a/changelogs/unreleased/51083-fix-move-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Commits API: Preserve file content in move operations if unspecified' -merge_request: 23387 -author: -type: fixed diff --git a/changelogs/unreleased/51101-can-add-an-existing-group-member-into-a-group-project-with-new-permissions-but-permissions-are-not-overridde.yml b/changelogs/unreleased/51101-can-add-an-existing-group-member-into-a-group-project-with-new-permissions-but-permissions-are-not-overridde.yml deleted file mode 100644 index 96f33a72cc5..00000000000 --- a/changelogs/unreleased/51101-can-add-an-existing-group-member-into-a-group-project-with-new-permissions-but-permissions-are-not-overridde.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Restrict member access level to be higher than that of any parent group -merge_request: 23226 -author: -type: fixed diff --git a/changelogs/unreleased/51122-fix-navigating-discussions.yml b/changelogs/unreleased/51122-fix-navigating-discussions.yml deleted file mode 100644 index 94d76654589..00000000000 --- a/changelogs/unreleased/51122-fix-navigating-discussions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix navigating by unresolved discussions on Merge Request page -merge_request: 22789 -author: -type: fixed diff --git a/changelogs/unreleased/51138-54026-breadcrumb-subgroups-ellipsis.yml b/changelogs/unreleased/51138-54026-breadcrumb-subgroups-ellipsis.yml deleted file mode 100644 index f695d5aeff8..00000000000 --- a/changelogs/unreleased/51138-54026-breadcrumb-subgroups-ellipsis.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Make auto-generated icons for subgroups in the breadcrumb dropdown display as a circle" -merge_request: 23062 -author: Thomas Pathier -type: fix
\ No newline at end of file diff --git a/changelogs/unreleased/51243-further-improvements-to-project-overview-ui.yml b/changelogs/unreleased/51243-further-improvements-to-project-overview-ui.yml deleted file mode 100644 index ddb5eaa89d0..00000000000 --- a/changelogs/unreleased/51243-further-improvements-to-project-overview-ui.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Design improvements to project overview page -merge_request: 22196 -author: -type: changed diff --git a/changelogs/unreleased/51259-ci-cd-gitlab-ui-1.yml b/changelogs/unreleased/51259-ci-cd-gitlab-ui-1.yml deleted file mode 100644 index 1d761d6299c..00000000000 --- a/changelogs/unreleased/51259-ci-cd-gitlab-ui-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Uses new gitlab-ui components in Jobs and Pipelines components -merge_request: -author: -type: other diff --git a/changelogs/unreleased/51259-ci-cd-tooltips.yml b/changelogs/unreleased/51259-ci-cd-tooltips.yml deleted file mode 100644 index fc0010dbeba..00000000000 --- a/changelogs/unreleased/51259-ci-cd-tooltips.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Replaces tooltip directive with the new gl-tooltip directive for consistency - in some ci/cd code -merge_request: -author: -type: other diff --git a/changelogs/unreleased/51792-dont-delete-failed-install-pods.yml b/changelogs/unreleased/51792-dont-delete-failed-install-pods.yml deleted file mode 100644 index 7a900cbb86e..00000000000 --- a/changelogs/unreleased/51792-dont-delete-failed-install-pods.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't remove failed install pods after installing GitLab managed applications -merge_request: 23350 -author: -type: changed diff --git a/changelogs/unreleased/51959-branch-and-tag-name-links.yml b/changelogs/unreleased/51959-branch-and-tag-name-links.yml deleted file mode 100644 index 64f1522c70d..00000000000 --- a/changelogs/unreleased/51959-branch-and-tag-name-links.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Chat message push notifications now include links back to GitLab branches -merge_request: 22651 -author: Tony Castrogiovanni -type: added diff --git a/changelogs/unreleased/52007-frontmatter-toml-json.yml b/changelogs/unreleased/52007-frontmatter-toml-json.yml deleted file mode 100644 index bdada19f3a7..00000000000 --- a/changelogs/unreleased/52007-frontmatter-toml-json.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Changed frontmatter filtering to support YAML, JSON, TOML, and arbitrary languages -merge_request: 23331 -author: Travis Miller -type: changed diff --git a/changelogs/unreleased/52276-jump-to-top-in-merge-request.yml b/changelogs/unreleased/52276-jump-to-top-in-merge-request.yml deleted file mode 100644 index 3dc95441eec..00000000000 --- a/changelogs/unreleased/52276-jump-to-top-in-merge-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow user to scroll to top of tab on MR page -merge_request: -author: -type: added diff --git a/changelogs/unreleased/52285-omniauth-jwt-ppk-support.yml b/changelogs/unreleased/52285-omniauth-jwt-ppk-support.yml deleted file mode 100644 index 3ef564238c5..00000000000 --- a/changelogs/unreleased/52285-omniauth-jwt-ppk-support.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support RSA and ECDSA algorithms in Omniauth JWT provider -merge_request: 23411 -author: Michael Tsyganov -type: fixed diff --git a/changelogs/unreleased/52370-filter-by-none-any-for-labels-in-issues-mrs-boards.yml b/changelogs/unreleased/52370-filter-by-none-any-for-labels-in-issues-mrs-boards.yml deleted file mode 100644 index 9e1ee3ede5e..00000000000 --- a/changelogs/unreleased/52370-filter-by-none-any-for-labels-in-issues-mrs-boards.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds Any option to label filters -merge_request: 23111 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/52371-filter-by-none-any-for-labels-in-issues-mrs-api.yml b/changelogs/unreleased/52371-filter-by-none-any-for-labels-in-issues-mrs-api.yml deleted file mode 100644 index bb196af3e90..00000000000 --- a/changelogs/unreleased/52371-filter-by-none-any-for-labels-in-issues-mrs-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Filter by None/Any for labels in issues/mrs API -merge_request: 22622 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/52371-removes-patially-matching-no-label-and-makes-it-case-insensitive.yml b/changelogs/unreleased/52371-removes-patially-matching-no-label-and-makes-it-case-insensitive.yml deleted file mode 100644 index c1fc21c641a..00000000000 --- a/changelogs/unreleased/52371-removes-patially-matching-no-label-and-makes-it-case-insensitive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: removes partially matching of No Label filter and makes it case-insensitive -merge_request: 22622 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/52385-search-bar-for-dashboard-list.yml b/changelogs/unreleased/52385-search-bar-for-dashboard-list.yml deleted file mode 100644 index a437ae560cb..00000000000 --- a/changelogs/unreleased/52385-search-bar-for-dashboard-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use search bar for filtering in dashboard issues / MRs -merge_request: 22641 -author: Heinrich Lee Yu -type: changed diff --git a/changelogs/unreleased/52453-show-subgroups-in-group-create-issue.yml b/changelogs/unreleased/52453-show-subgroups-in-group-create-issue.yml deleted file mode 100644 index d5877e96d07..00000000000 --- a/changelogs/unreleased/52453-show-subgroups-in-group-create-issue.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project selector consistency in groups issues / MRs / boards pages -merge_request: 22612 -author: Heinrich Lee Yu -type: fixed diff --git a/changelogs/unreleased/52712-further-ui-improvements-to-profile-overview-tab.yml b/changelogs/unreleased/52712-further-ui-improvements-to-profile-overview-tab.yml deleted file mode 100644 index 65aa9323d2e..00000000000 --- a/changelogs/unreleased/52712-further-ui-improvements-to-profile-overview-tab.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: UI improvements to user's profile -merge_request: 22977 -author: -type: other diff --git a/changelogs/unreleased/52774-fix-svgs-in-ie-11.yml b/changelogs/unreleased/52774-fix-svgs-in-ie-11.yml deleted file mode 100644 index 656a915a281..00000000000 --- a/changelogs/unreleased/52774-fix-svgs-in-ie-11.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ensure that SVG sprite icons are properly rendered in IE11 -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/52828-inconsistency-in-fonts-used-for-branch-name-and-create-from-fields-when-creating-new-branch-from-ui.yml b/changelogs/unreleased/52828-inconsistency-in-fonts-used-for-branch-name-and-create-from-fields-when-creating-new-branch-from-ui.yml deleted file mode 100644 index 8132dde8636..00000000000 --- a/changelogs/unreleased/52828-inconsistency-in-fonts-used-for-branch-name-and-create-from-fields-when-creating-new-branch-from-ui.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make new branch form fields' fonts consistent -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/52940-fix-internal-email-pattern-not-respected.yml b/changelogs/unreleased/52940-fix-internal-email-pattern-not-respected.yml deleted file mode 100644 index 98e15a5cc0a..00000000000 --- a/changelogs/unreleased/52940-fix-internal-email-pattern-not-respected.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix a bug where internal email pattern wasn't respected -merge_request: 22516 -author: -type: fixed diff --git a/changelogs/unreleased/53289-update-haml_lint-to-0-28-0.yml b/changelogs/unreleased/53289-update-haml_lint-to-0-28-0.yml deleted file mode 100644 index 9a16666c416..00000000000 --- a/changelogs/unreleased/53289-update-haml_lint-to-0-28-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update haml_lint to 0.28.0 -merge_request: 22660 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/53290-incorrect-project-list-order-select-default-label.yml b/changelogs/unreleased/53290-incorrect-project-list-order-select-default-label.yml deleted file mode 100644 index d076352a27b..00000000000 --- a/changelogs/unreleased/53290-incorrect-project-list-order-select-default-label.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix default sorting for subgroups and projects list -merge_request: 23058 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/53291-update-ffaker-to-2-10-0.yml b/changelogs/unreleased/53291-update-ffaker-to-2-10-0.yml deleted file mode 100644 index a1b95df5e32..00000000000 --- a/changelogs/unreleased/53291-update-ffaker-to-2-10-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update ffaker to 2.10.0 -merge_request: 22661 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/53326-improve-issues-empty-state.yml b/changelogs/unreleased/53326-improve-issues-empty-state.yml deleted file mode 100644 index 7632db808b5..00000000000 --- a/changelogs/unreleased/53326-improve-issues-empty-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show different empty state for filtered issues and MRs -merge_request: 22775 -author: Heinrich Lee Yu -type: changed diff --git a/changelogs/unreleased/53400-unstar-icon-button-is-misaligned.yml b/changelogs/unreleased/53400-unstar-icon-button-is-misaligned.yml deleted file mode 100644 index b393795f491..00000000000 --- a/changelogs/unreleased/53400-unstar-icon-button-is-misaligned.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix: Unstar icon button is misaligned' -merge_request: 23444 -author: -type: fixed diff --git a/changelogs/unreleased/53578-fe-deployment-status.yml b/changelogs/unreleased/53578-fe-deployment-status.yml deleted file mode 100644 index b88bd70ee2e..00000000000 --- a/changelogs/unreleased/53578-fe-deployment-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds states to the deployment widget -merge_request: -author: -type: added diff --git a/changelogs/unreleased/53626-update-config-map-on-install-retry.yml b/changelogs/unreleased/53626-update-config-map-on-install-retry.yml deleted file mode 100644 index 38e79c06c89..00000000000 --- a/changelogs/unreleased/53626-update-config-map-on-install-retry.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update config map for gitlab managed application if already present on install -merge_request: 22969 -author: -type: other diff --git a/changelogs/unreleased/53640-follow-up-from-resolve-redesign-activity-feed.yml b/changelogs/unreleased/53640-follow-up-from-resolve-redesign-activity-feed.yml deleted file mode 100644 index 66301329c52..00000000000 --- a/changelogs/unreleased/53640-follow-up-from-resolve-redesign-activity-feed.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Adds new icon size to Vue icon component -merge_request: 22899 -author: -type: other diff --git a/changelogs/unreleased/53659-use-padded-key-for-gcm-ciphers.yml b/changelogs/unreleased/53659-use-padded-key-for-gcm-ciphers.yml deleted file mode 100644 index fe9ac7b3dc7..00000000000 --- a/changelogs/unreleased/53659-use-padded-key-for-gcm-ciphers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix web hook functionality when the database encryption key is too short -merge_request: 23573 -author: -type: fixed diff --git a/changelogs/unreleased/53700-hashed-storagemigration.yml b/changelogs/unreleased/53700-hashed-storagemigration.yml deleted file mode 100644 index 899012ffd22..00000000000 --- a/changelogs/unreleased/53700-hashed-storagemigration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Hashed Storage: allow migration to be retried in partially migrated projects' -merge_request: 23087 -author: -type: fixed diff --git a/changelogs/unreleased/53728-warn-in-web-editor-when-user-navigates-away.yml b/changelogs/unreleased/53728-warn-in-web-editor-when-user-navigates-away.yml deleted file mode 100644 index 8377fdc6133..00000000000 --- a/changelogs/unreleased/53728-warn-in-web-editor-when-user-navigates-away.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent user from navigating away from file edit without commit -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/53816-empty-label-menu-if-not-logged-in.yml b/changelogs/unreleased/53816-empty-label-menu-if-not-logged-in.yml deleted file mode 100644 index a9ca56303eb..00000000000 --- a/changelogs/unreleased/53816-empty-label-menu-if-not-logged-in.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes promote to group label for anonymous user -merge_request: 23042 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/53874-navbar-lowres.yml b/changelogs/unreleased/53874-navbar-lowres.yml deleted file mode 100644 index 3b31b8f93fe..00000000000 --- a/changelogs/unreleased/53874-navbar-lowres.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix overlapping navbar separator and overflowing navbar dropdown on small displays" -merge_request: 23126 -author: Thomas Pathier -type: fix diff --git a/changelogs/unreleased/53988-remove-notes-index-on-updated-at.yml b/changelogs/unreleased/53988-remove-notes-index-on-updated-at.yml deleted file mode 100644 index f0bbf69736d..00000000000 --- a/changelogs/unreleased/53988-remove-notes-index-on-updated-at.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove index for notes on updated_at -merge_request: 23356 -author: -type: performance diff --git a/changelogs/unreleased/53992-add-events-index-on-project-id-and-created-at.yml b/changelogs/unreleased/53992-add-events-index-on-project-id-and-created-at.yml deleted file mode 100644 index a2a3fa00f01..00000000000 --- a/changelogs/unreleased/53992-add-events-index-on-project-id-and-created-at.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add index for events on project_id and created_at -merge_request: 23354 -author: -type: performance diff --git a/changelogs/unreleased/53994-add-missing-ci_builds-partial-indices.yml b/changelogs/unreleased/53994-add-missing-ci_builds-partial-indices.yml deleted file mode 100644 index 4673ba38bae..00000000000 --- a/changelogs/unreleased/53994-add-missing-ci_builds-partial-indices.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add partial index for ci_builds on project_id and status -merge_request: 23268 -author: -type: performance diff --git a/changelogs/unreleased/54004-update-asana-to-0-8-1.yml b/changelogs/unreleased/54004-update-asana-to-0-8-1.yml deleted file mode 100644 index a47b4f3c4d9..00000000000 --- a/changelogs/unreleased/54004-update-asana-to-0-8-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update asana to 0.8.1 -merge_request: 23039 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/54010-update-asciidoctor-to-1-5-8.yml b/changelogs/unreleased/54010-update-asciidoctor-to-1-5-8.yml deleted file mode 100644 index f0b0aa0ee1c..00000000000 --- a/changelogs/unreleased/54010-update-asciidoctor-to-1-5-8.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update asciidoctor to 1.5.8 -merge_request: 23047 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/54015-Markdown-Editor-improve-Cursor-placement.yml b/changelogs/unreleased/54015-Markdown-Editor-improve-Cursor-placement.yml deleted file mode 100644 index 28e3fae01a9..00000000000 --- a/changelogs/unreleased/54015-Markdown-Editor-improve-Cursor-placement.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refine cursor positioning in Markdown Editor for wrap tags -merge_request: 23085 -author: Johann Hubert Sonntagbauer -type: changed diff --git a/changelogs/unreleased/54021-empty-button.yml b/changelogs/unreleased/54021-empty-button.yml deleted file mode 100644 index 3b03665cf95..00000000000 --- a/changelogs/unreleased/54021-empty-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent empty button being rendered in empty state -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/54032-reply-shortcut-only-discussion-text.yml b/changelogs/unreleased/54032-reply-shortcut-only-discussion-text.yml deleted file mode 100644 index 5c1f6e74b39..00000000000 --- a/changelogs/unreleased/54032-reply-shortcut-only-discussion-text.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make reply shortcut only quote selected discussion text -merge_request: 23096 -author: Thomas Pathier -type: fix diff --git a/changelogs/unreleased/54048-Line-numbers-are-misaligned-in-file-blame-view.yml b/changelogs/unreleased/54048-Line-numbers-are-misaligned-in-file-blame-view.yml deleted file mode 100644 index 8ceac4ec869..00000000000 --- a/changelogs/unreleased/54048-Line-numbers-are-misaligned-in-file-blame-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix line height of numbers in file blame view -merge_request: 23090 -author: Johann Hubert Sonntagbauer -type: fixed diff --git a/changelogs/unreleased/54093-the-default_value_for-gem-doesn-t-handle-actioncontroller-parameters-correctly.yml b/changelogs/unreleased/54093-the-default_value_for-gem-doesn-t-handle-actioncontroller-parameters-correctly.yml deleted file mode 100644 index 3d6fd2d065a..00000000000 --- a/changelogs/unreleased/54093-the-default_value_for-gem-doesn-t-handle-actioncontroller-parameters-correctly.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Fixes an issue where default values from models would override values set in - the interface (e.g. users would be set to external even though their emails matches - the internal email address pattern) -merge_request: 23114 -author: -type: fixed diff --git a/changelogs/unreleased/54160-use-reports-syntax-for-sast-in-auto-devops.yml b/changelogs/unreleased/54160-use-reports-syntax-for-sast-in-auto-devops.yml deleted file mode 100644 index 86c5a0c5a95..00000000000 --- a/changelogs/unreleased/54160-use-reports-syntax-for-sast-in-auto-devops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use reports syntax for SAST in Auto DevOps -merge_request: 23163 -author: -type: changed diff --git a/changelogs/unreleased/54201-update-rack-to-2-0-6.yml b/changelogs/unreleased/54201-update-rack-to-2-0-6.yml deleted file mode 100644 index 020b2bc0957..00000000000 --- a/changelogs/unreleased/54201-update-rack-to-2-0-6.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update rack to 2.0.6 (for QA environments) -merge_request: 23171 -author: Takuya Noguchi -type: security diff --git a/changelogs/unreleased/54218-fix-mergeUrlParams.yml b/changelogs/unreleased/54218-fix-mergeUrlParams.yml deleted file mode 100644 index dae06b66e8e..00000000000 --- a/changelogs/unreleased/54218-fix-mergeUrlParams.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix mergeUrlParams with fragment URL" -merge_request: 54218 -author: Thomas Holder -type: fixed diff --git a/changelogs/unreleased/54336-include-tags-into-pipeline-detail-view.yml b/changelogs/unreleased/54336-include-tags-into-pipeline-detail-view.yml deleted file mode 100644 index 11f941ab9bb..00000000000 --- a/changelogs/unreleased/54336-include-tags-into-pipeline-detail-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Merge request pipeline tag, and adds tags to pipeline view -merge_request: 23364 -author: -type: added diff --git a/changelogs/unreleased/54391-tag.yml b/changelogs/unreleased/54391-tag.yml deleted file mode 100644 index be571c6b0c3..00000000000 --- a/changelogs/unreleased/54391-tag.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correctly styles tags in sidebar for job page -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/54407-fix-limited-intersection-observers.yml b/changelogs/unreleased/54407-fix-limited-intersection-observers.yml deleted file mode 100644 index 2c2bedb170b..00000000000 --- a/changelogs/unreleased/54407-fix-limited-intersection-observers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Image Lazy Loader for some older browsers -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/54571-runner-tags.yml b/changelogs/unreleased/54571-runner-tags.yml deleted file mode 100644 index 1bb19d22e9c..00000000000 --- a/changelogs/unreleased/54571-runner-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds margins between tags when a job is stuck -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/54626-able-to-download-a-single-archive-file-with-api-by-ref-name.yml b/changelogs/unreleased/54626-able-to-download-a-single-archive-file-with-api-by-ref-name.yml deleted file mode 100644 index fa905b47ca2..00000000000 --- a/changelogs/unreleased/54626-able-to-download-a-single-archive-file-with-api-by-ref-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add new endpoint to download single artifact file for a ref -merge_request: 23538 -author: -type: added diff --git a/changelogs/unreleased/54648-fix-order-by-dropdown-tablet-screens.yml b/changelogs/unreleased/54648-fix-order-by-dropdown-tablet-screens.yml deleted file mode 100644 index 671d1590991..00000000000 --- a/changelogs/unreleased/54648-fix-order-by-dropdown-tablet-screens.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Order By dropdown menu styling in tablet and mobile screens -merge_request: 23446 -author: -type: fixed diff --git a/changelogs/unreleased/54826-use-read_repository-scope-on-read-only-files-endpoints.yml b/changelogs/unreleased/54826-use-read_repository-scope-on-read-only-files-endpoints.yml deleted file mode 100644 index ef8e93fca43..00000000000 --- a/changelogs/unreleased/54826-use-read_repository-scope-on-read-only-files-endpoints.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use read_repository scope on read-only files API -merge_request: 23534 -author: -type: fixed diff --git a/changelogs/unreleased/54857-fix-templates-path-traversal.yml b/changelogs/unreleased/54857-fix-templates-path-traversal.yml deleted file mode 100644 index 0da02432c60..00000000000 --- a/changelogs/unreleased/54857-fix-templates-path-traversal.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent a path traversal attack on global file templates -merge_request: -author: -type: security diff --git a/changelogs/unreleased/54975-fix-web-hooks-rake-task.yml b/changelogs/unreleased/54975-fix-web-hooks-rake-task.yml deleted file mode 100644 index 107a93e5b12..00000000000 --- a/changelogs/unreleased/54975-fix-web-hooks-rake-task.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix gitlab:web_hook tasks -merge_request: 23635 -author: -type: fixed diff --git a/changelogs/unreleased/55104-frozenerror-can-t-modify-frozen-string.yml b/changelogs/unreleased/55104-frozenerror-can-t-modify-frozen-string.yml deleted file mode 100644 index 994859b1d1d..00000000000 --- a/changelogs/unreleased/55104-frozenerror-can-t-modify-frozen-string.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix a frozen string error in app/mailers/notify.rb -merge_request: 23683 -author: -type: fixed diff --git a/changelogs/unreleased/55116-runtimeerror-can-t-modify-frozen-string.yml b/changelogs/unreleased/55116-runtimeerror-can-t-modify-frozen-string.yml deleted file mode 100644 index a98e70465b2..00000000000 --- a/changelogs/unreleased/55116-runtimeerror-can-t-modify-frozen-string.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix a frozen string error in lib/gitlab/utils.rb -merge_request: 23690 -author: -type: fixed diff --git a/changelogs/unreleased/55138-fix-mr-discussions-count.yml b/changelogs/unreleased/55138-fix-mr-discussions-count.yml deleted file mode 100644 index 667e9b971d8..00000000000 --- a/changelogs/unreleased/55138-fix-mr-discussions-count.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix MR resolved discussion counts being too low -merge_request: 23710 -author: -type: fixed diff --git a/changelogs/unreleased/55183-frozenerror-can-t-modify-frozen-string-in-app-mailers-notify-rb.yml b/changelogs/unreleased/55183-frozenerror-can-t-modify-frozen-string-in-app-mailers-notify-rb.yml deleted file mode 100644 index 685a8309c72..00000000000 --- a/changelogs/unreleased/55183-frozenerror-can-t-modify-frozen-string-in-app-mailers-notify-rb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix a potential frozen string error in app/mailers/notify.rb -merge_request: 23728 -author: -type: fixed diff --git a/changelogs/unreleased/55402-broken-master-karma-test-failing-in-spec-javascripts-boards-components-issue_due_date_spec-js.yml b/changelogs/unreleased/55402-broken-master-karma-test-failing-in-spec-javascripts-boards-components-issue_due_date_spec-js.yml deleted file mode 100644 index d2ff095ce55..00000000000 --- a/changelogs/unreleased/55402-broken-master-karma-test-failing-in-spec-javascripts-boards-components-issue_due_date_spec-js.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix due date test -merge_request: 23845 -author: -type: other diff --git a/changelogs/unreleased/_acet-fix-flash-styling.yml b/changelogs/unreleased/_acet-fix-flash-styling.yml deleted file mode 100644 index 57354c04899..00000000000 --- a/changelogs/unreleased/_acet-fix-flash-styling.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix flash notice styling for fluid layout -merge_request: 23382 -author: -type: fixed diff --git a/changelogs/unreleased/ab-approximate-counts.yml b/changelogs/unreleased/ab-approximate-counts.yml deleted file mode 100644 index 8a67239d031..00000000000 --- a/changelogs/unreleased/ab-approximate-counts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Approximate counting strategy with TABLESAMPLE. -merge_request: 22650 -author: -type: performance diff --git a/changelogs/unreleased/added-glob-for-ci-changes-detection.yml b/changelogs/unreleased/added-glob-for-ci-changes-detection.yml deleted file mode 100644 index 887c6ef0346..00000000000 --- a/changelogs/unreleased/added-glob-for-ci-changes-detection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added glob for CI changes detection -merge_request: 23128 -author: Kirill Zaitsev -type: added diff --git a/changelogs/unreleased/an-gitaly-version-0-133-0.yml b/changelogs/unreleased/an-gitaly-version-0-133-0.yml deleted file mode 100644 index 4f3943ceacb..00000000000 --- a/changelogs/unreleased/an-gitaly-version-0-133-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updated Gitaly to v0.133.0 -merge_request: 23148 -author: -type: other diff --git a/changelogs/unreleased/ashmckenzie-hmac-token-decode-and-tests.yml b/changelogs/unreleased/ashmckenzie-hmac-token-decode-and-tests.yml deleted file mode 100644 index d15c5654d99..00000000000 --- a/changelogs/unreleased/ashmckenzie-hmac-token-decode-and-tests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Relocate JSONWebToken::HMACToken from EE -merge_request: 22906 -author: -type: changed diff --git a/changelogs/unreleased/auto_devops_kubernetes_active.yml b/changelogs/unreleased/auto_devops_kubernetes_active.yml deleted file mode 100644 index 310d37128c9..00000000000 --- a/changelogs/unreleased/auto_devops_kubernetes_active.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Switch kubernetes:active with checking in Auto-DevOps.gitlab-ci.yml -merge_request: 22929 -author: -type: fixed diff --git a/changelogs/unreleased/blackst0ne-add-discord-service.yml b/changelogs/unreleased/blackst0ne-add-discord-service.yml deleted file mode 100644 index 85dedf6d81f..00000000000 --- a/changelogs/unreleased/blackst0ne-add-discord-service.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Discord integration -merge_request: 22684 -author: "@blackst0ne" -type: added diff --git a/changelogs/unreleased/bump_gpgme_gem.yml b/changelogs/unreleased/bump_gpgme_gem.yml deleted file mode 100644 index 4c0067cb824..00000000000 --- a/changelogs/unreleased/bump_gpgme_gem.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump gpgme gem version from 2.0.13 to 2.0.18 -merge_request: -author: asaparov -type: other diff --git a/changelogs/unreleased/bvl-use-shell-writeref.yml b/changelogs/unreleased/bvl-use-shell-writeref.yml deleted file mode 100644 index 682d428e8c5..00000000000 --- a/changelogs/unreleased/bvl-use-shell-writeref.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid creating invalid refs using rugged, shelling out for writing refs -merge_request: 23286 -author: -type: fixed diff --git a/changelogs/unreleased/ce-52811-fix_namespaces_api_routing.yml b/changelogs/unreleased/ce-52811-fix_namespaces_api_routing.yml deleted file mode 100644 index b5fd99c304f..00000000000 --- a/changelogs/unreleased/ce-52811-fix_namespaces_api_routing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix API::Namespaces routing to accept namepaces with dots -merge_request: 22912 -author: -type: fixed diff --git a/changelogs/unreleased/ce-54109-fix_user_by_any_email.yml b/changelogs/unreleased/ce-54109-fix_user_by_any_email.yml deleted file mode 100644 index eb5d2e3244c..00000000000 --- a/changelogs/unreleased/ce-54109-fix_user_by_any_email.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Respect confirmed flag on secondary emails -merge_request: 23181 -author: -type: fixed diff --git a/changelogs/unreleased/cert-manager-email.yml b/changelogs/unreleased/cert-manager-email.yml deleted file mode 100644 index 530608d9660..00000000000 --- a/changelogs/unreleased/cert-manager-email.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ability to override email for cert-manager -merge_request: 23503 -author: Amit Rathi -type: added diff --git a/changelogs/unreleased/certmanager-temp.yml b/changelogs/unreleased/certmanager-temp.yml deleted file mode 100644 index 3f908d01c9f..00000000000 --- a/changelogs/unreleased/certmanager-temp.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "#40635: Adds support for cert-manager" -merge_request: 23036 -author: Amit Rathi -type: added diff --git a/changelogs/unreleased/check-if-fetched-data-does-is-complete.yml b/changelogs/unreleased/check-if-fetched-data-does-is-complete.yml deleted file mode 100644 index 31c131045b9..00000000000 --- a/changelogs/unreleased/check-if-fetched-data-does-is-complete.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate chunk size when persist -merge_request: 23341 -author: -type: fixed diff --git a/changelogs/unreleased/commit-badge-style-fix.yml b/changelogs/unreleased/commit-badge-style-fix.yml deleted file mode 100644 index d7b37717853..00000000000 --- a/changelogs/unreleased/commit-badge-style-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed styling of image comment badges on commits -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/define-default-value-for-only-except-keys.yml b/changelogs/unreleased/define-default-value-for-only-except-keys.yml deleted file mode 100644 index ed0e982f0fc..00000000000 --- a/changelogs/unreleased/define-default-value-for-only-except-keys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Define the default value for only/except policies -merge_request: 23765 -author: -type: changed diff --git a/changelogs/unreleased/deprecated-instance-find.yml b/changelogs/unreleased/deprecated-instance-find.yml deleted file mode 100644 index d2ba821e124..00000000000 --- a/changelogs/unreleased/deprecated-instance-find.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: You are passing an instance of ActiveRecord::Base to' -merge_request: 23369 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/diff-expand-commit-file.yml b/changelogs/unreleased/diff-expand-commit-file.yml deleted file mode 100644 index 8ca784d75c1..00000000000 --- a/changelogs/unreleased/diff-expand-commit-file.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed diff files expanding not loading commit content -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/diff-fix-expanding.yml b/changelogs/unreleased/diff-fix-expanding.yml deleted file mode 100644 index 8ba7f87addc..00000000000 --- a/changelogs/unreleased/diff-fix-expanding.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed multiple diff line discussions not expanding -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/discussion-perf-improvement.yml b/changelogs/unreleased/discussion-perf-improvement.yml deleted file mode 100644 index defff8a55f5..00000000000 --- a/changelogs/unreleased/discussion-perf-improvement.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve initial discussion rendering performance -merge_request: 22607 -author: -type: changed diff --git a/changelogs/unreleased/dm-batch-loader-key.yml b/changelogs/unreleased/dm-batch-loader-key.yml deleted file mode 100644 index 047fdbc4b3f..00000000000 --- a/changelogs/unreleased/dm-batch-loader-key.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Batch load only data from same repository when lazy object is accessed -merge_request: 23309 -author: -type: performance diff --git a/changelogs/unreleased/dm-remove-prune-web-hook-logs-worker.yml b/changelogs/unreleased/dm-remove-prune-web-hook-logs-worker.yml deleted file mode 100644 index fb0c508400c..00000000000 --- a/changelogs/unreleased/dm-remove-prune-web-hook-logs-worker.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove old webhook logs after 90 days, as documented, instead of after 2 -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/docs-minor-aws-fixes.yml b/changelogs/unreleased/docs-minor-aws-fixes.yml deleted file mode 100644 index 64fa6b12afe..00000000000 --- a/changelogs/unreleased/docs-minor-aws-fixes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes to AWS documentation spelling and grammar -merge_request: 23198 -author: Brendan O'Leary -type: other diff --git a/changelogs/unreleased/document-raw-snippet-api.yml b/changelogs/unreleased/document-raw-snippet-api.yml deleted file mode 100644 index 3b8818cea5c..00000000000 --- a/changelogs/unreleased/document-raw-snippet-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix lack of documentation on how to fetch a snippet's content using API -merge_request: 23448 -author: Colin Leroy -type: other diff --git a/changelogs/unreleased/drop-default-value-status-deployments.yml b/changelogs/unreleased/drop-default-value-status-deployments.yml deleted file mode 100644 index fdb826a0507..00000000000 --- a/changelogs/unreleased/drop-default-value-status-deployments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Drop default value on status column in deployments table -merge_request: 22971 -author: -type: other diff --git a/changelogs/unreleased/drop-gcp-cluster-table.yml b/changelogs/unreleased/drop-gcp-cluster-table.yml deleted file mode 100644 index 15964ec2eaf..00000000000 --- a/changelogs/unreleased/drop-gcp-cluster-table.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Drop gcp_clusters table -merge_request: 22713 -author: -type: other diff --git a/changelogs/unreleased/expose-mr-pipeline-variables.yml b/changelogs/unreleased/expose-mr-pipeline-variables.yml deleted file mode 100644 index b77b9a69d5c..00000000000 --- a/changelogs/unreleased/expose-mr-pipeline-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose merge request pipeline variables -merge_request: 23398 -author: -type: changed diff --git a/changelogs/unreleased/fix-deadlock-chunked-io.yml b/changelogs/unreleased/fix-deadlock-chunked-io.yml deleted file mode 100644 index def7a59e86e..00000000000 --- a/changelogs/unreleased/fix-deadlock-chunked-io.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix deadlock on ChunkedIO -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-gb-encrypt-ci-build-token.yml b/changelogs/unreleased/fix-gb-encrypt-ci-build-token.yml deleted file mode 100644 index 04fc88bc3d3..00000000000 --- a/changelogs/unreleased/fix-gb-encrypt-ci-build-token.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Encrypt CI/CD builds authentication tokens -merge_request: 23436 -author: -type: security diff --git a/changelogs/unreleased/fix-gb-encrypt-runners-tokens.yml b/changelogs/unreleased/fix-gb-encrypt-runners-tokens.yml deleted file mode 100644 index 4ce4f96c1dd..00000000000 --- a/changelogs/unreleased/fix-gb-encrypt-runners-tokens.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Encrypt runners tokens -merge_request: 23412 -author: -type: security diff --git a/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml b/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml deleted file mode 100644 index 52b431edf2c..00000000000 --- a/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve help and validation sections of maximum build timeout inputs -merge_request: 23586 -author: -type: fixed diff --git a/changelogs/unreleased/fix-mr-widget-unrelated-deployment-status.yml b/changelogs/unreleased/fix-mr-widget-unrelated-deployment-status.yml deleted file mode 100644 index ab926fbd43b..00000000000 --- a/changelogs/unreleased/fix-mr-widget-unrelated-deployment-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix unrelated deployment status in MR widget -merge_request: 23175 -author: -type: fixed diff --git a/changelogs/unreleased/fix-multiple-comments-shade-overlap.yml b/changelogs/unreleased/fix-multiple-comments-shade-overlap.yml deleted file mode 100644 index 20005ba355e..00000000000 --- a/changelogs/unreleased/fix-multiple-comments-shade-overlap.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix multiple commits shade overlapping vertical discussion line -merge_request: 23515 -author: -type: fixed diff --git a/changelogs/unreleased/fj-47494-upgrade-git-to-2-18-0.yml b/changelogs/unreleased/fj-47494-upgrade-git-to-2-18-0.yml deleted file mode 100644 index 0f01552ff7e..00000000000 --- a/changelogs/unreleased/fj-47494-upgrade-git-to-2-18-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade minimum required Git version to 2.18.0 -merge_request: 22803 -author: -type: other diff --git a/changelogs/unreleased/fj-clean-content-headers.yml b/changelogs/unreleased/fj-clean-content-headers.yml deleted file mode 100644 index 59e25ca6578..00000000000 --- a/changelogs/unreleased/fj-clean-content-headers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added feature flag to signal content headers detection by Workhorse -merge_request: 22667 -author: -type: added diff --git a/changelogs/unreleased/fj-force-content-disposition.yml b/changelogs/unreleased/fj-force-content-disposition.yml deleted file mode 100644 index d84555a489f..00000000000 --- a/changelogs/unreleased/fj-force-content-disposition.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Force content disposition attachment to several endpoints -merge_request: 23223 -author: -type: other diff --git a/changelogs/unreleased/force-reload-arguments-1.yml b/changelogs/unreleased/force-reload-arguments-1.yml deleted file mode 100644 index 29f34b8bdbe..00000000000 --- a/changelogs/unreleased/force-reload-arguments-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Passing an argument to force an association to reload is now deprecated -merge_request: 23334 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/frozen-string-lib-gitlab-even-even-even-more.yml b/changelogs/unreleased/frozen-string-lib-gitlab-even-even-even-more.yml deleted file mode 100644 index e718d716647..00000000000 --- a/changelogs/unreleased/frozen-string-lib-gitlab-even-even-even-more.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable even more frozen string for lib/gitlab -merge_request: -author: gfyoung -type: performance diff --git a/changelogs/unreleased/frozen-string-lib-gitlab-even-even-more.yml b/changelogs/unreleased/frozen-string-lib-gitlab-even-even-more.yml deleted file mode 100644 index e718d716647..00000000000 --- a/changelogs/unreleased/frozen-string-lib-gitlab-even-even-more.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable even more frozen string for lib/gitlab -merge_request: -author: gfyoung -type: performance diff --git a/changelogs/unreleased/frozen-string-lib-gitlab-even-more.yml b/changelogs/unreleased/frozen-string-lib-gitlab-even-more.yml deleted file mode 100644 index cfbc4ced635..00000000000 --- a/changelogs/unreleased/frozen-string-lib-gitlab-even-more.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable even more frozen string in lib/gitlab/**/*.rb -merge_request: -author: gfyoung -type: performance diff --git a/changelogs/unreleased/frozen-string-lib-gitlab-more.yml b/changelogs/unreleased/frozen-string-lib-gitlab-more.yml deleted file mode 100644 index cfbc4ced635..00000000000 --- a/changelogs/unreleased/frozen-string-lib-gitlab-more.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable even more frozen string in lib/gitlab/**/*.rb -merge_request: -author: gfyoung -type: performance diff --git a/changelogs/unreleased/frozen-string-lib-rubocop.yml b/changelogs/unreleased/frozen-string-lib-rubocop.yml deleted file mode 100644 index 9fe342e251b..00000000000 --- a/changelogs/unreleased/frozen-string-lib-rubocop.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable Rubocop on lib/gitlab -merge_request: -author: gfyoung -type: other diff --git a/changelogs/unreleased/gt-add-top-padding-for-nested-environment-items-loading-icon.yml b/changelogs/unreleased/gt-add-top-padding-for-nested-environment-items-loading-icon.yml deleted file mode 100644 index 606314b5780..00000000000 --- a/changelogs/unreleased/gt-add-top-padding-for-nested-environment-items-loading-icon.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add top padding for nested environment items loading icon -merge_request: 23580 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/gt-align-issue-status-and-confidential-icon.yml b/changelogs/unreleased/gt-align-issue-status-and-confidential-icon.yml deleted file mode 100644 index 481ce656dc7..00000000000 --- a/changelogs/unreleased/gt-align-issue-status-and-confidential-icon.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Align issue status label and confidential icon. -merge_request: 23046 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/gt-change-breadcrumb-title-for-contribution-charts.yml b/changelogs/unreleased/gt-change-breadcrumb-title-for-contribution-charts.yml deleted file mode 100644 index 233cc43117d..00000000000 --- a/changelogs/unreleased/gt-change-breadcrumb-title-for-contribution-charts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change breadcrumb title for contribution charts -merge_request: 23071 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-change-container-width-for-project-import.yml b/changelogs/unreleased/gt-change-container-width-for-project-import.yml deleted file mode 100644 index ec2beb15912..00000000000 --- a/changelogs/unreleased/gt-change-container-width-for-project-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change container width for project import -merge_request: 23318 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/gt-externalize-app-views-invites.yml b/changelogs/unreleased/gt-externalize-app-views-invites.yml deleted file mode 100644 index b5a22177f9b..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-invites.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/invites` -merge_request: 23205 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-project-runners.yml b/changelogs/unreleased/gt-externalize-app-views-project-runners.yml deleted file mode 100644 index d7d591e2175..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-project-runners.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/project/runners` -merge_request: 23208 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-snippets.yml b/changelogs/unreleased/gt-externalize-app-views-snippets.yml deleted file mode 100644 index 633aa9f2534..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-snippets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/snippets` -merge_request: 23351 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/gt-fix-typo-in-notebook-props.yml b/changelogs/unreleased/gt-fix-typo-in-notebook-props.yml deleted file mode 100644 index 60603905a2d..00000000000 --- a/changelogs/unreleased/gt-fix-typo-in-notebook-props.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix typo in notebook props -merge_request: 23103 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-fix-typos-in-lib.yml b/changelogs/unreleased/gt-fix-typos-in-lib.yml deleted file mode 100644 index 32ccd03b063..00000000000 --- a/changelogs/unreleased/gt-fix-typos-in-lib.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix typos in lib -merge_request: 23106 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-remove-instances-of-extend-monospace.yml b/changelogs/unreleased/gt-remove-instances-of-extend-monospace.yml deleted file mode 100644 index dc41de61046..00000000000 --- a/changelogs/unreleased/gt-remove-instances-of-extend-monospace.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove monospace extend -merge_request: 23089 -author: George Tsiolis -type: performance diff --git a/changelogs/unreleased/gt-remove-unused-project-method.yml b/changelogs/unreleased/gt-remove-unused-project-method.yml deleted file mode 100644 index 2d60c2fe423..00000000000 --- a/changelogs/unreleased/gt-remove-unused-project-method.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unused project method -merge_request: 54103 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-rename-diffs-store-variable.yml b/changelogs/unreleased/gt-rename-diffs-store-variable.yml deleted file mode 100644 index 0aed49f3d60..00000000000 --- a/changelogs/unreleased/gt-rename-diffs-store-variable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rename diffs store variable -merge_request: 23123 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-show-primary-button-when-all-labels-are-prioritized.yml b/changelogs/unreleased/gt-show-primary-button-when-all-labels-are-prioritized.yml deleted file mode 100644 index eed31950a76..00000000000 --- a/changelogs/unreleased/gt-show-primary-button-when-all-labels-are-prioritized.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show primary button when all labels are prioritized -merge_request: 23648 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-update-env-metrics-empty-state.yml b/changelogs/unreleased/gt-update-env-metrics-empty-state.yml deleted file mode 100644 index a05dc07e65c..00000000000 --- a/changelogs/unreleased/gt-update-env-metrics-empty-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update environments metrics empty state -merge_request: 23074 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-use-gl-tooltip-directive.yml b/changelogs/unreleased/gt-use-gl-tooltip-directive.yml deleted file mode 100644 index 91fdb73e3c6..00000000000 --- a/changelogs/unreleased/gt-use-gl-tooltip-directive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Replace tooltip directive with gl-tooltip diretive in badges, cycle analytics, and diffs -merge_request: 22770 -author: George Tsiolis -type: performance diff --git a/changelogs/unreleased/ide-open-all-mr-files.yml b/changelogs/unreleased/ide-open-all-mr-files.yml deleted file mode 100644 index 6a5ea8908fc..00000000000 --- a/changelogs/unreleased/ide-open-all-mr-files.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Open first 10 merge request files in IDE -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/ignore-failed-pipeline-creation-on-pipeline-schedule.yml b/changelogs/unreleased/ignore-failed-pipeline-creation-on-pipeline-schedule.yml deleted file mode 100644 index 90f47aa12db..00000000000 --- a/changelogs/unreleased/ignore-failed-pipeline-creation-on-pipeline-schedule.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove auto deactivation when failed to create a pipeline via pipeline schedules -merge_request: 22243 -author: -type: changed diff --git a/changelogs/unreleased/improve_auto_devops_migration_debug.yml b/changelogs/unreleased/improve_auto_devops_migration_debug.yml deleted file mode 100644 index 96a78808361..00000000000 --- a/changelogs/unreleased/improve_auto_devops_migration_debug.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Auto DevOps: Add echo for each branch of the deploy() function where we run - helm upgrade' -merge_request: 23499 -author: -type: changed diff --git a/changelogs/unreleased/include-new-link-in-breadcrumb.yml b/changelogs/unreleased/include-new-link-in-breadcrumb.yml deleted file mode 100644 index 68c808d66d7..00000000000 --- a/changelogs/unreleased/include-new-link-in-breadcrumb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include new link in breadcrumb for issues, merge requests, milestones, and labels -merge_request: 18515 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/jivl-add-empty-state-graphs-null-values.yml b/changelogs/unreleased/jivl-add-empty-state-graphs-null-values.yml deleted file mode 100644 index d21254b16d0..00000000000 --- a/changelogs/unreleased/jivl-add-empty-state-graphs-null-values.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add empty state for graphs with no values -merge_request: 22630 -author: -type: fixed diff --git a/changelogs/unreleased/jupyter-tls.yml b/changelogs/unreleased/jupyter-tls.yml deleted file mode 100644 index 4111edd34ff..00000000000 --- a/changelogs/unreleased/jupyter-tls.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "#52753: HTTPS for JupyterHub installation" -merge_request: 23479 -author: Amit Rathi -type: added diff --git a/changelogs/unreleased/kcj-add-philosophy.yml b/changelogs/unreleased/kcj-add-philosophy.yml deleted file mode 100644 index d164ce165ea..00000000000 --- a/changelogs/unreleased/kcj-add-philosophy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds a PHILOSOPHY.md which references GitLab Product Handbook -merge_request: 23200 -author: -type: other diff --git a/changelogs/unreleased/kubernetes-http-response-code.yml b/changelogs/unreleased/kubernetes-http-response-code.yml deleted file mode 100644 index 551fe2edc3c..00000000000 --- a/changelogs/unreleased/kubernetes-http-response-code.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show HTTP response code for Kubernetes errors -merge_request: 22964 -author: -type: other diff --git a/changelogs/unreleased/legacy_fallback_for_project_clusters_only.yml b/changelogs/unreleased/legacy_fallback_for_project_clusters_only.yml deleted file mode 100644 index c8e959176d0..00000000000 --- a/changelogs/unreleased/legacy_fallback_for_project_clusters_only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fallback to admin KUBE_TOKEN for project clusters only -merge_request: 23527 -author: -type: other diff --git a/changelogs/unreleased/lock-trace-writes.yml b/changelogs/unreleased/lock-trace-writes.yml deleted file mode 100644 index 9c5239081b9..00000000000 --- a/changelogs/unreleased/lock-trace-writes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Lock writes to trace stream -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/mg-fix-knative-application-row.yml b/changelogs/unreleased/mg-fix-knative-application-row.yml deleted file mode 100644 index 95142d380a4..00000000000 --- a/changelogs/unreleased/mg-fix-knative-application-row.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide Knative from group cluster applications until supported -merge_request: 23577 -author: -type: fixed diff --git a/changelogs/unreleased/move-group-issues-search-cte-up-the-chain.yml b/changelogs/unreleased/move-group-issues-search-cte-up-the-chain.yml deleted file mode 100644 index 0269e7b6196..00000000000 --- a/changelogs/unreleased/move-group-issues-search-cte-up-the-chain.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error when searching for group issues with priority or popularity sort -merge_request: 23445 -author: -type: fixed diff --git a/changelogs/unreleased/mr-file-tree-commit.yml b/changelogs/unreleased/mr-file-tree-commit.yml deleted file mode 100644 index e0d47e6e61f..00000000000 --- a/changelogs/unreleased/mr-file-tree-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show tree collapse button for merge request commit diffs -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/mr-origin-23218.yml b/changelogs/unreleased/mr-origin-23218.yml deleted file mode 100644 index 49867f04343..00000000000 --- a/changelogs/unreleased/mr-origin-23218.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix typo for scheduled pipeline -merge_request: 23218 -author: Davy Defaud -type: other diff --git a/changelogs/unreleased/mr-pipelines-2.yml b/changelogs/unreleased/mr-pipelines-2.yml deleted file mode 100644 index 683c626c3ce..00000000000 --- a/changelogs/unreleased/mr-pipelines-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Merge request pipelines -merge_request: 23217 -author: -type: added diff --git a/changelogs/unreleased/mr-sticky-headers.yml b/changelogs/unreleased/mr-sticky-headers.yml deleted file mode 100644 index c20829bc2d7..00000000000 --- a/changelogs/unreleased/mr-sticky-headers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make diff file headers sticky -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/mr-tree-filter-path-name.yml b/changelogs/unreleased/mr-tree-filter-path-name.yml deleted file mode 100644 index 152f8a67337..00000000000 --- a/changelogs/unreleased/mr-tree-filter-path-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Changed merge request filtering to be by path instead of name -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/multiple-diff-line-discussions-fix.yml b/changelogs/unreleased/multiple-diff-line-discussions-fix.yml deleted file mode 100644 index 870a8ab3815..00000000000 --- a/changelogs/unreleased/multiple-diff-line-discussions-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed duplicate discussions getting added to diff lines -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/non-webkit-scrollbar-fixing.yml b/changelogs/unreleased/non-webkit-scrollbar-fixing.yml deleted file mode 100644 index 526a9f25486..00000000000 --- a/changelogs/unreleased/non-webkit-scrollbar-fixing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix horizontal scrollbar overlapping on horizontal scrolling-tabs -merge_request: 23167 -author: Harry Kiselev -type: other diff --git a/changelogs/unreleased/optimise-job-request.yml b/changelogs/unreleased/optimise-job-request.yml deleted file mode 100644 index e1265841b48..00000000000 --- a/changelogs/unreleased/optimise-job-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use cached size when passing artifacts to Runner -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/order-of-notification-settings.yml b/changelogs/unreleased/order-of-notification-settings.yml deleted file mode 100644 index 0f0243bcb40..00000000000 --- a/changelogs/unreleased/order-of-notification-settings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: reorder notification settings by noisy-ness -merge_request: -author: C.J. Jameson -type: changed diff --git a/changelogs/unreleased/osw-fallback-on-blank-refs.yml b/changelogs/unreleased/osw-fallback-on-blank-refs.yml deleted file mode 100644 index 039179f5829..00000000000 --- a/changelogs/unreleased/osw-fallback-on-blank-refs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid Gitaly RPC errors when fetching diff stats -merge_request: 22995 -author: -type: fixed diff --git a/changelogs/unreleased/osw-fix-grouping-by-file-path.yml b/changelogs/unreleased/osw-fix-grouping-by-file-path.yml deleted file mode 100644 index dff3116e7c6..00000000000 --- a/changelogs/unreleased/osw-fix-grouping-by-file-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid 500's when serializing legacy diff notes -merge_request: 23544 -author: -type: fixed diff --git a/changelogs/unreleased/osw-remove-unnused-data-from-diff-discussions.yml b/changelogs/unreleased/osw-remove-unnused-data-from-diff-discussions.yml deleted file mode 100644 index 58d9a19d038..00000000000 --- a/changelogs/unreleased/osw-remove-unnused-data-from-diff-discussions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unused data from discussions endpoint -merge_request: 23570 -author: -type: performance diff --git a/changelogs/unreleased/osw-update-mr-metrics-with-events-data.yml b/changelogs/unreleased/osw-update-mr-metrics-with-events-data.yml deleted file mode 100644 index 09a10a86adc..00000000000 --- a/changelogs/unreleased/osw-update-mr-metrics-with-events-data.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Populate MR metrics with events table information (migration) -merge_request: 23564 -author: -type: performance diff --git a/changelogs/unreleased/profile-fixing.yml b/changelogs/unreleased/profile-fixing.yml deleted file mode 100644 index 7e255d997d8..00000000000 --- a/changelogs/unreleased/profile-fixing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bottom paddings of profile header and some markup updates of profile -merge_request: 23168 -author: Harry Kiselev -type: other diff --git a/changelogs/unreleased/project_identicon_fix.yml b/changelogs/unreleased/project_identicon_fix.yml deleted file mode 100644 index de4876fc4a5..00000000000 --- a/changelogs/unreleased/project_identicon_fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project identicon aligning Harry Kiselev -merge_request: 23166 -author: Harry Kiselev -type: other diff --git a/changelogs/unreleased/rails5-active-record-class-value.yml b/changelogs/unreleased/rails5-active-record-class-value.yml deleted file mode 100644 index 9f9fdf10cd1..00000000000 --- a/changelogs/unreleased/rails5-active-record-class-value.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Rails5: Passing a class as a value in an Active Record query is deprecated' -merge_request: 23164 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/rails5-deprecation-render-nothing.yml b/changelogs/unreleased/rails5-deprecation-render-nothing.yml deleted file mode 100644 index 32e2d5800c7..00000000000 --- a/changelogs/unreleased/rails5-deprecation-render-nothing.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: render :nothing option is deprecated, Use head method to respond with empty - response body. -merge_request: 23311 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/rails5-env-deprecated.yml b/changelogs/unreleased/rails5-env-deprecated.yml deleted file mode 100644 index 2f8573e2ff6..00000000000 --- a/changelogs/unreleased/rails5-env-deprecated.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Rails5: env is deprecated and will be removed from Rails 5.1' -merge_request: 22626 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/remove-blob-search-limit.yml b/changelogs/unreleased/remove-blob-search-limit.yml deleted file mode 100644 index 5bad3a83dbb..00000000000 --- a/changelogs/unreleased/remove-blob-search-limit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove limit of 100 when searching repository code. -merge_request: 8671 -author: -type: fixed diff --git a/changelogs/unreleased/remove-deployment-status-hack-from-backend.yml b/changelogs/unreleased/remove-deployment-status-hack-from-backend.yml deleted file mode 100644 index 2348bfab7d9..00000000000 --- a/changelogs/unreleased/remove-deployment-status-hack-from-backend.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Return real deployment status to frontend -merge_request: 23270 -author: -type: fixed diff --git a/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml b/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml deleted file mode 100644 index 3a8b3a0df5d..00000000000 --- a/changelogs/unreleased/remove-duplicate-primary-button-in-dashboard-snippets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicate primary button in dashboard snippets on small viewports -merge_request: 22902 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/render-text-deprecated.yml b/changelogs/unreleased/render-text-deprecated.yml deleted file mode 100644 index 7dbbd13bcef..00000000000 --- a/changelogs/unreleased/render-text-deprecated.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Fix deprecation: render :text is deprecated because it does not actually render - a text/plain response' -merge_request: 23425 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/retryable_create_or_update_kubernetes_namespace.yml b/changelogs/unreleased/retryable_create_or_update_kubernetes_namespace.yml deleted file mode 100644 index 607f2709f90..00000000000 --- a/changelogs/unreleased/retryable_create_or_update_kubernetes_namespace.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Updates service to update Kubernetes project namespaces and restricted service - account if present -merge_request: 23525 -author: -type: changed diff --git a/changelogs/unreleased/revert-1cccfca1.yml b/changelogs/unreleased/revert-1cccfca1.yml deleted file mode 100644 index c1efdaac138..00000000000 --- a/changelogs/unreleased/revert-1cccfca1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Restore kubernetes:active in Auto-DevOps.gitlab-ci.yml (reverts 22929) -merge_request: 23826 -author: -type: fixed diff --git a/changelogs/unreleased/rs-cherry-pick-api.yml b/changelogs/unreleased/rs-cherry-pick-api.yml deleted file mode 100644 index ce844dfc939..00000000000 --- a/changelogs/unreleased/rs-cherry-pick-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve possible cherry pick API race condition -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/security-182-update-workhorse.yml b/changelogs/unreleased/security-182-update-workhorse.yml deleted file mode 100644 index 76850901b68..00000000000 --- a/changelogs/unreleased/security-182-update-workhorse.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redact sensitive information on gitlab-workhorse log -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2717-xss-username-autocomplete.yml b/changelogs/unreleased/security-2717-xss-username-autocomplete.yml deleted file mode 100644 index d9b1015eeb4..00000000000 --- a/changelogs/unreleased/security-2717-xss-username-autocomplete.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Escape user fullname while rendering autocomplete template to prevent XSS -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2736-prometheus-ssrf.yml b/changelogs/unreleased/security-2736-prometheus-ssrf.yml deleted file mode 100644 index 9d0dda8a75f..00000000000 --- a/changelogs/unreleased/security-2736-prometheus-ssrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not follow redirects in Prometheus service when making http requests to the configured api url -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2754-fix-lfs-import.yml b/changelogs/unreleased/security-2754-fix-lfs-import.yml deleted file mode 100644 index e8e74c9c3f6..00000000000 --- a/changelogs/unreleased/security-2754-fix-lfs-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate LFS hrefs before downloading them -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-bvl-exposure-in-commits-list.yml b/changelogs/unreleased/security-bvl-exposure-in-commits-list.yml deleted file mode 100644 index 0361fb0c041..00000000000 --- a/changelogs/unreleased/security-bvl-exposure-in-commits-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't expose confidential information in commit message list -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-email-change-notification.yml b/changelogs/unreleased/security-email-change-notification.yml deleted file mode 100644 index 45075ff20bb..00000000000 --- a/changelogs/unreleased/security-email-change-notification.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provide email notification when a user changes their email address -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fix-pat-web-access.yml b/changelogs/unreleased/security-fix-pat-web-access.yml deleted file mode 100644 index 62ffb908fe5..00000000000 --- a/changelogs/unreleased/security-fix-pat-web-access.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Restrict Personal Access Tokens to API scope on web requests -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fix-uri-xss-applications.yml b/changelogs/unreleased/security-fix-uri-xss-applications.yml deleted file mode 100644 index 0eaa1b1c4a3..00000000000 --- a/changelogs/unreleased/security-fix-uri-xss-applications.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve reflected XSS in Ouath authorize window -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fix-webhook-ssrf-ipv6.yml b/changelogs/unreleased/security-fix-webhook-ssrf-ipv6.yml deleted file mode 100644 index 32c85a2a7da..00000000000 --- a/changelogs/unreleased/security-fix-webhook-ssrf-ipv6.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix SSRF in project integrations -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fj-crlf-injection.yml b/changelogs/unreleased/security-fj-crlf-injection.yml deleted file mode 100644 index 861167b8a6e..00000000000 --- a/changelogs/unreleased/security-fj-crlf-injection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix CRLF vulnerability in Project hooks -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-guest-comments.yml b/changelogs/unreleased/security-guest-comments.yml deleted file mode 100644 index 2c99512433b..00000000000 --- a/changelogs/unreleased/security-guest-comments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed ability to comment on locked/confidential issues. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-guest-comments_2.yml b/changelogs/unreleased/security-guest-comments_2.yml deleted file mode 100644 index be6f2d6a490..00000000000 --- a/changelogs/unreleased/security-guest-comments_2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed ability of guest users to edit/delete comments on locked or confidential issues. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-issue_51301.yml b/changelogs/unreleased/security-issue_51301.yml deleted file mode 100644 index cf8ebb54b1c..00000000000 --- a/changelogs/unreleased/security-issue_51301.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix milestone promotion authorization check -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-mermaid-xss.yml b/changelogs/unreleased/security-mermaid-xss.yml deleted file mode 100644 index bcf93ef37ff..00000000000 --- a/changelogs/unreleased/security-mermaid-xss.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Configure mermaid to not render HTML content in diagrams -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-pages-toctou-race.yml b/changelogs/unreleased/security-pages-toctou-race.yml deleted file mode 100644 index 1c055f6087f..00000000000 --- a/changelogs/unreleased/security-pages-toctou-race.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix a possible symlink time of check to time of use race condition in GitLab - Pages -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-private-group.yml b/changelogs/unreleased/security-private-group.yml deleted file mode 100644 index dbb7794dfed..00000000000 --- a/changelogs/unreleased/security-private-group.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Removed ability to see private group names when the group id is entered in - the url. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-stored-xss-for-environments.yml b/changelogs/unreleased/security-stored-xss-for-environments.yml deleted file mode 100644 index 5d78ca00942..00000000000 --- a/changelogs/unreleased/security-stored-xss-for-environments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix stored XSS for Environments -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-xss-in-markdown-following-unrecognized-html-element.yml b/changelogs/unreleased/security-xss-in-markdown-following-unrecognized-html-element.yml deleted file mode 100644 index 3bd8123a346..00000000000 --- a/changelogs/unreleased/security-xss-in-markdown-following-unrecognized-html-element.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix possible XSS attack in Markdown urls with spaces -merge_request: 2599 -author: -type: security diff --git a/changelogs/unreleased/set-kubeconfig-nil-when-token-nil.yml b/changelogs/unreleased/set-kubeconfig-nil-when-token-nil.yml deleted file mode 100644 index 6eac2a0146c..00000000000 --- a/changelogs/unreleased/set-kubeconfig-nil-when-token-nil.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make KUBECONFIG nil if KUBE_TOKEN is nil -merge_request: 23414 -author: -type: fixed diff --git a/changelogs/unreleased/sh-53180-append-path.yml b/changelogs/unreleased/sh-53180-append-path.yml deleted file mode 100644 index 64fae5522d8..00000000000 --- a/changelogs/unreleased/sh-53180-append-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make sure there's only one slash as path separator -merge_request: 22954 -author: -type: other diff --git a/changelogs/unreleased/sh-bump-gems-security.yml b/changelogs/unreleased/sh-bump-gems-security.yml deleted file mode 100644 index 06489f6f979..00000000000 --- a/changelogs/unreleased/sh-bump-gems-security.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump nokogiri, loofah, and rack gems for security updates -merge_request: 23204 -author: -type: security diff --git a/changelogs/unreleased/sh-bump-ruby-2-5-3.yml b/changelogs/unreleased/sh-bump-ruby-2-5-3.yml deleted file mode 100644 index 13cadc73e9c..00000000000 --- a/changelogs/unreleased/sh-bump-ruby-2-5-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Ruby 2.5.3 -merge_request: 2806 -author: -type: performance diff --git a/changelogs/unreleased/sh-disable-autocomplete-mirror-settings.yml b/changelogs/unreleased/sh-disable-autocomplete-mirror-settings.yml deleted file mode 100644 index e42906e88f2..00000000000 --- a/changelogs/unreleased/sh-disable-autocomplete-mirror-settings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable password autocomplete in mirror form fill -merge_request: 23402 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-38317.yml b/changelogs/unreleased/sh-fix-issue-38317.yml deleted file mode 100644 index 13fcb5b8f96..00000000000 --- a/changelogs/unreleased/sh-fix-issue-38317.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove needless auto-capitalization on Wiki page titles -merge_request: 23288 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-51220.yml b/changelogs/unreleased/sh-fix-issue-51220.yml deleted file mode 100644 index 048f58611cb..00000000000 --- a/changelogs/unreleased/sh-fix-issue-51220.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Handle force_remove_source_branch when creating merge request -merge_request: 23281 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-53783-ce.yml b/changelogs/unreleased/sh-fix-issue-53783-ce.yml deleted file mode 100644 index 10be1d81768..00000000000 --- a/changelogs/unreleased/sh-fix-issue-53783-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix enabling project deploy key for admins -merge_request: 23043 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-mirrors-protected-branches.yml b/changelogs/unreleased/sh-fix-mirrors-protected-branches.yml deleted file mode 100644 index 627de25650d..00000000000 --- a/changelogs/unreleased/sh-fix-mirrors-protected-branches.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix "protected branches only" checkbox not set properly at init -merge_request: 23409 -author: -type: fixed diff --git a/changelogs/unreleased/sh-handle-invalid-gpg-sig.yml b/changelogs/unreleased/sh-handle-invalid-gpg-sig.yml deleted file mode 100644 index 185e2547e16..00000000000 --- a/changelogs/unreleased/sh-handle-invalid-gpg-sig.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Gracefully handle unknown/invalid GPG keys -merge_request: 23492 -author: -type: fixed diff --git a/changelogs/unreleased/sh-handle-string-null-bytes.yml b/changelogs/unreleased/sh-handle-string-null-bytes.yml deleted file mode 100644 index edc045274e3..00000000000 --- a/changelogs/unreleased/sh-handle-string-null-bytes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Gracefully handle references with null bytes -merge_request: 23365 -author: -type: fixed diff --git a/changelogs/unreleased/sh-ignore-arrays-url-sanitizer.yml b/changelogs/unreleased/sh-ignore-arrays-url-sanitizer.yml deleted file mode 100644 index c010bd1f540..00000000000 --- a/changelogs/unreleased/sh-ignore-arrays-url-sanitizer.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only allow strings in URL::Sanitizer.valid? -merge_request: 23675 -author: -type: fixed diff --git a/changelogs/unreleased/sh-json-serialize-broadcast-messages.yml b/changelogs/unreleased/sh-json-serialize-broadcast-messages.yml deleted file mode 100644 index e8bee64f780..00000000000 --- a/changelogs/unreleased/sh-json-serialize-broadcast-messages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid caching BroadcastMessage as an ActiveRecord object -merge_request: 23662 -author: -type: fixed diff --git a/changelogs/unreleased/sh-remove-local-sidekiq-admin-check.yml b/changelogs/unreleased/sh-remove-local-sidekiq-admin-check.yml deleted file mode 100644 index 3ec15908fc7..00000000000 --- a/changelogs/unreleased/sh-remove-local-sidekiq-admin-check.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove display of local Sidekiq process in /admin/sidekiq -merge_request: 23118 -author: -type: fixed diff --git a/changelogs/unreleased/sh-truncate-with-periods.yml b/changelogs/unreleased/sh-truncate-with-periods.yml deleted file mode 100644 index b1c6b4f9cbd..00000000000 --- a/changelogs/unreleased/sh-truncate-with-periods.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Truncate merge request titles with periods instead of ellipsis -merge_request: 23558 -author: -type: changed diff --git a/changelogs/unreleased/sh-use-nakayoshi-fork.yml b/changelogs/unreleased/sh-use-nakayoshi-fork.yml deleted file mode 100644 index 5977d9b0974..00000000000 --- a/changelogs/unreleased/sh-use-nakayoshi-fork.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve memory performance by reducing dirty pages after fork() -merge_request: 23169 -author: -type: performance diff --git a/changelogs/unreleased/sh-use-nokogiri-xml-backend.yml b/changelogs/unreleased/sh-use-nokogiri-xml-backend.yml deleted file mode 100644 index 6a82e32c416..00000000000 --- a/changelogs/unreleased/sh-use-nokogiri-xml-backend.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use Nokogiri as the ActiveSupport XML backend -merge_request: 23136 -author: -type: performance diff --git a/changelogs/unreleased/speed-up-relative-positioning.yml b/changelogs/unreleased/speed-up-relative-positioning.yml deleted file mode 100644 index 3bd865fb5de..00000000000 --- a/changelogs/unreleased/speed-up-relative-positioning.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Speed up issue board lists in groups with many projects -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/store-correlation-logs.yml b/changelogs/unreleased/store-correlation-logs.yml deleted file mode 100644 index d5f6c789a17..00000000000 --- a/changelogs/unreleased/store-correlation-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Log and pass correlation-id between Unicorn, Sidekiq and Gitaly -merge_request: -author: -type: added diff --git a/changelogs/unreleased/suggest-change-to-diff-line.yml b/changelogs/unreleased/suggest-change-to-diff-line.yml deleted file mode 100644 index cb949f14e8c..00000000000 --- a/changelogs/unreleased/suggest-change-to-diff-line.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ability to render suggestions -merge_request: 23147 -author: -type: added diff --git a/changelogs/unreleased/switch-rails.yml b/changelogs/unreleased/switch-rails.yml deleted file mode 100644 index 4edf709dbd4..00000000000 --- a/changelogs/unreleased/switch-rails.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Switch to Rails 5 -merge_request: 21492 -author: -type: other diff --git a/changelogs/unreleased/tc-backfill-full-path-config.yml b/changelogs/unreleased/tc-backfill-full-path-config.yml deleted file mode 100644 index 4f06284d0e3..00000000000 --- a/changelogs/unreleased/tc-backfill-full-path-config.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Migration to write fullpath in all repository configs -merge_request: 22322 -author: -type: other diff --git a/changelogs/unreleased/tc-backfill-hashed-project_repositories.yml b/changelogs/unreleased/tc-backfill-hashed-project_repositories.yml deleted file mode 100644 index 90a5c8c4e2c..00000000000 --- a/changelogs/unreleased/tc-backfill-hashed-project_repositories.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fill project_repositories for hashed storage projects -merge_request: 23482 -author: -type: added diff --git a/changelogs/unreleased/tc-repo-full-path-in-db.yml b/changelogs/unreleased/tc-repo-full-path-in-db.yml deleted file mode 100644 index ead8feabeb9..00000000000 --- a/changelogs/unreleased/tc-repo-full-path-in-db.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add model and relation to store repo full path in database -merge_request: 23143 -author: -type: added diff --git a/changelogs/unreleased/triggermesh-phase2-external-ip.yml b/changelogs/unreleased/triggermesh-phase2-external-ip.yml deleted file mode 100644 index 582c8f6df2e..00000000000 --- a/changelogs/unreleased/triggermesh-phase2-external-ip.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add an external IP address to the knative cluster application page -merge_request: -author: Chris Baumbauer -type: fixed diff --git a/changelogs/unreleased/triggermesh-phase2-knative-description.yml b/changelogs/unreleased/triggermesh-phase2-knative-description.yml deleted file mode 100644 index c6cee1984d5..00000000000 --- a/changelogs/unreleased/triggermesh-phase2-knative-description.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Modify the wording for the knative cluster application to match upstream -merge_request: 23289 -author: Chris Baumbauer -type: fixed diff --git a/changelogs/unreleased/triggermesh-phase2-serverless-list.yml b/changelogs/unreleased/triggermesh-phase2-serverless-list.yml deleted file mode 100644 index 22e1a35dd90..00000000000 --- a/changelogs/unreleased/triggermesh-phase2-serverless-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Introduce Knative and Serverless Components -merge_request: 23174 -author: Chris Baumbauer -type: added diff --git a/changelogs/unreleased/triggermesh-phase2-serverless.yml b/changelogs/unreleased/triggermesh-phase2-serverless.yml deleted file mode 100644 index bee2b5e1e2c..00000000000 --- a/changelogs/unreleased/triggermesh-phase2-serverless.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add knative client to kubeclient library -merge_request: 22968 -author: cab105 -type: added diff --git a/changelogs/unreleased/unicorn-monkey-patch.yml b/changelogs/unreleased/unicorn-monkey-patch.yml deleted file mode 100644 index 6b0e00ca291..00000000000 --- a/changelogs/unreleased/unicorn-monkey-patch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add monkey patch to unicorn to fix eof? problem -merge_request: 23385 -author: -type: fixed diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-39.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-39.yml deleted file mode 100644 index dffcdb0bb5a..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-39.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update used version of Runner Helm Chart to 0.1.39 -merge_request: 23633 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-version.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-version.yml deleted file mode 100644 index 9051e4f79c8..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-version.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update used version of Runner Helm Chart to 0.1.38 -merge_request: 23304 -author: -type: other diff --git a/changelogs/unreleased/upgrade-gitaly-to-v1-7-1.yml b/changelogs/unreleased/upgrade-gitaly-to-v1-7-1.yml deleted file mode 100644 index 8a4e9fe2302..00000000000 --- a/changelogs/unreleased/upgrade-gitaly-to-v1-7-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade Gitaly to v1.7.1 for correlation-id logging -merge_request: 23732 -author: -type: other diff --git a/changelogs/unreleased/upgrade-to-workhorse-7-6-0.yml b/changelogs/unreleased/upgrade-to-workhorse-7-6-0.yml deleted file mode 100644 index 1389693b9a9..00000000000 --- a/changelogs/unreleased/upgrade-to-workhorse-7-6-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade workhorse to 7.6.0 -merge_request: 23694 -author: -type: other diff --git a/changelogs/unreleased/upgrade_kubeclient_400.yml b/changelogs/unreleased/upgrade_kubeclient_400.yml deleted file mode 100644 index edb38710e6a..00000000000 --- a/changelogs/unreleased/upgrade_kubeclient_400.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade kubeclient to 4.0.0 -merge_request: 23261 -author: Praveen Arimbrathodiyil @pravi -type: other diff --git a/changelogs/unreleased/usage-count.yml b/changelogs/unreleased/usage-count.yml deleted file mode 100644 index efff2615ce4..00000000000 --- a/changelogs/unreleased/usage-count.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use approximate count for big tables for usage statistics. -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/validate-foreign-keys-being-indexed.yml b/changelogs/unreleased/validate-foreign-keys-being-indexed.yml deleted file mode 100644 index 6608a93c08f..00000000000 --- a/changelogs/unreleased/validate-foreign-keys-being-indexed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate foreign keys being created and indexed for column with _id -merge_request: 22808 -author: -type: performance diff --git a/changelogs/unreleased/winh-collapse-discussions.yml b/changelogs/unreleased/winh-collapse-discussions.yml deleted file mode 100644 index 19d04506318..00000000000 --- a/changelogs/unreleased/winh-collapse-discussions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix collapsing discussion replies -merge_request: 23462 -author: -type: fixed diff --git a/changelogs/unreleased/winh-divider-margin.yml b/changelogs/unreleased/winh-divider-margin.yml deleted file mode 100644 index db84090c15c..00000000000 --- a/changelogs/unreleased/winh-divider-margin.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust divider margin to comply with design specs -merge_request: 23548 -author: -type: changed diff --git a/changelogs/unreleased/winh-dropdown-divider-color.yml b/changelogs/unreleased/winh-dropdown-divider-color.yml deleted file mode 100644 index 6b6ecd831b8..00000000000 --- a/changelogs/unreleased/winh-dropdown-divider-color.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change dropdown divider color to gray-200 (#dfdfdf) -merge_request: 23592 -author: -type: changed diff --git a/changelogs/unreleased/winh-dropdown-item-padding.yml b/changelogs/unreleased/winh-dropdown-item-padding.yml deleted file mode 100644 index 9f18abba9d1..00000000000 --- a/changelogs/unreleased/winh-dropdown-item-padding.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust dropdown item and header padding to comply with design specs -merge_request: 23552 -author: -type: changed diff --git a/changelogs/unreleased/winh-issue-boards-project-dropdown-close.yml b/changelogs/unreleased/winh-issue-boards-project-dropdown-close.yml deleted file mode 100644 index 18f7da56edb..00000000000 --- a/changelogs/unreleased/winh-issue-boards-project-dropdown-close.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove close icon from projects dropdown in issue boards -merge_request: 23567 -author: -type: changed diff --git a/changelogs/unreleased/winh-markdown-preview-lists.yml b/changelogs/unreleased/winh-markdown-preview-lists.yml deleted file mode 100644 index 6e47726283d..00000000000 --- a/changelogs/unreleased/winh-markdown-preview-lists.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unnecessary div from MarkdownField to apply list styles correctly -merge_request: 23733 -author: -type: fixed diff --git a/changelogs/unreleased/winh-merge-request-commit-discussion.yml b/changelogs/unreleased/winh-merge-request-commit-discussion.yml deleted file mode 100644 index b0c6264369b..00000000000 --- a/changelogs/unreleased/winh-merge-request-commit-discussion.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display commit ID for commit diff discussion on merge request -merge_request: 23370 -author: -type: fixed diff --git a/changelogs/unreleased/winh-merge-request-diff-discussion-commit-id.yml b/changelogs/unreleased/winh-merge-request-diff-discussion-commit-id.yml deleted file mode 100644 index 2ce16a2b6b7..00000000000 --- a/changelogs/unreleased/winh-merge-request-diff-discussion-commit-id.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Pass commit when posting diff discussions -merge_request: 23371 -author: -type: fixed diff --git a/changelogs/unreleased/winh-milestone-select.yml b/changelogs/unreleased/winh-milestone-select.yml deleted file mode 100644 index 8464fc6c541..00000000000 --- a/changelogs/unreleased/winh-milestone-select.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix milestone select in issue sidebar of issue boards -merge_request: 23625 -author: -type: fixed diff --git a/changelogs/unreleased/winh-resolved-discussions-reply-field.yml b/changelogs/unreleased/winh-resolved-discussions-reply-field.yml deleted file mode 100644 index 01cf35ae8a7..00000000000 --- a/changelogs/unreleased/winh-resolved-discussions-reply-field.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display reply field if resolved discussion has no replies -merge_request: 23801 -author: -type: fixed diff --git a/changelogs/unreleased/workhorse-7-3-0.yml b/changelogs/unreleased/workhorse-7-3-0.yml deleted file mode 100644 index 6708b8a3cbb..00000000000 --- a/changelogs/unreleased/workhorse-7-3-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade GitLab Workhorse to v7.3.0 -merge_request: 23489 -author: -type: other diff --git a/changelogs/unreleased/zj-improve-gitaly-pb.yml b/changelogs/unreleased/zj-improve-gitaly-pb.yml deleted file mode 100644 index 506a0303d8a..00000000000 --- a/changelogs/unreleased/zj-improve-gitaly-pb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show what RPC is called in the performance bar -merge_request: 23140 -author: -type: other diff --git a/changelogs/unreleased/zj-pool-repository-creation.yml b/changelogs/unreleased/zj-pool-repository-creation.yml deleted file mode 100644 index a24b96e4924..00000000000 --- a/changelogs/unreleased/zj-pool-repository-creation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow public forks to be deduplicated -merge_request: 23508 -author: -type: added diff --git a/changelogs/unreleased/zj-remove-broken-storage.yml b/changelogs/unreleased/zj-remove-broken-storage.yml deleted file mode 100644 index 9df87b40e09..00000000000 --- a/changelogs/unreleased/zj-remove-broken-storage.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove obsolete gitlab_shell rake tasks -merge_request: 22417 -author: -type: removed diff --git a/doc/administration/monitoring/performance/img/request_profiling_token.png b/doc/administration/monitoring/performance/img/request_profiling_token.png Binary files differindex a9160b62acb..9f3dd7f08ca 100644 --- a/doc/administration/monitoring/performance/img/request_profiling_token.png +++ b/doc/administration/monitoring/performance/img/request_profiling_token.png diff --git a/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/img/cloud_foundry_variables.png b/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/img/cloud_foundry_variables.png Binary files differindex 28323e2d8de..e76767741ce 100644 --- a/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/img/cloud_foundry_variables.png +++ b/doc/ci/examples/deploy_spring_boot_to_cloud_foundry/img/cloud_foundry_variables.png diff --git a/doc/ci/examples/laravel_with_gitlab_and_envoy/img/variables_page.png b/doc/ci/examples/laravel_with_gitlab_and_envoy/img/variables_page.png Binary files differindex 80d8eb0f4fc..4675e20ef79 100644 --- a/doc/ci/examples/laravel_with_gitlab_and_envoy/img/variables_page.png +++ b/doc/ci/examples/laravel_with_gitlab_and_envoy/img/variables_page.png diff --git a/doc/ci/img/pipelines-goal.png b/doc/ci/img/pipelines-goal.png Binary files differindex a96368e562b..f15716d0b8f 100644 --- a/doc/ci/img/pipelines-goal.png +++ b/doc/ci/img/pipelines-goal.png diff --git a/doc/ci/img/types-of-pipelines.png b/doc/ci/img/types-of-pipelines.png Binary files differindex bd809de5e68..829a53d5d52 100644 --- a/doc/ci/img/types-of-pipelines.png +++ b/doc/ci/img/types-of-pipelines.png diff --git a/doc/ci/img/view_on_mr_widget.png b/doc/ci/img/view_on_mr_widget.png Binary files differindex 04f4b58df62..efe023b07b5 100644 --- a/doc/ci/img/view_on_mr_widget.png +++ b/doc/ci/img/view_on_mr_widget.png diff --git a/doc/ci/merge_request_pipelines/img/merge_request.png b/doc/ci/merge_request_pipelines/img/merge_request.png Binary files differindex 1fe2eec2008..cf9c628e9a0 100644 --- a/doc/ci/merge_request_pipelines/img/merge_request.png +++ b/doc/ci/merge_request_pipelines/img/merge_request.png diff --git a/doc/ci/merge_request_pipelines/img/pipeline_detail.png b/doc/ci/merge_request_pipelines/img/pipeline_detail.png Binary files differindex def1781dd75..6094a0975fb 100644 --- a/doc/ci/merge_request_pipelines/img/pipeline_detail.png +++ b/doc/ci/merge_request_pipelines/img/pipeline_detail.png diff --git a/doc/ci/triggers/img/trigger_variables.png b/doc/ci/triggers/img/trigger_variables.png Binary files differindex f862155b47f..d273b1fe3a2 100644 --- a/doc/ci/triggers/img/trigger_variables.png +++ b/doc/ci/triggers/img/trigger_variables.png diff --git a/doc/ci/variables/img/variables.png b/doc/ci/variables/img/variables.png Binary files differindex d2dc99bbac0..0795f7c888f 100644 --- a/doc/ci/variables/img/variables.png +++ b/doc/ci/variables/img/variables.png diff --git a/doc/img/devops-stages.png b/doc/img/devops-stages.png Binary files differindex a971e81a419..424bce95607 100644 --- a/doc/img/devops-stages.png +++ b/doc/img/devops-stages.png diff --git a/doc/install/aws/img/associate_subnet_gateway_2.png b/doc/install/aws/img/associate_subnet_gateway_2.png Binary files differindex 76e101d32a3..6e10d9647b1 100644 --- a/doc/install/aws/img/associate_subnet_gateway_2.png +++ b/doc/install/aws/img/associate_subnet_gateway_2.png diff --git a/doc/install/aws/img/choose_ami.png b/doc/install/aws/img/choose_ami.png Binary files differindex 034ac92691d..a07d42dd6fb 100644 --- a/doc/install/aws/img/choose_ami.png +++ b/doc/install/aws/img/choose_ami.png diff --git a/doc/install/aws/img/ec_az.png b/doc/install/aws/img/ec_az.png Binary files differindex 22a8291c593..431dbb0251b 100644 --- a/doc/install/aws/img/ec_az.png +++ b/doc/install/aws/img/ec_az.png diff --git a/doc/install/aws/img/ec_subnet.png b/doc/install/aws/img/ec_subnet.png Binary files differindex c44fb4485e3..08a9b169267 100644 --- a/doc/install/aws/img/ec_subnet.png +++ b/doc/install/aws/img/ec_subnet.png diff --git a/doc/integration/img/github_app.png b/doc/integration/img/github_app.png Binary files differindex 4a1523d41ac..b72cf03dd4d 100644 --- a/doc/integration/img/github_app.png +++ b/doc/integration/img/github_app.png diff --git a/doc/integration/img/github_app_entry.png b/doc/integration/img/github_app_entry.png Binary files differindex 9e151f8cdff..0a1fe0ca65a 100644 --- a/doc/integration/img/github_app_entry.png +++ b/doc/integration/img/github_app_entry.png diff --git a/doc/integration/img/github_register_app.png b/doc/integration/img/github_register_app.png Binary files differindex edd3f660f4e..5786b822f53 100644 --- a/doc/integration/img/github_register_app.png +++ b/doc/integration/img/github_register_app.png diff --git a/doc/university/high-availability/aws/img/reference-arch2.png b/doc/university/high-availability/aws/img/reference-arch2.png Binary files differindex 9f50b2f5171..a9cb6663103 100644 --- a/doc/university/high-availability/aws/img/reference-arch2.png +++ b/doc/university/high-availability/aws/img/reference-arch2.png diff --git a/doc/user/admin_area/img/admin_area_settings_button.png b/doc/user/admin_area/img/admin_area_settings_button.png Binary files differindex 315ef40a375..5b969ecd668 100644 --- a/doc/user/admin_area/img/admin_area_settings_button.png +++ b/doc/user/admin_area/img/admin_area_settings_button.png diff --git a/doc/user/admin_area/settings/img/import_sources.png b/doc/user/admin_area/settings/img/import_sources.png Binary files differindex 4257f02448f..20829a27dd7 100644 --- a/doc/user/admin_area/settings/img/import_sources.png +++ b/doc/user/admin_area/settings/img/import_sources.png diff --git a/doc/user/group/img/add_new_members.png b/doc/user/group/img/add_new_members.png Binary files differindex 4431c9fbe0b..6d43e309e84 100644 --- a/doc/user/group/img/add_new_members.png +++ b/doc/user/group/img/add_new_members.png diff --git a/doc/user/group/img/create_new_project_from_group.png b/doc/user/group/img/create_new_project_from_group.png Binary files differindex b6286ac7800..df98091334c 100644 --- a/doc/user/group/img/create_new_project_from_group.png +++ b/doc/user/group/img/create_new_project_from_group.png diff --git a/doc/user/img/color_inline_colorchip_render_gfm.png b/doc/user/img/color_inline_colorchip_render_gfm.png Binary files differindex 6a8a674d6e0..fed8ca5c34b 100644 --- a/doc/user/img/color_inline_colorchip_render_gfm.png +++ b/doc/user/img/color_inline_colorchip_render_gfm.png diff --git a/doc/user/img/math_inline_sup_render_gfm.png b/doc/user/img/math_inline_sup_render_gfm.png Binary files differindex bf1464457bc..3ee2abb14df 100644 --- a/doc/user/img/math_inline_sup_render_gfm.png +++ b/doc/user/img/math_inline_sup_render_gfm.png diff --git a/doc/user/img/mermaid_diagram_render_gfm.png b/doc/user/img/mermaid_diagram_render_gfm.png Binary files differindex 3b3eb3a738a..9d192a30a85 100644 --- a/doc/user/img/mermaid_diagram_render_gfm.png +++ b/doc/user/img/mermaid_diagram_render_gfm.png diff --git a/doc/user/img/task_list_ordered_render_gfm.png b/doc/user/img/task_list_ordered_render_gfm.png Binary files differindex fdff8a9886c..0905a8378be 100644 --- a/doc/user/img/task_list_ordered_render_gfm.png +++ b/doc/user/img/task_list_ordered_render_gfm.png diff --git a/doc/user/img/unordered_check_list_render_gfm.png b/doc/user/img/unordered_check_list_render_gfm.png Binary files differindex 2e3fb7cbb79..ccdeab6e62c 100644 --- a/doc/user/img/unordered_check_list_render_gfm.png +++ b/doc/user/img/unordered_check_list_render_gfm.png diff --git a/doc/user/project/clusters/runbooks/img/authorize-jupyter.png b/doc/user/project/clusters/runbooks/img/authorize-jupyter.png Binary files differindex 64f95ed45f0..84cce311483 100644 --- a/doc/user/project/clusters/runbooks/img/authorize-jupyter.png +++ b/doc/user/project/clusters/runbooks/img/authorize-jupyter.png diff --git a/doc/user/project/clusters/runbooks/img/demo-runbook.png b/doc/user/project/clusters/runbooks/img/demo-runbook.png Binary files differindex 25c9df4126d..37c110ed0d8 100644 --- a/doc/user/project/clusters/runbooks/img/demo-runbook.png +++ b/doc/user/project/clusters/runbooks/img/demo-runbook.png diff --git a/doc/user/project/clusters/runbooks/img/gitlab-variables.png b/doc/user/project/clusters/runbooks/img/gitlab-variables.png Binary files differindex f76ed21145f..1d338f063a9 100644 --- a/doc/user/project/clusters/runbooks/img/gitlab-variables.png +++ b/doc/user/project/clusters/runbooks/img/gitlab-variables.png diff --git a/doc/user/project/clusters/runbooks/img/helm-install.png b/doc/user/project/clusters/runbooks/img/helm-install.png Binary files differindex e39094bcbf7..003e482e756 100644 --- a/doc/user/project/clusters/runbooks/img/helm-install.png +++ b/doc/user/project/clusters/runbooks/img/helm-install.png diff --git a/doc/user/project/clusters/runbooks/img/ingress-install.png b/doc/user/project/clusters/runbooks/img/ingress-install.png Binary files differindex 093c61f2d0e..7edc11d5b45 100644 --- a/doc/user/project/clusters/runbooks/img/ingress-install.png +++ b/doc/user/project/clusters/runbooks/img/ingress-install.png diff --git a/doc/user/project/clusters/runbooks/img/jupyterhub-install.png b/doc/user/project/clusters/runbooks/img/jupyterhub-install.png Binary files differindex 2115ec9745b..75c6028a763 100644 --- a/doc/user/project/clusters/runbooks/img/jupyterhub-install.png +++ b/doc/user/project/clusters/runbooks/img/jupyterhub-install.png diff --git a/doc/user/project/clusters/runbooks/img/postgres-query.png b/doc/user/project/clusters/runbooks/img/postgres-query.png Binary files differindex 3880438c97a..04315d54d5e 100644 --- a/doc/user/project/clusters/runbooks/img/postgres-query.png +++ b/doc/user/project/clusters/runbooks/img/postgres-query.png diff --git a/doc/user/project/clusters/runbooks/img/sample-runbook.png b/doc/user/project/clusters/runbooks/img/sample-runbook.png Binary files differindex c12ce8990a4..70011202bf0 100644 --- a/doc/user/project/clusters/runbooks/img/sample-runbook.png +++ b/doc/user/project/clusters/runbooks/img/sample-runbook.png diff --git a/doc/user/project/clusters/serverless/img/deploy-stage.png b/doc/user/project/clusters/serverless/img/deploy-stage.png Binary files differindex dc2f8af9c63..a4a6b363b64 100644 --- a/doc/user/project/clusters/serverless/img/deploy-stage.png +++ b/doc/user/project/clusters/serverless/img/deploy-stage.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 a9fcc127240..93b1cbe602f 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/knative-app.png b/doc/user/project/clusters/serverless/img/knative-app.png Binary files differindex 54301e1786f..931830d83ae 100644 --- a/doc/user/project/clusters/serverless/img/knative-app.png +++ b/doc/user/project/clusters/serverless/img/knative-app.png diff --git a/doc/user/project/img/issue_board.png b/doc/user/project/img/issue_board.png Binary files differindex b46b995d8bb..b753593d212 100644 --- a/doc/user/project/img/issue_board.png +++ b/doc/user/project/img/issue_board.png diff --git a/doc/user/project/img/issue_board_summed_weights.png b/doc/user/project/img/issue_board_summed_weights.png Binary files differindex 2288d767d8c..6035d7ca330 100644 --- a/doc/user/project/img/issue_board_summed_weights.png +++ b/doc/user/project/img/issue_board_summed_weights.png diff --git a/doc/user/project/img/issue_boards_core.png b/doc/user/project/img/issue_boards_core.png Binary files differindex 8bc187482ad..41ddbb24b14 100644 --- a/doc/user/project/img/issue_boards_core.png +++ b/doc/user/project/img/issue_boards_core.png diff --git a/doc/user/project/img/issue_boards_premium.png b/doc/user/project/img/issue_boards_premium.png Binary files differindex 4e238ea6983..ef9f5bbea32 100644 --- a/doc/user/project/img/issue_boards_premium.png +++ b/doc/user/project/img/issue_boards_premium.png diff --git a/doc/user/project/integrations/img/jira_api_token.png b/doc/user/project/integrations/img/jira_api_token.png Binary files differindex 2c64f7bc44f..4fa7a46854e 100644 --- a/doc/user/project/integrations/img/jira_api_token.png +++ b/doc/user/project/integrations/img/jira_api_token.png diff --git a/doc/user/project/integrations/img/jira_api_token_menu.png b/doc/user/project/integrations/img/jira_api_token_menu.png Binary files differindex 20655ba3c0e..55c8fb1bdb9 100644 --- a/doc/user/project/integrations/img/jira_api_token_menu.png +++ b/doc/user/project/integrations/img/jira_api_token_menu.png diff --git a/doc/user/project/integrations/img/jira_service_page.png b/doc/user/project/integrations/img/jira_service_page.png Binary files differindex 869d562ed5b..3a27b4df841 100644 --- a/doc/user/project/integrations/img/jira_service_page.png +++ b/doc/user/project/integrations/img/jira_service_page.png diff --git a/doc/user/project/issues/img/issue_board.png b/doc/user/project/issues/img/issue_board.png Binary files differindex c75c35a382e..dd40740aec5 100644 --- a/doc/user/project/issues/img/issue_board.png +++ b/doc/user/project/issues/img/issue_board.png diff --git a/doc/user/project/issues/img/similar_issues.png b/doc/user/project/issues/img/similar_issues.png Binary files differindex 153430d4be7..0dfb5b00e02 100644 --- a/doc/user/project/issues/img/similar_issues.png +++ b/doc/user/project/issues/img/similar_issues.png diff --git a/doc/user/project/merge_requests/img/comment-on-any-diff-line.png b/doc/user/project/merge_requests/img/comment-on-any-diff-line.png Binary files differindex 856ede41527..c2455c2d1e5 100644 --- a/doc/user/project/merge_requests/img/comment-on-any-diff-line.png +++ b/doc/user/project/merge_requests/img/comment-on-any-diff-line.png diff --git a/doc/user/project/merge_requests/img/filter_wip_merge_requests.png b/doc/user/project/merge_requests/img/filter_wip_merge_requests.png Binary files differindex 40913718385..81878709487 100644 --- a/doc/user/project/merge_requests/img/filter_wip_merge_requests.png +++ b/doc/user/project/merge_requests/img/filter_wip_merge_requests.png diff --git a/doc/user/project/merge_requests/img/merge_request_pipeline.png b/doc/user/project/merge_requests/img/merge_request_pipeline.png Binary files differindex 183d9cb910b..ce1d6bab536 100644 --- a/doc/user/project/merge_requests/img/merge_request_pipeline.png +++ b/doc/user/project/merge_requests/img/merge_request_pipeline.png diff --git a/doc/user/project/pages/img/icons/click.png b/doc/user/project/pages/img/icons/click.png Binary files differindex daaf760ec08..a534ae29e0f 100644 --- a/doc/user/project/pages/img/icons/click.png +++ b/doc/user/project/pages/img/icons/click.png diff --git a/doc/user/project/pages/img/icons/cogs.png b/doc/user/project/pages/img/icons/cogs.png Binary files differindex a12da1b5e8c..f37f8f361d1 100644 --- a/doc/user/project/pages/img/icons/cogs.png +++ b/doc/user/project/pages/img/icons/cogs.png diff --git a/doc/user/project/pages/img/icons/fork.png b/doc/user/project/pages/img/icons/fork.png Binary files differindex e2c9577e7ce..8a3aa46eb37 100644 --- a/doc/user/project/pages/img/icons/fork.png +++ b/doc/user/project/pages/img/icons/fork.png diff --git a/doc/user/project/pages/img/icons/free.png b/doc/user/project/pages/img/icons/free.png Binary files differindex 3b8f8f6863e..ae455033e94 100644 --- a/doc/user/project/pages/img/icons/free.png +++ b/doc/user/project/pages/img/icons/free.png diff --git a/doc/user/project/pages/img/icons/lock.png b/doc/user/project/pages/img/icons/lock.png Binary files differindex 1c1f0b4457b..f4c35c84112 100644 --- a/doc/user/project/pages/img/icons/lock.png +++ b/doc/user/project/pages/img/icons/lock.png diff --git a/doc/user/project/pages/img/icons/monitor.png b/doc/user/project/pages/img/icons/monitor.png Binary files differindex 7b99d430eef..8bad059a74c 100644 --- a/doc/user/project/pages/img/icons/monitor.png +++ b/doc/user/project/pages/img/icons/monitor.png diff --git a/doc/user/project/pages/img/icons/terminal.png b/doc/user/project/pages/img/icons/terminal.png Binary files differindex ab5ae11310c..377eeb4edc6 100644 --- a/doc/user/project/pages/img/icons/terminal.png +++ b/doc/user/project/pages/img/icons/terminal.png diff --git a/doc/user/project/repository/branches/img/branch_filter_search_box.png b/doc/user/project/repository/branches/img/branch_filter_search_box.png Binary files differindex c4364ef39f4..5dc7eccf189 100644 --- a/doc/user/project/repository/branches/img/branch_filter_search_box.png +++ b/doc/user/project/repository/branches/img/branch_filter_search_box.png diff --git a/doc/user/project/repository/img/repository_cleanup.png b/doc/user/project/repository/img/repository_cleanup.png Binary files differindex 2749392ffa4..bda40d3e193 100644 --- a/doc/user/project/repository/img/repository_cleanup.png +++ b/doc/user/project/repository/img/repository_cleanup.png diff --git a/doc/user/search/img/dashboard_links.png b/doc/user/search/img/dashboard_links.png Binary files differindex 2c472c7e464..d784ba8018e 100644 --- a/doc/user/search/img/dashboard_links.png +++ b/doc/user/search/img/dashboard_links.png diff --git a/doc/user/search/img/issues_assigned_to_you.png b/doc/user/search/img/issues_assigned_to_you.png Binary files differindex d2fff5e9a67..55986eedcba 100644 --- a/doc/user/search/img/issues_assigned_to_you.png +++ b/doc/user/search/img/issues_assigned_to_you.png diff --git a/doc/workflow/img/repository_mirroring_force_update.png b/doc/workflow/img/repository_mirroring_force_update.png Binary files differindex 8ba715d1ba3..1e6dcb9ea08 100644 --- a/doc/workflow/img/repository_mirroring_force_update.png +++ b/doc/workflow/img/repository_mirroring_force_update.png diff --git a/doc/workflow/todos.md b/doc/workflow/todos.md index f94d592d0db..830f17aa7f2 100644 --- a/doc/workflow/todos.md +++ b/doc/workflow/todos.md @@ -35,6 +35,9 @@ A Todo appears in your Todos dashboard when: - the author, or - have set it to automatically merge once pipeline succeeds. +NOTE: **Note:** +When an user no longer has access to a resource related to a Todo like an issue, merge request, project or group the related Todos, for security reasons, gets deleted within the next hour. The delete is delayed to prevent data loss in case user got their access revoked by mistake. + ### Directly addressed Todos > [Introduced][ce-7926] in GitLab 9.0. diff --git a/lib/api/entities.rb b/lib/api/entities.rb index b83a5c14190..cedbc0a9154 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1356,7 +1356,17 @@ module API end class Dependency < Grape::Entity - expose :id, :name, :token + expose :id, :name + expose :token do |dependency, options| + # overrides the job's dependency authorization token + # with the token of the job that is being run + # this way we use the parent job auth token + # + # ideally we would change the runner implementation to + # use different token, but this would require upgrade of + # all runners which is impossible + options[:auth_token] + end expose :artifacts_file, using: JobArtifactFile, if: ->(job, _) { job.artifacts? } end @@ -1384,7 +1394,10 @@ module API expose :artifacts, using: Artifacts expose :cache, using: Cache expose :credentials, using: Credentials - expose :dependencies, using: Dependency + expose :dependencies do |model| + Dependency.represent(model.dependencies, + options.merge(auth_token: model.token)) + end expose :features end end diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 2cceb2ec798..8187886b6d7 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -494,7 +494,7 @@ module API def send_git_blob(repository, blob) env['api.format'] = :txt content_type 'text/plain' - header['Content-Disposition'] = "attachment; filename=#{blob.name.inspect}" + header['Content-Disposition'] = content_disposition('attachment', blob.name) header(*Gitlab::Workhorse.send_git_blob(repository, blob)) end @@ -527,5 +527,11 @@ module API params[:archived] end + + def content_disposition(disposition, filename) + disposition += %(; filename=#{filename.inspect}) if filename.present? + + disposition + end end end diff --git a/lib/api/helpers/runner.rb b/lib/api/helpers/runner.rb index 45d0343bc89..1a296c8ddb2 100644 --- a/lib/api/helpers/runner.rb +++ b/lib/api/helpers/runner.rb @@ -36,26 +36,32 @@ module API def validate_job!(job) not_found! unless job - yield if block_given? - project = job.project - forbidden!('Project has been deleted!') if project.nil? || project.pending_delete? - forbidden!('Job has been erased!') if job.erased? + job_forbidden!(job, 'Project has been deleted!') if project.nil? || project.pending_delete? + job_forbidden!(job, 'Job has been erased!') if job.erased? + job_forbidden!(job, 'Not running!') unless job.running? end - def authenticate_job! - job = Ci::Build.find_by_id(params[:id]) + def authenticate_job_by_token! + token = (params[JOB_TOKEN_PARAM] || env[JOB_TOKEN_HEADER]).to_s - validate_job!(job) do - forbidden! unless job_token_valid?(job) + Ci::Build.find_by_token(token).tap do |job| + validate_job!(job) end + end - job + # we look for a job that has ID and token matching + def authenticate_job! + authenticate_job_by_token!.tap do |job| + job_forbidden!(job, 'Invalid Job ID!') unless job.id == params[:id] + end end - def job_token_valid?(job) - token = (params[JOB_TOKEN_PARAM] || env[JOB_TOKEN_HEADER]).to_s - token && job.valid_token?(token) + # we look for a job that has been shared via pipeline using the ID + def authenticate_pipeline_job! + job = authenticate_job_by_token! + + job.pipeline.builds.find(params[:id]) end def max_artifacts_size diff --git a/lib/api/jobs.rb b/lib/api/jobs.rb index 80a5cbd6b19..45c694b6448 100644 --- a/lib/api/jobs.rb +++ b/lib/api/jobs.rb @@ -38,6 +38,8 @@ module API end # rubocop: disable CodeReuse/ActiveRecord get ':id/jobs' do + authorize_read_builds! + builds = user_project.builds.order('id DESC') builds = filter_builds(builds, params[:scope]) @@ -56,7 +58,10 @@ module API end # rubocop: disable CodeReuse/ActiveRecord get ':id/pipelines/:pipeline_id/jobs' do + authorize!(:read_pipeline, user_project) pipeline = user_project.ci_pipelines.find(params[:pipeline_id]) + authorize!(:read_build, pipeline) + builds = pipeline.builds builds = filter_builds(builds, params[:scope]) builds = builds.preload(:job_artifacts_archive, :job_artifacts, project: [:namespace]) diff --git a/lib/api/runner.rb b/lib/api/runner.rb index c60d25b88cb..8e842b13f8c 100644 --- a/lib/api/runner.rb +++ b/lib/api/runner.rb @@ -144,7 +144,6 @@ module API end put '/:id' do job = authenticate_job! - job_forbidden!(job, 'Job is not running') unless job.running? job.trace.set(params[:trace]) if params[:trace] @@ -172,7 +171,6 @@ module API end patch '/:id/trace' do job = authenticate_job! - job_forbidden!(job, 'Job is not running') unless job.running? error!('400 Missing header Content-Range', 400) unless request.headers.key?('Content-Range') content_range = request.headers['Content-Range'] @@ -215,8 +213,7 @@ module API require_gitlab_workhorse! Gitlab::Workhorse.verify_api_request!(headers) - job = authenticate_job! - forbidden!('Job is not running') unless job.running? + authenticate_job! if params[:filesize] file_size = params[:filesize].to_i @@ -259,7 +256,6 @@ module API require_gitlab_workhorse! job = authenticate_job! - forbidden!('Job is not running!') unless job.running? artifacts = UploadedFile.from_params(params, :file, JobArtifactUploader.workhorse_local_upload_path) metadata = UploadedFile.from_params(params, :metadata, JobArtifactUploader.workhorse_local_upload_path) @@ -306,7 +302,7 @@ module API optional :direct_download, default: false, type: Boolean, desc: %q(Perform direct download from remote storage instead of proxying artifacts) end get '/:id/artifacts' do - job = authenticate_job! + job = authenticate_pipeline_job! present_carrierwave_file!(job.artifacts_file, supports_direct_download: params[:direct_download]) end diff --git a/lib/banzai/filter/external_link_filter.rb b/lib/banzai/filter/external_link_filter.rb index 2e6d742de27..4f60b6f84c6 100644 --- a/lib/banzai/filter/external_link_filter.rb +++ b/lib/banzai/filter/external_link_filter.rb @@ -9,11 +9,10 @@ module Banzai def call links.each do |node| uri = uri(node['href'].to_s) - next unless uri - node.set_attribute('href', uri.to_s) + node.set_attribute('href', uri.to_s) if uri - if SCHEMES.include?(uri.scheme) && external_url?(uri) + if SCHEMES.include?(uri&.scheme) && !internal_url?(uri) node.set_attribute('rel', 'nofollow noreferrer noopener') node.set_attribute('target', '_blank') end @@ -35,11 +34,12 @@ module Banzai doc.xpath(query) end - def external_url?(uri) + def internal_url?(uri) + return false if uri.nil? # Relative URLs miss a hostname - return false unless uri.hostname + return true unless uri.hostname - uri.hostname != internal_url.hostname + uri.hostname == internal_url.hostname end def internal_url diff --git a/lib/banzai/filter/label_reference_filter.rb b/lib/banzai/filter/label_reference_filter.rb index 04ec38209c7..f90a35952e5 100644 --- a/lib/banzai/filter/label_reference_filter.rb +++ b/lib/banzai/filter/label_reference_filter.rb @@ -29,7 +29,7 @@ module Banzai if label yield match, label.id, project, namespace, $~ else - match + escape_html_entities(match) end end end @@ -102,6 +102,10 @@ module Banzai CGI.unescapeHTML(text.to_s) end + def escape_html_entities(text) + CGI.escapeHTML(text.to_s) + end + def object_link_title(object, matches) # use title of wrapped element instead nil diff --git a/lib/banzai/filter/suggestion_filter.rb b/lib/banzai/filter/suggestion_filter.rb index 822db7cf26e..307ea449140 100644 --- a/lib/banzai/filter/suggestion_filter.rb +++ b/lib/banzai/filter/suggestion_filter.rb @@ -7,7 +7,6 @@ module Banzai TAG_CLASS = 'js-render-suggestion'.freeze def call - return doc unless Suggestion.feature_enabled? return doc unless suggestions_filter_enabled? doc.search('pre.suggestion > code').each do |node| diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb index 7aa02009aa0..11fb3bdf303 100644 --- a/lib/gitlab/auth.rb +++ b/lib/gitlab/auth.rb @@ -296,7 +296,7 @@ module Gitlab private def find_build_by_token(token) - ::Ci::Build.running.find_by_token(token) + ::Ci::Build.find_running_by_token(token) end end end diff --git a/lib/gitlab/ci/pipeline/chain/command.rb b/lib/gitlab/ci/pipeline/chain/command.rb index 100b9521412..90208352c55 100644 --- a/lib/gitlab/ci/pipeline/chain/command.rb +++ b/lib/gitlab/ci/pipeline/chain/command.rb @@ -54,7 +54,13 @@ module Gitlab def protected_ref? strong_memoize(:protected_ref) do - project.protected_for?(ref) + project.protected_for?(origin_ref) + end + end + + def ambiguous_ref? + strong_memoize(:ambiguous_ref) do + project.repository.ambiguous_ref?(origin_ref) end end end diff --git a/lib/gitlab/ci/pipeline/chain/validate/repository.rb b/lib/gitlab/ci/pipeline/chain/validate/repository.rb index d88851d8245..9c6c2bc8e25 100644 --- a/lib/gitlab/ci/pipeline/chain/validate/repository.rb +++ b/lib/gitlab/ci/pipeline/chain/validate/repository.rb @@ -16,6 +16,10 @@ module Gitlab unless @command.sha return error('Commit not found') end + + if @command.ambiguous_ref? + return error('Ref is ambiguous') + end end def break? diff --git a/lib/gitlab/fake_application_settings.rb b/lib/gitlab/fake_application_settings.rb index db1aeeea8d3..bd806269bf0 100644 --- a/lib/gitlab/fake_application_settings.rb +++ b/lib/gitlab/fake_application_settings.rb @@ -37,5 +37,9 @@ module Gitlab def pick_repository_storage repository_storages.sample end + + def commit_email_hostname + super.presence || ApplicationSetting.default_commit_email_hostname + end end end diff --git a/lib/gitlab/git.rb b/lib/gitlab/git.rb index c4aac228b2f..44a62586a23 100644 --- a/lib/gitlab/git.rb +++ b/lib/gitlab/git.rb @@ -54,11 +54,11 @@ module Gitlab end def tag_ref?(ref) - ref.start_with?(TAG_REF_PREFIX) + ref =~ /^#{TAG_REF_PREFIX}.+/ end def branch_ref?(ref) - ref.start_with?(BRANCH_REF_PREFIX) + ref =~ /^#{BRANCH_REF_PREFIX}.+/ end def blank_ref?(ref) diff --git a/lib/gitlab/git/bundle_file.rb b/lib/gitlab/git/bundle_file.rb new file mode 100644 index 00000000000..8384a436fcc --- /dev/null +++ b/lib/gitlab/git/bundle_file.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Gitlab + module Git + class BundleFile + # All git bundle files start with this string + # + # https://github.com/git/git/blob/v2.20.1/bundle.c#L15 + MAGIC = "# v2 git bundle\n" + + InvalidBundleError = Class.new(StandardError) + + attr_reader :filename + + def self.check!(filename) + new(filename).check! + end + + def initialize(filename) + @filename = filename + end + + def check! + data = File.open(filename, 'r') { |f| f.read(MAGIC.size) } + + raise InvalidBundleError, 'Invalid bundle file' unless data == MAGIC + end + end + end +end diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 5bbedc9d5e3..786c90f9272 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -789,6 +789,11 @@ module Gitlab end def create_from_bundle(bundle_path) + # It's important to check that the linked-to file is actually a valid + # .bundle file as it is passed to `git clone`, which may otherwise + # interpret it as a pointer to another repository + ::Gitlab::Git::BundleFile.check!(bundle_path) + gitaly_repository_client.create_from_bundle(bundle_path) end diff --git a/lib/gitlab/import_export/command_line_util.rb b/lib/gitlab/import_export/command_line_util.rb index c9e2a6a78d9..bdecff0931c 100644 --- a/lib/gitlab/import_export/command_line_util.rb +++ b/lib/gitlab/import_export/command_line_util.rb @@ -3,7 +3,8 @@ module Gitlab module ImportExport module CommandLineUtil - DEFAULT_MODE = 0700 + UNTAR_MASK = 'u+rwX,go+rX,go-w' + DEFAULT_DIR_MODE = 0700 def tar_czf(archive:, dir:) tar_with_options(archive: archive, dir: dir, options: 'czf') @@ -14,8 +15,8 @@ module Gitlab end def mkdir_p(path) - FileUtils.mkdir_p(path, mode: DEFAULT_MODE) - FileUtils.chmod(DEFAULT_MODE, path) + FileUtils.mkdir_p(path, mode: DEFAULT_DIR_MODE) + FileUtils.chmod(DEFAULT_DIR_MODE, path) end private @@ -41,6 +42,7 @@ module Gitlab def untar_with_options(archive:, dir:, options:) execute(%W(tar -#{options} #{archive} -C #{dir})) + execute(%W(chmod -R #{UNTAR_MASK} #{dir})) end def execute(cmd) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 48a8bb391f5..54e916e8df6 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -6740,6 +6740,9 @@ msgstr "" msgid "This page will be removed in a future release." msgstr "" +msgid "This pipeline is run in a merge request context" +msgstr "" + msgid "This pipeline makes use of a predefined CI/CD configuration enabled by <b>Auto DevOps.</b>" msgstr "" diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 88ade66f47d..e1c713b4e97 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -80,8 +80,8 @@ module QA page.evaluate_script('xhr.status') == 200 end - def find_element(name, wait: Capybara.default_max_wait_time) - find(element_selector_css(name), wait: wait) + def find_element(name, text_filter = nil, wait: Capybara.default_max_wait_time) + find(element_selector_css(name), wait: wait, text: text_filter) end def all_elements(name) diff --git a/qa/qa/page/project/issue/show.rb b/qa/qa/page/project/issue/show.rb index 23def93c7dd..9ec6d90719e 100644 --- a/qa/qa/page/project/issue/show.rb +++ b/qa/qa/page/project/issue/show.rb @@ -37,17 +37,17 @@ module QA def select_comments_only_filter click_element :discussion_filter - all_elements(:filter_options)[1].click + find_element(:filter_options, "Show comments only").click end def select_history_only_filter click_element :discussion_filter - all_elements(:filter_options).last.click + find_element(:filter_options, "Show history only").click end def select_all_activities_filter click_element :discussion_filter - all_elements(:filter_options).first.click + find_element(:filter_options, "Show all activity").click end end end diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index 75a3cea0448..d2b0b80061a 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -11,7 +11,7 @@ fi # Only install knapsack after bundle install! Otherwise oddly some native # gems could not be found under some circumstance. No idea why, hours wasted. -retry gem install knapsack --no-ri --no-rdoc +retry gem install knapsack --no-document cp config/gitlab.yml.example config/gitlab.yml sed -i 's/bin_path: \/usr\/bin\/git/bin_path: \/usr\/local\/bin\/git/' config/gitlab.yml diff --git a/spec/controllers/groups/group_members_controller_spec.rb b/spec/controllers/groups/group_members_controller_spec.rb index 362d5cc4514..01882383656 100644 --- a/spec/controllers/groups/group_members_controller_spec.rb +++ b/spec/controllers/groups/group_members_controller_spec.rb @@ -118,7 +118,7 @@ describe Groups::GroupMembersController do it '[HTML] removes user from members' do delete :destroy, group_id: group, id: member - expect(response).to set_flash.to 'User was successfully removed from group.' + expect(response).to set_flash.to 'User was successfully removed from group and any subresources.' expect(response).to redirect_to(group_group_members_path(group)) expect(group.members).not_to include member end diff --git a/spec/controllers/groups/settings/ci_cd_controller_spec.rb b/spec/controllers/groups/settings/ci_cd_controller_spec.rb index 06ccace8242..1bcc30915a1 100644 --- a/spec/controllers/groups/settings/ci_cd_controller_spec.rb +++ b/spec/controllers/groups/settings/ci_cd_controller_spec.rb @@ -5,30 +5,65 @@ describe Groups::Settings::CiCdController do let(:user) { create(:user) } before do - group.add_maintainer(user) sign_in(user) end describe 'GET #show' do - it 'renders show with 200 status code' do - get :show, group_id: group + context 'when user is owner' do + before do + group.add_owner(user) + end - expect(response).to have_gitlab_http_status(200) - expect(response).to render_template(:show) + it 'renders show with 200 status code' do + get :show, group_id: group + + expect(response).to have_gitlab_http_status(200) + expect(response).to render_template(:show) + end + end + + context 'when user is not owner' do + before do + group.add_maintainer(user) + end + + it 'renders a 404' do + get :show, group_id: group + + expect(response).to have_gitlab_http_status(404) + end end end describe 'PUT #reset_registration_token' do subject { put :reset_registration_token, group_id: group } - it 'resets runner registration token' do - expect { subject }.to change { group.reload.runners_token } + context 'when user is owner' do + before do + group.add_owner(user) + end + + it 'resets runner registration token' do + expect { subject }.to change { group.reload.runners_token } + end + + it 'redirects the user to admin runners page' do + subject + + expect(response).to redirect_to(group_settings_ci_cd_path) + end end - it 'redirects the user to admin runners page' do - subject + context 'when user is not owner' do + before do + group.add_maintainer(user) + end + + it 'renders a 404' do + subject - expect(response).to redirect_to(group_settings_ci_cd_path) + expect(response).to have_gitlab_http_status(404) + end end end end diff --git a/spec/controllers/projects/snippets_controller_spec.rb b/spec/controllers/projects/snippets_controller_spec.rb index 9c383bd7628..70bf182cdee 100644 --- a/spec/controllers/projects/snippets_controller_spec.rb +++ b/spec/controllers/projects/snippets_controller_spec.rb @@ -371,6 +371,46 @@ describe Projects::SnippetsController do end end + describe "GET #show for embeddable content" do + let(:project_snippet) { create(:project_snippet, snippet_permission, project: project, author: user) } + + before do + sign_in(user) + + get :show, namespace_id: project.namespace, project_id: project, id: project_snippet.to_param, format: :js + end + + context 'when snippet is private' do + let(:snippet_permission) { :private } + + it 'responds with status 404' do + expect(response).to have_gitlab_http_status(404) + end + end + + context 'when snippet is public' do + let(:snippet_permission) { :public } + + it 'responds with status 200' do + expect(assigns(:snippet)).to eq(project_snippet) + expect(response).to have_gitlab_http_status(200) + end + end + + context 'when the project is private' do + let(:project) { create(:project_empty_repo, :private) } + + context 'when snippet is public' do + let(:project_snippet) { create(:project_snippet, :public, project: project, author: user) } + + it 'responds with status 404' do + expect(assigns(:snippet)).to eq(project_snippet) + expect(response).to have_gitlab_http_status(404) + end + end + end + end + describe 'GET #raw' do let(:project_snippet) do create( diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 576191a5788..d31d46a752a 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -590,10 +590,10 @@ describe ProjectsController do end describe "GET refs" do - let(:public_project) { create(:project, :public, :repository) } + let(:project) { create(:project, :public, :repository) } it 'gets a list of branches and tags' do - get :refs, namespace_id: public_project.namespace, id: public_project, sort: 'updated_desc' + get :refs, namespace_id: project.namespace, id: project, sort: 'updated_desc' parsed_body = JSON.parse(response.body) expect(parsed_body['Branches']).to include('master') @@ -603,7 +603,7 @@ describe ProjectsController do end it "gets a list of branches, tags and commits" do - get :refs, namespace_id: public_project.namespace, id: public_project, ref: "123456" + get :refs, namespace_id: project.namespace, id: project, ref: "123456" parsed_body = JSON.parse(response.body) expect(parsed_body["Branches"]).to include("master") @@ -618,7 +618,7 @@ describe ProjectsController do end it "gets a list of branches, tags and commits" do - get :refs, namespace_id: public_project.namespace, id: public_project, ref: "123456" + get :refs, namespace_id: project.namespace, id: project, ref: "123456" parsed_body = JSON.parse(response.body) expect(parsed_body["Branches"]).to include("master") @@ -626,6 +626,22 @@ describe ProjectsController do expect(parsed_body["Commits"]).to include("123456") end end + + context 'when private project' do + let(:project) { create(:project, :repository) } + + context 'as a guest' do + it 'renders forbidden' do + user = create(:user) + project.add_guest(user) + + sign_in(user) + get :refs, namespace_id: project.namespace, id: project + + expect(response).to have_gitlab_http_status(404) + end + end + end end describe 'POST #preview_markdown' do diff --git a/spec/controllers/snippets_controller_spec.rb b/spec/controllers/snippets_controller_spec.rb index 957bab638b1..c1f9509e6cc 100644 --- a/spec/controllers/snippets_controller_spec.rb +++ b/spec/controllers/snippets_controller_spec.rb @@ -80,6 +80,12 @@ describe SnippetsController do expect(assigns(:snippet)).to eq(personal_snippet) expect(response).to have_gitlab_http_status(200) end + + it 'responds with status 404 when embeddable content is requested' do + get :show, id: personal_snippet.to_param, format: :js + + expect(response).to have_gitlab_http_status(404) + end end end @@ -106,6 +112,12 @@ describe SnippetsController do expect(assigns(:snippet)).to eq(personal_snippet) expect(response).to have_gitlab_http_status(200) end + + it 'responds with status 404 when embeddable content is requested' do + get :show, id: personal_snippet.to_param, format: :js + + expect(response).to have_gitlab_http_status(404) + end end context 'when not signed in' do @@ -131,6 +143,13 @@ describe SnippetsController do expect(assigns(:snippet)).to eq(personal_snippet) expect(response).to have_gitlab_http_status(200) end + + it 'responds with status 200 when embeddable content is requested' do + get :show, id: personal_snippet.to_param, format: :js + + expect(assigns(:snippet)).to eq(personal_snippet) + expect(response).to have_gitlab_http_status(200) + end end context 'when not signed in' do diff --git a/spec/features/admin/admin_disables_git_access_protocol_spec.rb b/spec/features/admin/admin_disables_git_access_protocol_spec.rb index 91c22e7ad82..f066b088800 100644 --- a/spec/features/admin/admin_disables_git_access_protocol_spec.rb +++ b/spec/features/admin/admin_disables_git_access_protocol_spec.rb @@ -1,7 +1,8 @@ require 'rails_helper' -describe 'Admin disables Git access protocol' do +describe 'Admin disables Git access protocol', :js do include StubENV + include MobileHelpers let(:project) { create(:project, :empty_repo) } let(:admin) { create(:admin) } @@ -20,7 +21,24 @@ describe 'Admin disables Git access protocol' do visit_project expect(page).to have_content("git clone #{project.ssh_url_to_repo}") - expect(page).not_to have_selector('#clone-dropdown') + + find('.clone-dropdown-btn').click + + within('.git-clone-holder') do + expect(page).to have_content('Clone with SSH') + expect(page).not_to have_content('Clone with HTTP') + end + end + + context 'mobile component' do + it 'shows only the SSH clone information' do + resize_screen_xs + visit_project + find('.dropdown-toggle').click + + expect(page).to have_content('Copy SSH clone URL') + expect(page).not_to have_content('Copy HTTP clone URL') + end end end @@ -31,9 +49,25 @@ describe 'Admin disables Git access protocol' do it 'shows only HTTP url' do visit_project + find('.clone-dropdown-btn').click expect(page).to have_content("git clone #{project.http_url_to_repo}") - expect(page).not_to have_selector('#clone-dropdown') + + within('.git-clone-holder') do + expect(page).to have_content('Clone with HTTP') + expect(page).not_to have_content('Clone with SSH') + end + end + + context 'mobile component' do + it 'shows only the HTTP clone information' do + resize_screen_xs + visit_project + find('.dropdown-toggle').click + + expect(page).to have_content('Copy HTTP clone URL') + expect(page).not_to have_content('Copy SSH clone URL') + end end end @@ -46,7 +80,24 @@ describe 'Admin disables Git access protocol' do visit_project expect(page).to have_content("git clone #{project.ssh_url_to_repo}") - expect(page).to have_selector('#clone-dropdown') + + find('.clone-dropdown-btn').click + + within('.git-clone-holder') do + expect(page).to have_content('Clone with SSH') + expect(page).to have_content('Clone with HTTP') + end + end + + context 'mobile component' do + it 'shows both SSH and HTTP clone information' do + resize_screen_xs + visit_project + find('.dropdown-toggle').click + + expect(page).to have_content('Copy HTTP clone URL') + expect(page).to have_content('Copy SSH clone URL') + end end end diff --git a/spec/features/group_variables_spec.rb b/spec/features/group_variables_spec.rb index 89e0cdd8ed7..57e3ddfb39c 100644 --- a/spec/features/group_variables_spec.rb +++ b/spec/features/group_variables_spec.rb @@ -7,7 +7,7 @@ describe 'Group variables', :js do let(:page_path) { group_settings_ci_cd_path(group) } before do - group.add_maintainer(user) + group.add_owner(user) gitlab_sign_in(user) visit page_path diff --git a/spec/features/issues/gfm_autocomplete_spec.rb b/spec/features/issues/gfm_autocomplete_spec.rb index d7531d5fcd9..3b7a17ef355 100644 --- a/spec/features/issues/gfm_autocomplete_spec.rb +++ b/spec/features/issues/gfm_autocomplete_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' describe 'GFM autocomplete', :js do let(:issue_xss_title) { 'This will execute alert<img src=x onerror=alert(2)<img src=x onerror=alert(1)>' } let(:user_xss_title) { 'eve <img src=x onerror=alert(2)<img src=x onerror=alert(1)>' } + let(:label_xss_title) { 'alert label <img src=x onerror="alert(\'Hello xss\');" a'} + let(:milestone_xss_title) { 'alert milestone <img src=x onerror="alert(\'Hello xss\');" a' } let(:user_xss) { create(:user, name: user_xss_title, username: 'xss.user') } let(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } @@ -25,10 +27,14 @@ describe 'GFM autocomplete', :js do simulate_input('#issue-description', "@#{user.name[0...3]}") + wait_for_requests + find('.atwho-view .cur').click click_button 'Save changes' + wait_for_requests + expect(find('.description')).to have_content(user.to_reference) end @@ -47,6 +53,8 @@ describe 'GFM autocomplete', :js do find('#note-body').native.send_keys('#') end + wait_for_requests + expect(page).to have_selector('.atwho-container') page.within '.atwho-container #at-view-issues' do @@ -59,6 +67,8 @@ describe 'GFM autocomplete', :js do find('#note-body').native.send_keys('@ev') end + wait_for_requests + expect(page).to have_selector('.atwho-container') page.within '.atwho-container #at-view-users' do @@ -66,6 +76,22 @@ describe 'GFM autocomplete', :js do end end + it 'opens autocomplete menu for Milestone when field starts with text with item escaping HTML characters' do + create(:milestone, project: project, title: milestone_xss_title) + + page.within '.timeline-content-form' do + find('#note-body').native.send_keys('%') + end + + wait_for_requests + + expect(page).to have_selector('.atwho-container') + + page.within '.atwho-container #at-view-milestones' do + expect(find('li').text).to have_content('alert milestone') + end + end + it 'doesnt open autocomplete menu character is prefixed with text' do page.within '.timeline-content-form' do find('#note-body').native.send_keys('testing') @@ -258,12 +284,28 @@ describe 'GFM autocomplete', :js do let!(:bug) { create(:label, project: project, title: 'bug') } let!(:feature_proposal) { create(:label, project: project, title: 'feature proposal') } + it 'opens autocomplete menu for Labels when field starts with text with item escaping HTML characters' do + create(:label, project: project, title: label_xss_title) + + note = find('#note-body') + + # It should show all the labels on "~". + type(note, '~') + + wait_for_requests + + page.within '.atwho-container #at-view-labels' do + expect(find('.atwho-view-ul').text).to have_content('alert label') + end + end + context 'when no labels are assigned' do it 'shows labels' do note = find('#note-body') # It should show all the labels on "~". type(note, '~') + wait_for_requests expect_labels(shown: [backend, bug, feature_proposal]) # It should show all the labels on "/label ~". @@ -290,6 +332,7 @@ describe 'GFM autocomplete', :js do # It should show all the labels on "~". type(note, '~') + wait_for_requests expect_labels(shown: [backend, bug, feature_proposal]) # It should show only unset labels on "/label ~". @@ -316,6 +359,7 @@ describe 'GFM autocomplete', :js do # It should show all the labels on "~". type(note, '~') + wait_for_requests expect_labels(shown: [backend, bug, feature_proposal]) # It should show no labels on "/label ~". diff --git a/spec/features/issues/user_creates_issue_spec.rb b/spec/features/issues/user_creates_issue_spec.rb index 687a6f1eafc..a2ab97b4116 100644 --- a/spec/features/issues/user_creates_issue_spec.rb +++ b/spec/features/issues/user_creates_issue_spec.rb @@ -12,7 +12,7 @@ describe "User creates issue" do visit(new_project_issue_path(project)) end - it "creates issue" do + it "creates issue", :js do page.within(".issue-form") do expect(page).to have_no_content("Assign to") .and have_no_content("Labels") @@ -25,11 +25,15 @@ describe "User creates issue" do issue_title = "500 error on profile" fill_in("Title", with: issue_title) + first('.js-md').click + first('.qa-issuable-form-description').native.send_keys('Description') + click_button("Submit issue") expect(page).to have_content(issue_title) .and have_content(user.name) .and have_content(project.name) + expect(page).to have_selector('strong', text: 'Description') end end diff --git a/spec/features/merge_request/user_tries_to_access_private_repository_through_new_mr_spec.rb b/spec/features/merge_request/user_tries_to_access_private_repository_through_new_mr_spec.rb new file mode 100644 index 00000000000..9318b5f1ebb --- /dev/null +++ b/spec/features/merge_request/user_tries_to_access_private_repository_through_new_mr_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +describe 'Merge Request > Tries to access private repo of public project' do + let(:current_user) { create(:user) } + let(:private_project) do + create(:project, :public, :repository, + path: 'nothing-to-see-here', + name: 'nothing to see here', + repository_access_level: ProjectFeature::PRIVATE) + end + let(:owned_project) do + create(:project, :public, :repository, + namespace: current_user.namespace, + creator: current_user) + end + + context 'when the user enters the querystring info for the other project' do + let(:mr_path) do + project_new_merge_request_diffs_path( + owned_project, + merge_request: { + source_project_id: private_project.id, + source_branch: 'feature' + } + ) + end + + before do + sign_in current_user + visit mr_path + end + + it "does not mention the project the user can't see the repo of" do + expect(page).not_to have_content('nothing-to-see-here') + end + end +end diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index cb7a912946c..09de983f669 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -259,8 +259,9 @@ describe 'Runners' do context 'group runners in group settings' do let(:group) { create(:group) } + before do - group.add_maintainer(user) + group.add_owner(user) end context 'group with no runners' do diff --git a/spec/fixtures/malicious.bundle b/spec/fixtures/malicious.bundle new file mode 100644 index 00000000000..7ba47932906 --- /dev/null +++ b/spec/fixtures/malicious.bundle @@ -0,0 +1 @@ +gitdir: foo.git diff --git a/spec/fixtures/symlink_export.tar.gz b/spec/fixtures/symlink_export.tar.gz Binary files differnew file mode 100644 index 00000000000..f295f69c56c --- /dev/null +++ b/spec/fixtures/symlink_export.tar.gz diff --git a/spec/helpers/application_settings_helper_spec.rb b/spec/helpers/application_settings_helper_spec.rb new file mode 100644 index 00000000000..705523f1110 --- /dev/null +++ b/spec/helpers/application_settings_helper_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe ApplicationSettingsHelper do + context 'when all protocols in use' do + before do + stub_application_setting(enabled_git_access_protocol: '') + end + + it { expect(all_protocols_enabled?).to be_truthy } + it { expect(http_enabled?).to be_truthy } + it { expect(ssh_enabled?).to be_truthy } + end + + context 'when SSH is only in use' do + before do + stub_application_setting(enabled_git_access_protocol: 'ssh') + end + + it { expect(all_protocols_enabled?).to be_falsey } + it { expect(http_enabled?).to be_falsey } + it { expect(ssh_enabled?).to be_truthy } + end + + shared_examples 'when HTTP protocol is in use' do |protocol| + before do + allow(Gitlab.config.gitlab).to receive(:protocol).and_return(protocol) + stub_application_setting(enabled_git_access_protocol: 'http') + end + + it { expect(all_protocols_enabled?).to be_falsey } + it { expect(http_enabled?).to be_truthy } + it { expect(ssh_enabled?).to be_falsey } + end + + it_behaves_like 'when HTTP protocol is in use', 'https' + it_behaves_like 'when HTTP protocol is in use', 'http' +end diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb index 4590904c93d..908e8960f37 100644 --- a/spec/helpers/members_helper_spec.rb +++ b/spec/helpers/members_helper_spec.rb @@ -16,7 +16,7 @@ describe MembersHelper do it { expect(remove_member_message(project_member_invite)).to eq "Are you sure you want to revoke the invitation for #{project_member_invite.invite_email} to join the #{project.full_name} project?" } it { expect(remove_member_message(project_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{project.full_name} project?" } it { expect(remove_member_message(project_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{project.full_name} project?" } - it { expect(remove_member_message(group_member)).to eq "Are you sure you want to remove #{group_member.user.name} from the #{group.name} group?" } + it { expect(remove_member_message(group_member)).to eq "Are you sure you want to remove #{group_member.user.name} from the #{group.name} group and any subresources?" } it { expect(remove_member_message(group_member_invite)).to eq "Are you sure you want to revoke the invitation for #{group_member_invite.invite_email} to join the #{group.name} group?" } it { expect(remove_member_message(group_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{group.name} group?" } it { expect(remove_member_message(group_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{group.name} group?" } @@ -33,7 +33,7 @@ describe MembersHelper do it { expect(remove_member_title(project_member)).to eq 'Remove user from project' } it { expect(remove_member_title(project_member_request)).to eq 'Deny access request from project' } - it { expect(remove_member_title(group_member)).to eq 'Remove user from group' } + it { expect(remove_member_title(group_member)).to eq 'Remove user from group and any subresources' } it { expect(remove_member_title(group_member_request)).to eq 'Deny access request from group' } end diff --git a/spec/javascripts/environments/environment_terminal_button_spec.js b/spec/javascripts/environments/environment_terminal_button_spec.js index f1576b19d1b..56e18db59c5 100644 --- a/spec/javascripts/environments/environment_terminal_button_spec.js +++ b/spec/javascripts/environments/environment_terminal_button_spec.js @@ -2,30 +2,46 @@ import Vue from 'vue'; import terminalComp from '~/environments/components/environment_terminal_button.vue'; describe('Stop Component', () => { - let TerminalComponent; let component; const terminalPath = '/path'; - beforeEach(() => { - TerminalComponent = Vue.extend(terminalComp); - + const mountWithProps = props => { + const TerminalComponent = Vue.extend(terminalComp); component = new TerminalComponent({ - propsData: { - terminalPath, - }, + propsData: props, }).$mount(); - }); + }; + + describe('enabled', () => { + beforeEach(() => { + mountWithProps({ terminalPath }); + }); + + describe('computed', () => { + it('title', () => { + expect(component.title).toEqual('Terminal'); + }); + }); - describe('computed', () => { - it('title', () => { - expect(component.title).toEqual('Terminal'); + it('should render a link to open a web terminal with the provided path', () => { + expect(component.$el.tagName).toEqual('A'); + expect(component.$el.getAttribute('data-original-title')).toEqual('Terminal'); + expect(component.$el.getAttribute('aria-label')).toEqual('Terminal'); + expect(component.$el.getAttribute('href')).toEqual(terminalPath); + }); + + it('should render a non-disabled button', () => { + expect(component.$el.classList).not.toContain('disabled'); }); }); - it('should render a link to open a web terminal with the provided path', () => { - expect(component.$el.tagName).toEqual('A'); - expect(component.$el.getAttribute('data-original-title')).toEqual('Terminal'); - expect(component.$el.getAttribute('aria-label')).toEqual('Terminal'); - expect(component.$el.getAttribute('href')).toEqual(terminalPath); + describe('disabled', () => { + beforeEach(() => { + mountWithProps({ terminalPath, disabled: true }); + }); + + it('should render a disabled button', () => { + expect(component.$el.classList).toContain('disabled'); + }); }); }); diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb index 58a49124ce6..1c73a936e17 100644 --- a/spec/lib/api/helpers_spec.rb +++ b/spec/lib/api/helpers_spec.rb @@ -148,4 +148,36 @@ describe API::Helpers do it_behaves_like 'user namespace finder' end + + describe '#send_git_blob' do + context 'content disposition' do + let(:repository) { double } + let(:blob) { double(name: 'foobar') } + + let(:send_git_blob) do + subject.send(:send_git_blob, repository, blob) + end + + before do + allow(subject).to receive(:env).and_return({}) + allow(subject).to receive(:content_type) + allow(subject).to receive(:header).and_return({}) + allow(Gitlab::Workhorse).to receive(:send_git_blob) + end + + context 'when blob name is null' do + let(:blob) { double(name: nil) } + + it 'returns only the disposition' do + expect(send_git_blob['Content-Disposition']).to eq 'attachment' + end + end + + context 'when blob name is not null' do + it 'returns disposition with the blob name' do + expect(send_git_blob['Content-Disposition']).to eq 'attachment; filename="foobar"' + end + end + end + end end diff --git a/spec/lib/banzai/filter/external_link_filter_spec.rb b/spec/lib/banzai/filter/external_link_filter_spec.rb index 2a3c0cd78b8..e6dae8d5382 100644 --- a/spec/lib/banzai/filter/external_link_filter_spec.rb +++ b/spec/lib/banzai/filter/external_link_filter_spec.rb @@ -49,16 +49,16 @@ describe Banzai::Filter::ExternalLinkFilter do end context 'for invalid urls' do - it 'skips broken hrefs' do + it 'adds rel and target attributes to broken hrefs' do doc = filter %q(<p><a href="don't crash on broken urls">Google</a></p>) - expected = %q(<p><a href="don't%20crash%20on%20broken%20urls">Google</a></p>) + expected = %q(<p><a href="don't%20crash%20on%20broken%20urls" rel="nofollow noreferrer noopener" target="_blank">Google</a></p>) expect(doc.to_html).to eq(expected) end - it 'skips improperly formatted mailtos' do + it 'adds rel and target to improperly formatted mailtos' do doc = filter %q(<p><a href="mailto://jblogs@example.com">Email</a></p>) - expected = %q(<p><a href="mailto://jblogs@example.com">Email</a></p>) + expected = %q(<p><a href="mailto://jblogs@example.com" rel="nofollow noreferrer noopener" target="_blank">Email</a></p>) expect(doc.to_html).to eq(expected) end diff --git a/spec/lib/banzai/filter/label_reference_filter_spec.rb b/spec/lib/banzai/filter/label_reference_filter_spec.rb index 00257ed7904..9cfdb9e53a2 100644 --- a/spec/lib/banzai/filter/label_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/label_reference_filter_spec.rb @@ -236,6 +236,24 @@ describe Banzai::Filter::LabelReferenceFilter do end end + context 'References with html entities' do + let!(:label) { create(:label, name: '<html>', project: project) } + + it 'links to a valid reference' do + doc = reference_filter('See ~"<html>"') + + expect(doc.css('a').first.attr('href')).to eq urls + .project_issues_url(project, label_name: label.name) + expect(doc.text).to eq 'See <html>' + end + + it 'ignores invalid label names and escapes entities' do + act = %(Label #{Label.reference_prefix}"<non valid>") + + expect(reference_filter(act).to_html).to eq act + end + end + describe 'consecutive references' do let(:bug) { create(:label, name: 'bug', project: project) } let(:feature_proposal) { create(:label, name: 'feature proposal', project: project) } diff --git a/spec/lib/banzai/filter/suggestion_filter_spec.rb b/spec/lib/banzai/filter/suggestion_filter_spec.rb index 55a141bf315..b13c90b54bd 100644 --- a/spec/lib/banzai/filter/suggestion_filter_spec.rb +++ b/spec/lib/banzai/filter/suggestion_filter_spec.rb @@ -17,15 +17,6 @@ describe Banzai::Filter::SuggestionFilter do expect(result[:class]).to include('js-render-suggestion') end - it 'includes no `js-render-suggestion` when feature disabled' do - stub_feature_flags(diff_suggestions: false) - - doc = filter(input, default_context) - result = doc.css('code').first - - expect(result[:class]).to be_nil - end - it 'includes no `js-render-suggestion` when filter is disabled' do doc = filter(input) result = doc.css('code').first diff --git a/spec/lib/gitlab/ci/pipeline/chain/command_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/command_spec.rb index 75a177d2d1f..6aa802ce6fd 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/command_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/command_spec.rb @@ -182,4 +182,24 @@ describe Gitlab::Ci::Pipeline::Chain::Command do it { is_expected.to eq(false) } end end + + describe '#ambiguous_ref' do + let(:project) { create(:project, :repository) } + let(:command) { described_class.new(project: project, origin_ref: 'ref') } + + subject { command.ambiguous_ref? } + + context 'when ref is not ambiguous' do + it { is_expected. to eq(false) } + end + + context 'when ref is ambiguous' do + before do + project.repository.add_tag(project.creator, 'ref', 'master') + project.repository.add_branch(project.creator, 'ref', 'master') + end + + it { is_expected. to eq(true) } + end + end end diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb index 284aed91e29..1b014ecfaa4 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb @@ -14,6 +14,7 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do Gitlab::Ci::Pipeline::Chain::Command.new( project: project, current_user: user, + origin_ref: 'master', seeds_block: nil) end @@ -106,6 +107,7 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do Gitlab::Ci::Pipeline::Chain::Command.new( project: project, current_user: user, + origin_ref: 'master', seeds_block: seeds_block) end diff --git a/spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb index fb1b53fc55c..a7cad423d09 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb @@ -42,6 +42,27 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Repository do end end + context 'when ref is ambiguous' do + let(:project) do + create(:project, :repository).tap do |proj| + proj.repository.add_tag(user, 'master', 'master') + end + end + let(:command) do + Gitlab::Ci::Pipeline::Chain::Command.new( + project: project, current_user: user, origin_ref: 'master') + end + + it 'breaks the chain' do + expect(step.break?).to be true + end + + it 'adds an error about missing ref' do + expect(pipeline.errors.to_a) + .to include 'Ref is ambiguous' + end + end + context 'when does not have existing SHA set' do let(:command) do Gitlab::Ci::Pipeline::Chain::Command.new( diff --git a/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb index fffa727c2ed..2cf812b26dc 100644 --- a/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/seed/build_spec.rb @@ -1,7 +1,8 @@ require 'spec_helper' describe Gitlab::Ci::Pipeline::Seed::Build do - let(:pipeline) { create(:ci_empty_pipeline) } + let(:project) { create(:project, :repository) } + let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:attributes) do { name: 'rspec', diff --git a/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb index 05ce3412fd8..82f741845db 100644 --- a/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb @@ -1,7 +1,8 @@ require 'spec_helper' describe Gitlab::Ci::Pipeline::Seed::Stage do - let(:pipeline) { create(:ci_empty_pipeline) } + let(:project) { create(:project, :repository) } + let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:attributes) do { name: 'test', diff --git a/spec/lib/gitlab/git/bundle_file_spec.rb b/spec/lib/gitlab/git/bundle_file_spec.rb new file mode 100644 index 00000000000..ff7c981dadd --- /dev/null +++ b/spec/lib/gitlab/git/bundle_file_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe Gitlab::Git::BundleFile do + describe '.check!' do + let(:valid_bundle) { Tempfile.new } + let(:valid_bundle_path) { valid_bundle.path } + let(:invalid_bundle_path) { Rails.root.join('spec/fixtures/malicious.bundle') } + + after do + valid_bundle.close! + end + + it 'returns nil for a valid bundle' do + valid_bundle.write("# v2 git bundle\nfoo bar baz\n") + valid_bundle.close + + expect(described_class.check!(valid_bundle_path)).to be_nil + end + + it 'raises an exception for an invalid bundle' do + expect do + described_class.check!(invalid_bundle_path) + end.to raise_error(described_class::InvalidBundleError) + end + end +end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 852ee9c96af..a19e3e84f83 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -1753,22 +1753,23 @@ describe Gitlab::Git::Repository, :seed_helper do end describe '#create_from_bundle' do - let(:bundle_path) { File.join(Dir.tmpdir, "repo-#{SecureRandom.hex}.bundle") } + let(:valid_bundle_path) { File.join(Dir.tmpdir, "repo-#{SecureRandom.hex}.bundle") } + let(:malicious_bundle_path) { Rails.root.join('spec/fixtures/malicious.bundle') } let(:project) { create(:project) } let(:imported_repo) { project.repository.raw } before do - expect(repository.bundle_to_disk(bundle_path)).to be_truthy + expect(repository.bundle_to_disk(valid_bundle_path)).to be_truthy end after do - FileUtils.rm_rf(bundle_path) + FileUtils.rm_rf(valid_bundle_path) end it 'creates a repo from a bundle file' do expect(imported_repo).not_to exist - result = imported_repo.create_from_bundle(bundle_path) + result = imported_repo.create_from_bundle(valid_bundle_path) expect(result).to be_truthy expect(imported_repo).to exist @@ -1776,11 +1777,17 @@ describe Gitlab::Git::Repository, :seed_helper do end it 'creates a symlink to the global hooks dir' do - imported_repo.create_from_bundle(bundle_path) + imported_repo.create_from_bundle(valid_bundle_path) hooks_path = Gitlab::GitalyClient::StorageSettings.allow_disk_access { File.join(imported_repo.path, 'hooks') } expect(File.readlink(hooks_path)).to eq(Gitlab.config.gitlab_shell.hooks_path) end + + it 'raises an error if the bundle is an attempted malicious payload' do + expect do + imported_repo.create_from_bundle(malicious_bundle_path) + end.to raise_error(::Gitlab::Git::BundleFile::InvalidBundleError) + end end describe '#checksum' do diff --git a/spec/lib/gitlab/import_export/command_line_util_spec.rb b/spec/lib/gitlab/import_export/command_line_util_spec.rb new file mode 100644 index 00000000000..8e5e0aefac0 --- /dev/null +++ b/spec/lib/gitlab/import_export/command_line_util_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::ImportExport::CommandLineUtil do + include ExportFileHelper + + let(:path) { "#{Dir.tmpdir}/symlink_test" } + let(:archive) { 'spec/fixtures/symlink_export.tar.gz' } + let(:shared) { Gitlab::ImportExport::Shared.new(nil) } + + subject do + Class.new do + include Gitlab::ImportExport::CommandLineUtil + + def initialize + @shared = Gitlab::ImportExport::Shared.new(nil) + end + end.new + end + + before do + FileUtils.mkdir_p(path) + subject.untar_zxf(archive: archive, dir: path) + end + + after do + FileUtils.rm_rf(path) + end + + it 'has the right mask for project.json' do + expect(file_permissions("#{path}/project.json")).to eq(0755) # originally 777 + end + + it 'has the right mask for uploads' do + expect(file_permissions("#{path}/uploads")).to eq(0755) # originally 555 + end +end diff --git a/spec/lib/gitlab/import_export/file_importer_spec.rb b/spec/lib/gitlab/import_export/file_importer_spec.rb index bf34cefe18f..fbc9bcd2df5 100644 --- a/spec/lib/gitlab/import_export/file_importer_spec.rb +++ b/spec/lib/gitlab/import_export/file_importer_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Gitlab::ImportExport::FileImporter do + include ExportFileHelper + let(:shared) { Gitlab::ImportExport::Shared.new(nil) } let(:storage_path) { "#{Dir.tmpdir}/file_importer_spec" } let(:valid_file) { "#{shared.export_path}/valid.json" } @@ -8,6 +10,7 @@ describe Gitlab::ImportExport::FileImporter do let(:hidden_symlink_file) { "#{shared.export_path}/.hidden" } let(:subfolder_symlink_file) { "#{shared.export_path}/subfolder/invalid.json" } let(:evil_symlink_file) { "#{shared.export_path}/.\nevil" } + let(:custom_mode_symlink_file) { "#{shared.export_path}/symlink.mode" } before do stub_const('Gitlab::ImportExport::FileImporter::MAX_RETRIES', 0) @@ -45,10 +48,18 @@ describe Gitlab::ImportExport::FileImporter do expect(File.exist?(subfolder_symlink_file)).to be false end + it 'removes symlinks without any file permissions' do + expect(File.exist?(custom_mode_symlink_file)).to be false + end + it 'does not remove a valid file' do expect(File.exist?(valid_file)).to be true end + it 'does not change a valid file permissions' do + expect(file_permissions(valid_file)).not_to eq(0000) + end + it 'creates the file in the right subfolder' do expect(shared.export_path).to include('test/abcd') end @@ -84,5 +95,7 @@ describe Gitlab::ImportExport::FileImporter do FileUtils.ln_s(valid_file, subfolder_symlink_file) FileUtils.ln_s(valid_file, hidden_symlink_file) FileUtils.ln_s(valid_file, evil_symlink_file) + FileUtils.ln_s(valid_file, custom_mode_symlink_file) + FileUtils.chmod_R(0000, custom_mode_symlink_file) end end diff --git a/spec/lib/gitlab/prometheus/query_variables_spec.rb b/spec/lib/gitlab/prometheus/query_variables_spec.rb index 78974cadb69..78c74266c61 100644 --- a/spec/lib/gitlab/prometheus/query_variables_spec.rb +++ b/spec/lib/gitlab/prometheus/query_variables_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' describe Gitlab::Prometheus::QueryVariables do describe '.call' do - set(:environment) { create(:environment) } + let(:environment) { create(:environment) } let(:slug) { environment.slug } subject { described_class.call(environment) } @@ -20,7 +20,7 @@ describe Gitlab::Prometheus::QueryVariables do it { is_expected.to include(kube_namespace: '') } end - context 'with deplyoment platform' do + context 'with deployment platform' do let(:kube_namespace) { environment.deployment_platform.actual_namespace } before do diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 89f78f629d4..d4056b4f7f1 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -2385,6 +2385,8 @@ describe Ci::Build do end context 'when protected variable is defined' do + let(:ref) { Gitlab::Git::BRANCH_REF_PREFIX + build.ref } + let(:protected_variable) do { key: 'PROTECTED_KEY', value: 'protected_value', public: false } end @@ -2397,7 +2399,7 @@ describe Ci::Build do context 'when the branch is protected' do before do - allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) + allow(build.project).to receive(:protected_for?).with(ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -2405,7 +2407,7 @@ describe Ci::Build do context 'when the tag is protected' do before do - allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) + allow(build.project).to receive(:protected_for?).with(ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -2430,6 +2432,8 @@ describe Ci::Build do end context 'when group protected variable is defined' do + let(:ref) { Gitlab::Git::BRANCH_REF_PREFIX + build.ref } + let(:protected_variable) do { key: 'PROTECTED_KEY', value: 'protected_value', public: false } end @@ -2442,7 +2446,7 @@ describe Ci::Build do context 'when the branch is protected' do before do - allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) + allow(build.project).to receive(:protected_for?).with(ref).and_return(true) end it { is_expected.to include(protected_variable) } @@ -2450,7 +2454,7 @@ describe Ci::Build do context 'when the tag is protected' do before do - allow(build.project).to receive(:protected_for?).with(build.ref).and_return(true) + allow(build.project).to receive(:protected_for?).with(ref).and_return(true) end it { is_expected.to include(protected_variable) } diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index b67c6a4cffa..17f33785fda 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -397,6 +397,10 @@ describe Ci::Pipeline, :mailer do end describe '#protected_ref?' do + before do + pipeline.project = create(:project, :repository) + end + it 'delegates method to project' do expect(pipeline).not_to be_protected_ref end diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb index 062d2fd0768..b30f80a4b3e 100644 --- a/spec/models/clusters/platforms/kubernetes_spec.rb +++ b/spec/models/clusters/platforms/kubernetes_spec.rb @@ -325,12 +325,13 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching context 'with valid pods' do let(:pod) { kube_pod(app: environment.slug) } + let(:pod_with_no_terminal) { kube_pod(app: environment.slug, status: "Pending") } let(:terminals) { kube_terminals(service, pod) } before do stub_reactive_cache( service, - pods: [pod, pod, kube_pod(app: "should-be-filtered-out")] + pods: [pod, pod, pod_with_no_terminal, kube_pod(app: "should-be-filtered-out")] ) end diff --git a/spec/models/concerns/has_ref_spec.rb b/spec/models/concerns/has_ref_spec.rb new file mode 100644 index 00000000000..8aed72d77a4 --- /dev/null +++ b/spec/models/concerns/has_ref_spec.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe HasRef do + describe '#branch?' do + let(:build) { create(:ci_build) } + + subject { build.branch? } + + context 'is not a tag' do + before do + build.tag = false + end + + it 'return true when tag is set to false' do + is_expected.to be_truthy + end + end + + context 'is not a tag' do + before do + build.tag = true + end + + it 'return false when tag is set to true' do + is_expected.to be_falsey + end + end + end + + describe '#git_ref' do + subject { build.git_ref } + + context 'when tag is true' do + let(:build) { create(:ci_build, tag: true) } + + it 'returns a tag ref' do + is_expected.to start_with(Gitlab::Git::TAG_REF_PREFIX) + end + end + + context 'when tag is false' do + let(:build) { create(:ci_build, tag: false) } + + it 'returns a branch ref' do + is_expected.to start_with(Gitlab::Git::BRANCH_REF_PREFIX) + end + end + + context 'when tag is nil' do + let(:build) { create(:ci_build, tag: nil) } + + it 'returns a branch ref' do + is_expected.to start_with(Gitlab::Git::BRANCH_REF_PREFIX) + end + end + end +end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 81748681528..a64720f1876 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -243,6 +243,20 @@ describe Event do expect(event.visible_to_user?(admin)).to eq true end end + + context 'private project' do + let(:project) { create(:project, :private) } + let(:target) { note_on_issue } + + it do + expect(event.visible_to_user?(non_member)).to eq false + expect(event.visible_to_user?(author)).to eq false + expect(event.visible_to_user?(assignee)).to eq false + expect(event.visible_to_user?(member)).to eq true + expect(event.visible_to_user?(guest)).to eq true + expect(event.visible_to_user?(admin)).to eq true + end + end end context 'merge request diff note event' do @@ -265,8 +279,8 @@ describe Event do it do expect(event.visible_to_user?(non_member)).to eq false - expect(event.visible_to_user?(author)).to eq true - expect(event.visible_to_user?(assignee)).to eq true + expect(event.visible_to_user?(author)).to eq false + expect(event.visible_to_user?(assignee)).to eq false expect(event.visible_to_user?(member)).to eq true expect(event.visible_to_user?(guest)).to eq false expect(event.visible_to_user?(admin)).to eq true diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 5e63f14b720..8dd42539422 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -314,6 +314,13 @@ describe Project do expect(project.errors[:import_url].first).to include('Requests to localhost are not allowed') end + it 'does not allow import_url pointing to the local network' do + project = build(:project, import_url: 'https://192.168.1.1') + + expect(project).to be_invalid + expect(project.errors[:import_url].first).to include('Requests to the local network are not allowed') + end + it "does not allow import_url with invalid ports for new projects" do project = build(:project, import_url: 'http://github.com:25/t.git') @@ -2530,6 +2537,10 @@ describe Project do end context 'when the ref is not protected' do + before do + allow(project).to receive(:protected_for?).with('ref').and_return(false) + end + it 'contains only the CI variables' do is_expected.to contain_exactly(ci_variable) end @@ -2569,42 +2580,139 @@ describe Project do end describe '#protected_for?' do - let(:project) { create(:project) } + let(:project) { create(:project, :repository) } - subject { project.protected_for?('ref') } + subject { project.protected_for?(ref) } - context 'when the ref is not protected' do + shared_examples 'ref is not protected' do before do stub_application_setting( default_branch_protection: Gitlab::Access::PROTECTION_NONE) end it 'returns false' do - is_expected.to be_falsey + is_expected.to be false end end - context 'when the ref is a protected branch' do + shared_examples 'ref is protected branch' do before do - allow(project).to receive(:repository).and_call_original - allow(project).to receive_message_chain(:repository, :branch_exists?).and_return(true) - create(:protected_branch, name: 'ref', project: project) + create(:protected_branch, name: 'master', project: project) end it 'returns true' do - is_expected.to be_truthy + is_expected.to be true end end - context 'when the ref is a protected tag' do + shared_examples 'ref is protected tag' do before do - allow(project).to receive_message_chain(:repository, :branch_exists?).and_return(false) - allow(project).to receive_message_chain(:repository, :tag_exists?).and_return(true) - create(:protected_tag, name: 'ref', project: project) + create(:protected_tag, name: 'v1.0.0', project: project) end it 'returns true' do - is_expected.to be_truthy + is_expected.to be true + end + end + + context 'when ref is nil' do + let(:ref) { nil } + + it 'returns false' do + is_expected.to be false + end + end + + context 'when ref is ref name' do + context 'when ref is ambiguous' do + let(:ref) { 'ref' } + + before do + project.repository.add_branch(project.creator, 'ref', 'master') + project.repository.add_tag(project.creator, 'ref', 'master') + end + + it 'raises an error' do + expect { subject }.to raise_error(Repository::AmbiguousRefError) + end + end + + context 'when the ref is not protected' do + let(:ref) { 'master' } + + it_behaves_like 'ref is not protected' + end + + context 'when the ref is a protected branch' do + let(:ref) { 'master' } + + it_behaves_like 'ref is protected branch' + end + + context 'when the ref is a protected tag' do + let(:ref) { 'v1.0.0' } + + it_behaves_like 'ref is protected tag' + end + + context 'when ref does not exist' do + let(:ref) { 'something' } + + it 'returns false' do + is_expected.to be false + end + end + end + + context 'when ref is full ref' do + context 'when the ref is not protected' do + let(:ref) { 'refs/heads/master' } + + it_behaves_like 'ref is not protected' + end + + context 'when the ref is a protected branch' do + let(:ref) { 'refs/heads/master' } + + it_behaves_like 'ref is protected branch' + end + + context 'when the ref is a protected tag' do + let(:ref) { 'refs/tags/v1.0.0' } + + it_behaves_like 'ref is protected tag' + end + + context 'when branch ref name is a full tag ref' do + let(:ref) { 'refs/tags/something' } + + before do + project.repository.add_branch(project.creator, ref, 'master') + end + + context 'when ref is not protected' do + it 'returns false' do + is_expected.to be false + end + end + + context 'when ref is a protected branch' do + before do + create(:protected_branch, name: 'refs/tags/something', project: project) + end + + it 'returns true' do + is_expected.to be true + end + end + end + + context 'when ref does not exist' do + let(:ref) { 'refs/heads/something' } + + it 'returns false' do + is_expected.to be false + end end end end @@ -2824,7 +2932,7 @@ describe Project do it 'shows full error updating an invalid MR' do error_message = 'Failed to replace merge_requests because one or more of the new records could not be saved.'\ - ' Validate fork Source project is not a fork of the target project' + ' Validate fork Source project is not a fork of the target project' expect { project.append_or_update_attribute(:merge_requests, [create(:merge_request)]) } .to raise_error(ActiveRecord::RecordNotSaved, error_message) diff --git a/spec/models/remote_mirror_spec.rb b/spec/models/remote_mirror_spec.rb index b12ca79847c..66a25ccb410 100644 --- a/spec/models/remote_mirror_spec.rb +++ b/spec/models/remote_mirror_spec.rb @@ -24,6 +24,20 @@ describe RemoteMirror do expect(remote_mirror).to be_invalid expect(remote_mirror.errors[:url].first).to include('Username needs to start with an alphanumeric character') end + + it 'does not allow url pointing to localhost' do + remote_mirror = build(:remote_mirror, url: 'http://127.0.0.2/t.git') + + expect(remote_mirror).to be_invalid + expect(remote_mirror.errors[:url].first).to include('Requests to loopback addresses are not allowed') + end + + it 'does not allow url pointing to the local network' do + remote_mirror = build(:remote_mirror, url: 'https://192.168.1.1') + + expect(remote_mirror).to be_invalid + expect(remote_mirror.errors[:url].first).to include('Requests to the local network are not allowed') + end end end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index d6c5b9228c0..ac5874fd0f7 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1005,6 +1005,67 @@ describe Repository do end end + describe '#ambiguous_ref?' do + let(:ref) { 'ref' } + + subject { repository.ambiguous_ref?(ref) } + + context 'when ref is ambiguous' do + before do + repository.add_tag(project.creator, ref, 'master') + repository.add_branch(project.creator, ref, 'master') + end + + it 'should be true' do + is_expected.to eq(true) + end + end + + context 'when ref is not ambiguous' do + before do + repository.add_tag(project.creator, ref, 'master') + end + + it 'should be false' do + is_expected.to eq(false) + end + end + end + + describe '#expand_ref' do + let(:ref) { 'ref' } + + subject { repository.expand_ref(ref) } + + context 'when ref is not tag or branch name' do + let(:ref) { 'refs/heads/master' } + + it 'returns nil' do + is_expected.to eq(nil) + end + end + + context 'when ref is tag name' do + before do + repository.add_tag(project.creator, ref, 'master') + end + + it 'returns the tag ref' do + is_expected.to eq("refs/tags/#{ref}") + end + end + + context 'when ref is branch name' do + before do + repository.add_branch(project.creator, ref, 'master') + end + + it 'returns the branch ref' do + is_expected.to eq("refs/heads/#{ref}") + end + end + end + describe '#add_branch' do let(:branch_name) { 'new_feature' } let(:target) { 'master' } diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index 7a7272ccb60..664dc3fa145 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -423,4 +423,41 @@ describe Snippet do expect(blob.data).to eq(snippet.content) end end + + describe '#embeddable?' do + context 'project snippet' do + [ + { project: :public, snippet: :public, embeddable: true }, + { project: :internal, snippet: :public, embeddable: false }, + { project: :private, snippet: :public, embeddable: false }, + { project: :public, snippet: :internal, embeddable: false }, + { project: :internal, snippet: :internal, embeddable: false }, + { project: :private, snippet: :internal, embeddable: false }, + { project: :public, snippet: :private, embeddable: false }, + { project: :internal, snippet: :private, embeddable: false }, + { project: :private, snippet: :private, embeddable: false } + ].each do |combination| + it 'only returns true when both project and snippet are public' do + project = create(:project, combination[:project]) + snippet = create(:project_snippet, combination[:snippet], project: project) + + expect(snippet.embeddable?).to eq(combination[:embeddable]) + end + end + end + + context 'personal snippet' do + [ + { snippet: :public, embeddable: true }, + { snippet: :internal, embeddable: false }, + { snippet: :private, embeddable: false } + ].each do |combination| + it 'only returns true when snippet is public' do + snippet = create(:personal_snippet, combination[:snippet]) + + expect(snippet.embeddable?).to eq(combination[:embeddable]) + end + end + end + end end diff --git a/spec/policies/issuable_policy_spec.rb b/spec/policies/issuable_policy_spec.rb index d1bf98995e7..db3df760472 100644 --- a/spec/policies/issuable_policy_spec.rb +++ b/spec/policies/issuable_policy_spec.rb @@ -7,6 +7,33 @@ describe IssuablePolicy, models: true do let(:policies) { described_class.new(user, issue) } describe '#rules' do + context 'when user is author of issuable' do + let(:merge_request) { create(:merge_request, source_project: project, author: user) } + let(:policies) { described_class.new(user, merge_request) } + + context 'when user is able to read project' do + it 'enables user to read and update issuables' do + expect(policies).to be_allowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request) + end + end + + context 'when project is private' do + let(:project) { create(:project, :private) } + + context 'when user belongs to the projects team' do + it 'enables user to read and update issuables' do + project.add_maintainer(user) + + expect(policies).to be_allowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request) + end + end + + it 'disallows user from reading and updating issuables from that project' do + expect(policies).to be_disallowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request) + end + end + end + context 'when discussion is locked for the issuable' do let(:issue) { create(:issue, project: project, discussion_locked: true) } diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb index 620f9f5e1d6..4affbcf6755 100644 --- a/spec/requests/api/files_spec.rb +++ b/spec/requests/api/files_spec.rb @@ -190,7 +190,7 @@ describe API::Files do get api(url, current_user), params - expect(headers['Content-Disposition']).to match(/^attachment/) + expect(headers['Content-Disposition']).to eq('attachment; filename="popen.rb"') end context 'when mandatory params are not given' do diff --git a/spec/requests/api/jobs_spec.rb b/spec/requests/api/jobs_spec.rb index cd4e480ca64..32d6857f6a1 100644 --- a/spec/requests/api/jobs_spec.rb +++ b/spec/requests/api/jobs_spec.rb @@ -142,10 +142,20 @@ describe API::Jobs do end context 'unauthorized user' do - let(:api_user) { nil } + context 'when user is not logged in' do + let(:api_user) { nil } - it 'does not return project jobs' do - expect(response).to have_gitlab_http_status(401) + it 'does not return project jobs' do + expect(response).to have_gitlab_http_status(401) + end + end + + context 'when user is guest' do + let(:api_user) { guest } + + it 'does not return project jobs' do + expect(response).to have_gitlab_http_status(403) + end end end @@ -241,10 +251,20 @@ describe API::Jobs do end context 'unauthorized user' do - let(:api_user) { nil } + context 'when user is not logged in' do + let(:api_user) { nil } - it 'does not return jobs' do - expect(response).to have_gitlab_http_status(401) + it 'does not return jobs' do + expect(response).to have_gitlab_http_status(401) + end + end + + context 'when user is guest' do + let(:api_user) { guest } + + it 'does not return jobs' do + expect(response).to have_gitlab_http_status(403) + end end end end diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb index de141377793..d47c12632d6 100644 --- a/spec/requests/api/repositories_spec.rb +++ b/spec/requests/api/repositories_spec.rb @@ -171,7 +171,7 @@ describe API::Repositories do it 'forces attachment content disposition' do get api(route, current_user) - expect(headers['Content-Disposition']).to match(/^attachment/) + expect(headers['Content-Disposition']).to eq 'attachment' end context 'when sha does not exist' do diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index b36087b86a7..fb460466a6a 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -441,9 +441,11 @@ describe API::Runner, :clean_gitlab_redis_shared_state do it 'picks a job' do request_job info: { platform: :darwin } + runner.reload + expect(response).to have_gitlab_http_status(201) expect(response.headers).not_to have_key('X-GitLab-Last-Update') - expect(runner.reload.platform).to eq('darwin') + expect(runner.platform).to eq('darwin') expect(json_response['id']).to eq(job.id) expect(json_response['token']).to eq(job.token) expect(json_response['job_info']).to eq(expected_job_info) @@ -537,8 +539,8 @@ describe API::Runner, :clean_gitlab_redis_shared_state do expect(json_response['id']).to eq(test_job.id) expect(json_response['dependencies'].count).to eq(2) expect(json_response['dependencies']).to include( - { 'id' => job.id, 'name' => job.name, 'token' => job.token }, - { 'id' => job2.id, 'name' => job2.name, 'token' => job2.token }) + { 'id' => job.id, 'name' => job.name, 'token' => test_job.token }, + { 'id' => job2.id, 'name' => job2.name, 'token' => test_job.token }) end end @@ -557,7 +559,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do expect(json_response['id']).to eq(test_job.id) expect(json_response['dependencies'].count).to eq(1) expect(json_response['dependencies']).to include( - { 'id' => job.id, 'name' => job.name, 'token' => job.token, + { 'id' => job.id, 'name' => job.name, 'token' => test_job.token, 'artifacts_file' => { 'filename' => 'ci_build_artifacts.zip', 'size' => 106365 } }) end end @@ -582,7 +584,8 @@ describe API::Runner, :clean_gitlab_redis_shared_state do expect(response).to have_gitlab_http_status(201) expect(json_response['id']).to eq(test_job.id) expect(json_response['dependencies'].count).to eq(1) - expect(json_response['dependencies'][0]).to include('id' => job2.id, 'name' => job2.name, 'token' => job2.token) + expect(json_response['dependencies'][0]).to include( + 'id' => job2.id, 'name' => job2.name, 'token' => test_job.token) end end @@ -995,7 +998,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do patch_the_trace end - it 'returns Forbidden ' do + it 'returns Forbidden' do expect(response.status).to eq(403) end end @@ -1048,11 +1051,12 @@ describe API::Runner, :clean_gitlab_redis_shared_state do context 'when the job is canceled' do before do - job.cancel + job.cancel! patch_the_trace end - it 'receives status in header' do + it 'responds with forbidden and status in header' do + expect(response).to have_gitlab_http_status(403) expect(response.header['Job-Status']).to eq 'canceled' end end @@ -1223,7 +1227,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do it 'fails to authorize artifacts posting' do authorize_artifacts(token: job.project.runners_token) - expect(response).to have_gitlab_http_status(403) + expect(response).to have_gitlab_http_status(404) end end @@ -1236,10 +1240,10 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end context 'authorization token is invalid' do - it 'responds with forbidden' do + it 'responds with not found' do authorize_artifacts(token: 'invalid', filesize: 100 ) - expect(response).to have_gitlab_http_status(403) + expect(response).to have_gitlab_http_status(404) end end @@ -1272,9 +1276,21 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end it 'responds with forbidden' do + expect(response).to have_gitlab_http_status(403) + end + end + + context 'when job has been canceled' do + let(:job) { create(:ci_build) } + + before do + job.cancel! upload_artifacts(file_upload, headers_with_token) + end + it 'responds with forbidden' do expect(response).to have_gitlab_http_status(403) + expect(response.header['Job-Status']).to eq('canceled') end end @@ -1327,10 +1343,10 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end context 'when using runners token' do - it 'responds with forbidden' do + it 'responds with not found' do upload_artifacts(file_upload, headers.merge(API::Helpers::Runner::JOB_TOKEN_HEADER => job.project.runners_token)) - expect(response).to have_gitlab_http_status(403) + expect(response).to have_gitlab_http_status(404) end end end @@ -1550,10 +1566,13 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end describe 'GET /api/v4/jobs/:id/artifacts' do - let(:token) { job.token } + let(:project) { create(:project) } + let(:pipeline) { create(:ci_empty_pipeline, project: project) } + let(:running_job) { create(:ci_build, :running, pipeline: pipeline) } + let(:token) { running_job.token } context 'when job has artifacts' do - let(:job) { create(:ci_build) } + let(:job) { create(:ci_build, pipeline: pipeline) } let(:store) { JobArtifactUploader::Store::LOCAL } before do @@ -1579,7 +1598,6 @@ describe API::Runner, :clean_gitlab_redis_shared_state do context 'when artifacts are stored remotely' do let(:store) { JobArtifactUploader::Store::REMOTE } - let!(:job) { create(:ci_build) } context 'when proxy download is being used' do before do @@ -1606,6 +1624,30 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end end + context 'when using running token from another pipeline' do + let(:running_job) { create(:ci_build, :running, project: project) } + + before do + download_artifact + end + + it 'responds with not found' do + expect(response).to have_gitlab_http_status(404) + end + end + + context 'when using running token from another project' do + let(:running_job) { create(:ci_build, :running) } + + before do + download_artifact + end + + it 'responds with not found' do + expect(response).to have_gitlab_http_status(404) + end + end + context 'when using runnners token' do let(:token) { job.project.runners_token } @@ -1613,8 +1655,8 @@ describe API::Runner, :clean_gitlab_redis_shared_state do download_artifact end - it 'responds with forbidden' do - expect(response).to have_gitlab_http_status(403) + it 'responds with not found' do + expect(response).to have_gitlab_http_status(404) end end end diff --git a/spec/serializers/environment_entity_spec.rb b/spec/serializers/environment_entity_spec.rb index b7324a26ed2..791b64dc356 100644 --- a/spec/serializers/environment_entity_spec.rb +++ b/spec/serializers/environment_entity_spec.rb @@ -40,4 +40,34 @@ describe EnvironmentEntity do expect(subject).to include(:metrics_path) end end + + context 'with deployment platform' do + let(:project) { create(:project, :repository) } + let(:environment) { create(:environment, project: project) } + + context 'when deployment platform is a cluster' do + before do + create(:cluster, + :provided_by_gcp, + :project, + environment_scope: '*', + projects: [project]) + end + + it 'should include cluster_type' do + expect(subject).to include(:cluster_type) + expect(subject[:cluster_type]).to eq('project_type') + end + end + + context 'when deployment platform is a Kubernetes Service' do + before do + create(:kubernetes_service, project: project) + end + + it 'should not include cluster_type' do + expect(subject).not_to include(:cluster_type) + end + end + end end diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb index ffa47d527f7..9fc2cc8b7d6 100644 --- a/spec/services/ci/create_pipeline_service_spec.rb +++ b/spec/services/ci/create_pipeline_service_spec.rb @@ -667,7 +667,7 @@ describe Ci::CreatePipelineService do stub_ci_pipeline_yaml_file(YAML.dump(config)) end - let(:ref_name) { 'feature' } + let(:ref_name) { 'refs/heads/feature' } context 'when source is merge request' do let(:source) { :merge_request } @@ -696,7 +696,7 @@ describe Ci::CreatePipelineService do let(:merge_request) do create(:merge_request, source_project: project, - source_branch: ref_name, + source_branch: Gitlab::Git.ref_name(ref_name), target_project: project, target_branch: 'master') end @@ -709,7 +709,7 @@ describe Ci::CreatePipelineService do end context 'when ref is tag' do - let(:ref_name) { 'v1.1.0' } + let(:ref_name) { 'refs/tags/v1.1.0' } it 'does not create a merge request pipeline' do expect(pipeline).not_to be_persisted @@ -721,7 +721,7 @@ describe Ci::CreatePipelineService do let(:merge_request) do create(:merge_request, source_project: project, - source_branch: ref_name, + source_branch: Gitlab::Git.ref_name(ref_name), target_project: target_project, target_branch: 'master') end @@ -786,7 +786,7 @@ describe Ci::CreatePipelineService do let(:merge_request) do create(:merge_request, source_project: project, - source_branch: ref_name, + source_branch: Gitlab::Git.ref_name(ref_name), target_project: project, target_branch: 'master') end @@ -928,7 +928,7 @@ describe Ci::CreatePipelineService do let(:merge_request) do create(:merge_request, source_project: project, - source_branch: ref_name, + source_branch: Gitlab::Git.ref_name(ref_name), target_project: project, target_branch: 'master') end diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb index 84cfa53ea05..d87a7dd234d 100644 --- a/spec/services/groups/update_service_spec.rb +++ b/spec/services/groups/update_service_spec.rb @@ -56,7 +56,7 @@ describe Groups::UpdateService do create(:project, :private, group: internal_group) expect(TodosDestroyer::GroupPrivateWorker).to receive(:perform_in) - .with(1.hour, internal_group.id) + .with(Todo::WAIT_FOR_DELETE, internal_group.id) end it "changes permission level to private" do diff --git a/spec/services/issuable/bulk_update_service_spec.rb b/spec/services/issuable/bulk_update_service_spec.rb index f0b0f7956ce..ca366cdf1df 100644 --- a/spec/services/issuable/bulk_update_service_spec.rb +++ b/spec/services/issuable/bulk_update_service_spec.rb @@ -28,6 +28,33 @@ describe Issuable::BulkUpdateService do expect(project.issues.opened).to be_empty expect(project.issues.closed).not_to be_empty end + + context 'when issue for a different project is created' do + let(:private_project) { create(:project, :private) } + let(:issue) { create(:issue, project: private_project, author: user) } + + context 'when user has access to the project' do + it 'closes all issues passed' do + private_project.add_maintainer(user) + + bulk_update(issues + [issue], state_event: 'close') + + expect(project.issues.opened).to be_empty + expect(project.issues.closed).not_to be_empty + expect(private_project.issues.closed).not_to be_empty + end + end + + context 'when user does not have access to project' do + it 'only closes all issues that the user has access to' do + bulk_update(issues + [issue], state_event: 'close') + + expect(project.issues.opened).to be_empty + expect(project.issues.closed).not_to be_empty + expect(private_project.issues.closed).to be_empty + end + end + end end describe 'reopen issues' do diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb index bd519e7f077..ce20bf2bef6 100644 --- a/spec/services/issues/update_service_spec.rb +++ b/spec/services/issues/update_service_spec.rb @@ -77,7 +77,7 @@ describe Issues::UpdateService, :mailer do end it 'enqueues ConfidentialIssueWorker when an issue is made confidential' do - expect(TodosDestroyer::ConfidentialIssueWorker).to receive(:perform_in).with(1.hour, issue.id) + expect(TodosDestroyer::ConfidentialIssueWorker).to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, issue.id) update_issue(confidential: true) end diff --git a/spec/services/members/destroy_service_spec.rb b/spec/services/members/destroy_service_spec.rb index 0a5220c7c61..e872a537761 100644 --- a/spec/services/members/destroy_service_spec.rb +++ b/spec/services/members/destroy_service_spec.rb @@ -22,7 +22,7 @@ describe Members::DestroyService do shared_examples 'a service destroying a member' do before do type = member.is_a?(GroupMember) ? 'Group' : 'Project' - expect(TodosDestroyer::EntityLeaveWorker).to receive(:perform_in).with(1.hour, member.user_id, member.source_id, type) + expect(TodosDestroyer::EntityLeaveWorker).to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, type) end it 'destroys the member' do @@ -69,14 +69,14 @@ describe Members::DestroyService do it 'calls Member#after_decline_request' do expect_any_instance_of(NotificationService).to receive(:decline_access_request).with(member) - described_class.new(current_user).execute(member) + described_class.new(current_user).execute(member, opts) end context 'when current user is the member' do it 'does not call Member#after_decline_request' do expect_any_instance_of(NotificationService).not_to receive(:decline_access_request).with(member) - described_class.new(member_user).execute(member) + described_class.new(member_user).execute(member, opts) end end end @@ -159,7 +159,7 @@ describe Members::DestroyService do end it_behaves_like 'a service destroying a member' do - let(:opts) { { skip_authorization: true } } + let(:opts) { { skip_authorization: true, skip_subresources: true } } let(:member) { group_project.requesters.find_by(user_id: member_user.id) } end @@ -168,12 +168,14 @@ describe Members::DestroyService do end it_behaves_like 'a service destroying a member' do - let(:opts) { { skip_authorization: true } } + let(:opts) { { skip_authorization: true, skip_subresources: true } } let(:member) { group.requesters.find_by(user_id: member_user.id) } end end context 'when current user can destroy the given access requester' do + let(:opts) { { skip_subresources: true } } + before do group_project.add_maintainer(current_user) group.add_owner(current_user) @@ -229,4 +231,54 @@ describe Members::DestroyService do end end end + + context 'subresources' do + let(:user) { create(:user) } + let(:member_user) { create(:user) } + let(:opts) { {} } + + let(:group) { create(:group, :public) } + let(:subgroup) { create(:group, parent: group) } + let(:subsubgroup) { create(:group, parent: subgroup) } + let(:subsubproject) { create(:project, group: subsubgroup) } + + let(:group_project) { create(:project, :public, group: group) } + let(:control_project) { create(:project, group: subsubgroup) } + + before do + create(:group_member, :developer, group: subsubgroup, user: member_user) + + subsubproject.add_developer(member_user) + control_project.add_maintainer(user) + group.add_owner(user) + + group_member = create(:group_member, :developer, group: group, user: member_user) + + described_class.new(user).execute(group_member, opts) + end + + it 'removes the project membership' do + expect(group_project.members.map(&:user)).not_to include(member_user) + end + + it 'removes the group membership' do + expect(group.members.map(&:user)).not_to include(member_user) + end + + it 'removes the subgroup membership', :postgresql do + expect(subgroup.members.map(&:user)).not_to include(member_user) + end + + it 'removes the subsubgroup membership', :postgresql do + expect(subsubgroup.members.map(&:user)).not_to include(member_user) + end + + it 'removes the subsubproject membership', :postgresql do + expect(subsubproject.members.map(&:user)).not_to include(member_user) + end + + it 'does not remove the user from the control project' do + expect(control_project.members.map(&:user)).to include(user) + end + end end diff --git a/spec/services/members/update_service_spec.rb b/spec/services/members/update_service_spec.rb index 6d19a95ffeb..599ed39ca37 100644 --- a/spec/services/members/update_service_spec.rb +++ b/spec/services/members/update_service_spec.rb @@ -20,11 +20,28 @@ describe Members::UpdateService do shared_examples 'a service updating a member' do it 'updates the member' do + expect(TodosDestroyer::EntityLeaveWorker).not_to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, source.class.name) + updated_member = described_class.new(current_user, params).execute(member, permission: permission) expect(updated_member).to be_valid expect(updated_member.access_level).to eq(Gitlab::Access::MAINTAINER) end + + context 'when member is downgraded to guest' do + let(:params) do + { access_level: Gitlab::Access::GUEST } + end + + it 'schedules to delete confidential todos' do + expect(TodosDestroyer::EntityLeaveWorker).to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, member.user_id, member.source_id, source.class.name).once + + updated_member = described_class.new(current_user, params).execute(member, permission: permission) + + expect(updated_member).to be_valid + expect(updated_member.access_level).to eq(Gitlab::Access::GUEST) + end + end end before do diff --git a/spec/services/merge_requests/build_service_spec.rb b/spec/services/merge_requests/build_service_spec.rb index 1894d8c8d0e..536d0d345a4 100644 --- a/spec/services/merge_requests/build_service_spec.rb +++ b/spec/services/merge_requests/build_service_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe MergeRequests::BuildService do using RSpec::Parameterized::TableSyntax include RepoHelpers + include ProjectForksHelper let(:project) { create(:project, :repository) } let(:source_project) { nil } @@ -49,7 +50,7 @@ describe MergeRequests::BuildService do describe '#execute' do it 'calls the compare service with the correct arguments' do - allow_any_instance_of(described_class).to receive(:branches_valid?).and_return(true) + allow_any_instance_of(described_class).to receive(:projects_and_branches_valid?).and_return(true) expect(CompareService).to receive(:new) .with(project, Gitlab::Git::BRANCH_REF_PREFIX + source_branch) .and_call_original @@ -393,11 +394,27 @@ describe MergeRequests::BuildService do end end + context 'target_project is set but repo is not accessible by current_user' do + let(:target_project) do + create(:project, :public, :repository, repository_access_level: ProjectFeature::PRIVATE) + end + + it 'sets target project correctly' do + expect(merge_request.target_project).to eq(project) + end + end + context 'source_project is set and accessible by current_user' do let(:source_project) { create(:project, :public, :repository)} let(:commits) { Commit.decorate([commit_1], project) } - it 'sets target project correctly' do + before do + # To create merge requests _from_ a project the user needs at least + # developer access + source_project.add_developer(user) + end + + it 'sets source project correctly' do expect(merge_request.source_project).to eq(source_project) end end @@ -406,11 +423,43 @@ describe MergeRequests::BuildService do let(:source_project) { create(:project, :private, :repository)} let(:commits) { Commit.decorate([commit_1], project) } - it 'sets target project correctly' do + it 'sets source project correctly' do + expect(merge_request.source_project).to eq(project) + end + end + + context 'source_project is set but the user cannot create merge requests from the project' do + let(:source_project) do + create(:project, :public, :repository, merge_requests_access_level: ProjectFeature::PRIVATE) + end + + it 'sets the source_project correctly' do expect(merge_request.source_project).to eq(project) end end + context 'target_project is not in the fork network of source_project' do + let(:target_project) { create(:project, :public, :repository) } + + it 'adds an error to the merge request' do + expect(merge_request.errors[:validate_fork]).to contain_exactly('Source project is not a fork of the target project') + end + end + + context 'target_project is in the fork network of source project but no longer accessible' do + let!(:project) { fork_project(target_project, user, namespace: user.namespace, repository: true) } + let(:source_project) { project } + let(:target_project) { create(:project, :public, :repository) } + + before do + target_project.update(visibility_level: Gitlab::VisibilityLevel::PRIVATE) + end + + it 'sets the target_project correctly' do + expect(merge_request.target_project).to eq(project) + end + end + context 'when specifying target branch in the description' do let(:description) { "A merge request targeting another branch\n\n/target_branch with-codeowners" } diff --git a/spec/services/projects/lfs_pointers/lfs_download_service_spec.rb b/spec/services/projects/lfs_pointers/lfs_download_service_spec.rb index d7d7f1874eb..95c9b6e63b8 100644 --- a/spec/services/projects/lfs_pointers/lfs_download_service_spec.rb +++ b/spec/services/projects/lfs_pointers/lfs_download_service_spec.rb @@ -4,17 +4,15 @@ describe Projects::LfsPointers::LfsDownloadService do let(:project) { create(:project) } let(:oid) { '9e548e25631dd9ce6b43afd6359ab76da2819d6a5b474e66118c7819e1d8b3e8' } let(:download_link) { "http://gitlab.com/#{oid}" } - let(:lfs_content) do - <<~HEREDOC - whatever - HEREDOC - end + let(:lfs_content) { SecureRandom.random_bytes(10) } subject { described_class.new(project) } before do allow(project).to receive(:lfs_enabled?).and_return(true) WebMock.stub_request(:get, download_link).to_return(body: lfs_content) + + allow(Gitlab::CurrentSettings).to receive(:allow_local_requests_from_hooks_and_services?).and_return(false) end describe '#execute' do @@ -32,7 +30,7 @@ describe Projects::LfsPointers::LfsDownloadService do it 'stores the content' do subject.execute(oid, download_link) - expect(File.read(LfsObject.first.file.file.file)).to eq lfs_content + expect(File.binread(LfsObject.first.file.file.file)).to eq lfs_content end end @@ -54,18 +52,61 @@ describe Projects::LfsPointers::LfsDownloadService do end end + context 'when localhost requests are allowed' do + let(:download_link) { 'http://192.168.2.120' } + + before do + allow(Gitlab::CurrentSettings).to receive(:allow_local_requests_from_hooks_and_services?).and_return(true) + end + + it 'downloads the file' do + expect(subject).to receive(:download_and_save_file).and_call_original + + expect { subject.execute(oid, download_link) }.to change { LfsObject.count }.by(1) + end + end + context 'when a bad URL is used' do - where(download_link: ['/etc/passwd', 'ftp://example.com', 'http://127.0.0.2']) + where(download_link: ['/etc/passwd', 'ftp://example.com', 'http://127.0.0.2', 'http://192.168.2.120']) with_them do it 'does not download the file' do - expect(subject).not_to receive(:download_and_save_file) - expect { subject.execute(oid, download_link) }.not_to change { LfsObject.count } end end end + context 'when the URL points to a redirected URL' do + context 'that is blocked' do + where(redirect_link: ['ftp://example.com', 'http://127.0.0.2', 'http://192.168.2.120']) + + with_them do + before do + WebMock.stub_request(:get, download_link).to_return(status: 301, headers: { 'Location' => redirect_link }) + end + + it 'does not follow the redirection' do + expect(Rails.logger).to receive(:error).with(/LFS file with oid #{oid} couldn't be downloaded/) + + expect { subject.execute(oid, download_link) }.not_to change { LfsObject.count } + end + end + end + + context 'that is valid' do + let(:redirect_link) { "http://example.com/"} + + before do + WebMock.stub_request(:get, download_link).to_return(status: 301, headers: { 'Location' => redirect_link }) + WebMock.stub_request(:get, redirect_link).to_return(body: lfs_content) + end + + it 'follows the redirection' do + expect { subject.execute(oid, download_link) }.to change { LfsObject.count }.from(0).to(1) + end + end + end + context 'when an lfs object with the same oid already exists' do before do create(:lfs_object, oid: 'oid') diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index d58ff2cedc0..8adfc63222e 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -41,7 +41,7 @@ describe Projects::UpdateService do end it 'updates the project to private' do - expect(TodosDestroyer::ProjectPrivateWorker).to receive(:perform_in).with(1.hour, project.id) + expect(TodosDestroyer::ProjectPrivateWorker).to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, project.id) result = update_project(project, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) @@ -191,7 +191,7 @@ describe Projects::UpdateService do context 'when changing feature visibility to private' do it 'updates the visibility correctly' do expect(TodosDestroyer::PrivateFeaturesWorker) - .to receive(:perform_in).with(1.hour, project.id) + .to receive(:perform_in).with(Todo::WAIT_FOR_DELETE, project.id) result = update_project(project, user, project_feature_attributes: { issues_access_level: ProjectFeature::PRIVATE } diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb index c52515aefd8..253f2e44d10 100644 --- a/spec/services/todo_service_spec.rb +++ b/spec/services/todo_service_spec.rb @@ -19,6 +19,7 @@ describe TodoService do before do project.add_guest(guest) project.add_developer(author) + project.add_developer(assignee) project.add_developer(member) project.add_developer(john_doe) project.add_developer(skipped) diff --git a/spec/support/import_export/export_file_helper.rb b/spec/support/import_export/export_file_helper.rb index a49036c3b80..ac320934f5a 100644 --- a/spec/support/import_export/export_file_helper.rb +++ b/spec/support/import_export/export_file_helper.rb @@ -133,6 +133,6 @@ module ExportFileHelper end def file_permissions(file) - File.stat(file).mode & 0777 + File.lstat(file).mode & 0777 end end diff --git a/spec/workers/mail_scheduler/notification_service_worker_spec.rb b/spec/workers/mail_scheduler/notification_service_worker_spec.rb index f725c8763a0..e726f469816 100644 --- a/spec/workers/mail_scheduler/notification_service_worker_spec.rb +++ b/spec/workers/mail_scheduler/notification_service_worker_spec.rb @@ -16,7 +16,14 @@ describe MailScheduler::NotificationServiceWorker do worker.perform(method, *serialize(key)) end - context 'when the arguments cannot be deserialized' do + # actionmailer wasn't actually upgraded from 4.2.10 to 4.2.11 in + # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23520. + # + # Attempting to run this spec in Rails 4 will fail until + # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23396 + # is merged. Let's disable it since we are only using Rails 5 on + # this branch. + context 'when the arguments cannot be deserialized', :rails5 do it 'does nothing' do expect(worker.notification_service).not_to receive(method) |