diff options
312 files changed, 1427 insertions, 1381 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a4a6c9ff13..ca52a3a7444 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,283 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.9.1 (2019-03-25) + +### Fixed (7 changes) + +- Fix issue that caused the "Show all activity" button to appear on top of the mini pipeline status dropdown on the merge request page. !26274 +- Fix duplicated bottom match line on merge request parallel diff view. !26402 +- Allow users who can push to protected branches to create protected branches via CLI. !26413 +- Add missing .gitlab-ci.yml to Android template. !26415 +- Refresh commit count after repository head changes. !26473 +- Set proper default-branch for repository on GitHub Import. !26476 +- GitHub importer: Use the project creator to create branches from forks. !26510 + +### Changed (1 change) + +- Upgrade to Gitaly v1.27.1. !26533 + + +## 11.9.0 (2019-03-22) + +### Security (24 changes) + +- Use encrypted runner tokens. !25532 +- Stop linking to unrecognized package sources. !55518 +- Disable issue boards API when issues are disabled. +- Forbid creating discussions for users with restricted access. +- Fix leaking private repository information in API. +- Fixed ability to see private groups by users not belonging to given group. +- Prevent releases links API to leak tag existance. +- Display the correct number of MRs a user has access to. +- Block local URLs for Kubernetes integration. +- Fix arbitrary file read via diffs during import. +- Check if desired milestone for an issue is available. +- Don't allow non-members to see private related MRs. +- Check snippet attached file to be moved is within designated directory. +- Fix blind SSRF in Prometheus integration by checking URL before querying. +- Fix git clone revealing private repo's presence. +- Remove project serialization in quick actions response. +- Don't show new issue link after move when a user does not have permissions. +- Limit mermaid rendering to 5K characters. +- Show only merge requests visible to user on milestone detail page. +- Display only information visible to current user on the Milestone page. +- Do not display impersonated sessions under active sessions and remove ability to revoke session. +- Validate session key when authorizing with GCP to create a cluster. +- Do not disclose milestone titles for unauthorized users. +- Remove the possibility to share a project with a group that a user is not a member of. + +### Removed (1 change) + +- Remove HipChat integration from GitLab. !22223 + +### Fixed (86 changes, 21 of them are from the community) + +- Fixes issue with AWS V4 signatures not working with some S3 providers. !21788 +- Validate 'include' keywords in gitlab-ci.yml configuration files. !24098 (Paul Bonaud) +- Close More Actions tooltip when menu opens. !24285 +- API: Support Jira transition ID as string. !24400 (Robert Schilling) +- Fixed navigation sidebar flashing open on page load. !24555 +- Fix username escaping when using assign to me for issues. !24673 +- commit page info-well overflow fix #56436. !24799 (Gokhan Apaydin) +- Fix error tracking list page. !24806 +- Fix overlapping empty-header logo. !24868 (Jonas L.) +- Resolve Jobs tab border top in pipeline's page is 1px off. !24878 +- Require maintainer access to show pages domain settings. !24926 +- Display error message when API call to list Sentry issues fails. !24936 +- Fix rollout status for statefulsets and daemonsets. !24972 (Sergej Nikolaev <kinolaev@gmail.com>) +- Display job names consistently on pipelines and environments list. !24984 +- Update new password breadcrumb. !25037 (George Tsiolis) +- Fixes functions finder for upgraded Knative app. !25067 +- Provide expires_in in LFS authentication payload. !25082 +- Fix validation of certain ed25519 keys. !25115 (Merlijn B. W. Wajer) +- Timer and action name aligned vertically for delayed jobs in pipeline actions. !25117 (Gokhan Apaydin) +- Fix the border style of CONTRIBUTING button when it exists. !25124 (Takuya Noguchi) +- Change badges.svg example to pipeline.svg. !25157 (Aviad Levy) +- API: Fix docs and parameters for hangouts-chat service. !25180 (Robert Schilling) +- API: Expose full commit title. !25189 (Robert Schilling) +- API: Require only one parameter when updating a wiki. !25191 (Robert Schilling) +- Hide pipeline status when pipelines are disabled on project. !25204 +- Fix alignment of dropdown icon on issuable on mobile. !25205 (Takuya Noguchi) +- Add left margin to 1st time contributor badge. !25216 (Gokhan Apaydin) +- Use limited counter for runner build count in admin page. !25220 +- API: Ensure that related merge requests are referenced cross-project. !25222 (Robert Schilling) +- Ensure the base pipeline of a Merge Request belongs to its target branch. !25226 +- Fix import_jid error on project import. !25239 +- Fix commenting on commits having SHA1 starting with a large number. !25278 +- Allow empty values such as [] to be stored in reactive cache. !25283 +- Remove vertical connecting line placeholder from diff discussion notes. !25292 +- Fix hover and active state colors of award emoji button. !25295 +- Fix author layouts in issuable meta line UIs on mobile. !25332 (Takuya Noguchi) +- Fix bug where project topics truncate. !25398 +- Fix ETag caching not being used for AJAX requests. !25400 +- Doc - fix the url of pipeline status badge. !25404 (Aviad Levy) +- Fix pipeline status icon mismatch. !25407 +- Allow users to compare branches on a read-only instance. !25414 +- Fix 404s when C++ .gitignore template selected. !25416 +- Always fetch MR latest version when creating suggestions. !25441 +- Only show borders for markdown images in notes. !25448 +- Bring back Rugged implementation of find_commit. !25477 +- Remove duplicate units from metrics graph. !25485 +- Fix project import error importing releases. !25495 +- Remove duplicate XHR request when requesting new pipeline page. !25506 +- Properly handle multiple X-Forwarded-For addresses in runner IP. !25511 +- Fix weekday shift in issue board cards for UTC+X timezones by removing local timezone to UTC conversion. !25512 (Elias Werberich) +- Fix large table horizontal scroll and prevent side-by-side tables. !25520 (Dany Jupille) +- Fix error when viewing group issue boards when user doesn't have explicit group permissions. !25524 +- Respect the should_remove_source_branch parameter to the merge API. !25525 +- Externalize markdown toolbar buttons tooltips. !25529 +- Fix method to mark a project repository as writable. !25546 +- fix group without owner after transfer. !25573 (Peter Marko) +- Fix pagination and duplicate requests in environments page. !25582 +- Improve the JS pagination to handle the case when the `X-Total` and `X-Total-Pages` headers aren't present. !25601 +- Add right padding to the repository mirror action buttons. !25606 +- Use 'folder-open' from sprite icons for Browse Files button in Tag page. !25635 +- Make merge to refs/merge-requests/:iid/merge not raise when FF-only enabled. !25653 +- Fixed "Copying comment with ordered list includes extraneous newlines". !25695 +- Fix bridge jobs only/except variables policy. !25710 +- Allow GraphQL requests without CSRF token. !25719 +- Skip Project validation during Hashed Storage migration or rollback. !25753 +- Resolve showing squash commit edit issue when only single commit is present. !25807 +- Fix the last-ditch memory killer pgroup SIGKILL. !25940 +- Disable timeout on merge request merging poll. !25988 +- Allow modifying squash commit message for fast-forward only merge method. !26017 +- Fix bug in BitBucket imports with SHA shorter than 40 chars. !26050 +- Fix health checks not working behind load balancers. !26055 +- Fix 500 error caused by CODEOWNERS with no matches. !26072 +- Fix notes being marked as edited after resolving. !26143 +- Fix error creating a merge request when diff includes a null byte. !26190 +- Fix undefined variable error on json project views. !26297 +- GitHub import: Create new branches as project owner. !26335 +- Gracefully handles excluded fields from attributes during serialization on JsonCache. !26368 +- Admin section finds users case-insensitively. +- Fixes not working dropdowns in pipelines page. +- Do not show file templates when creating a new directory in WebIDE. +- Allow project members to see private group if the project is in the group namespace. +- Allow maintainers to remove pages. +- Fix inconsistent pagination styles. +- Fixed blob editor deleting file content for certain file paths. +- Fix upcoming milestone when there are milestones with far-future due dates. +- Fixed alignment of changed icon in Web IDE. + +### Changed (31 changes, 10 of them are from the community) + +- Improve snippets empty state. !18348 (George Tsiolis) +- Remove second primary button on wiki edit. !19959 (George Tsiolis) +- Allow raw `tls_options` to be passed in LDAP configuration. !20678 +- Remove undigested token column from personal_access_tokens table from the database. !22743 +- Update activity filter for issues. !23423 (George Tsiolis) +- Use auto-build-image for build job in Auto-DevOps.gitlab-ci.yml. !24279 +- Error tracking configuration - add a Sentry project selection dropdown. !24701 +- Move ChatOps to Core. !24780 +- Implement new arguments `state`, `closed_before` and `closed_after` for `IssuesResolver` in GraphQL. !24910 +- Validate kubernetes cluster CA certificate. !24990 +- Review App Link to Changed Page if Only One Change Present. !25048 +- Show pipeline ID, commit, and branch name on modal while stopping pipeline. !25059 +- Improve empty state for starred projects. !25138 +- Capture due date when importing milestones from Github. !25182 (dstanley) +- Add a spinner icon which is rendered using pure css. !25186 +- Make emoji picker bigger. !25187 (Jacopo Beschi @jacopo-beschi) +- API: Sort tie breaker with id DESC. !25311 (Nermin Vehabovic) +- Add iOS-fastlane template for .gitlab-ci.yml. !25395 +- Move language setting to preferences. !25427 (Fabian Schneider @fabsrc) +- Resolve Create Project Template for Netlify. !25453 +- Sort labels alphabetically on issues and merge requests list. !25470 +- Add Project template for .NET Core. !25486 +- Update operations settings breadcrumb trail. !25539 (George Tsiolis) +- Add Project template for go-micro. !25553 +- Jira: make issue links title compact. !25609 (Elan Ruusamäe @glensc) +- Project level filtering for JupyterHub. !25684 (Amit Rathi (amit1rrr)) +- Clean up vendored templates. !25794 +- Mask all TOKEN and PASSWORD CI variables. !25868 +- Add project template for Android. !25870 +- Add iOS project template. !25872 +- Upgrade to Gitaly v1.26.0. !25890 + +### Performance (11 changes) + +- Improve performance for diverging commit counts. !24287 +- Optimize Redis usage in User::ActivityService. !25005 +- Only load syntax highlight CSS of selected theme. !25232 +- Improve label select rendering. !25281 +- Enable persisted pipeline stages by default. !25347 +- Speed up group issue search counts. !25411 +- Load repository language from the database if detected before. !25518 +- Remove N+1 query for tags in /admin/runners page. !25572 +- Eliminate most N+1 queries loading UserController#calendar_activities. !25697 +- Improve Web IDE launch performance. !25700 +- Significantly reduce N+1 queries in /api/v4/todos endpoint. !25711 + +### Added (55 changes, 18 of them are from the community) + +- Add a tag filter to the admin runners view. !19740 (Alexis Reigel) +- Add project fetch statistics. !23596 (Jacopo Beschi @jacopo-beschi) +- Hashed Storage rollback mechanism. !23955 +- Allow to recursively expand includes. !24356 +- Allow expanding a diff to display full file. !24406 +- Support `only: changes:` on MR pipelines. !24490 (Hiroyuki Sato) +- Expose additional merge request pipeline variables. !24595 (Hiroyuki Sato) +- Add metadata about the GitLab server to GraphQL. !24636 +- Support merge ref writing (without merging to target branch). !24692 +- Add field mergeRequests for project in GraphQL. !24805 +- API support for MR merge to temporary merge ref path. !24918 +- Ability to filter confidential issues. !24960 (Robert Schilling) +- Allow creation of branches that match a wildcard protection, except directly through git. !24969 +- Add related merge request count to api response. !24974 +- Add realtime validation for user fullname and username on validation. !25017 (Ehsan Abdulqader @EhsanZ) +- Allow setting feature flags per GitLab group through the API. !25022 +- Add API endpoint to get a commit's GPG signature. !25032 +- Add support for FTP assets for releases. !25071 (Robert Schilling) +- Add Confirmation Modal to Rollback on Environment. !25110 +- add title attribute to display file name. !25154 (Satoshi Nakamatsu @satoshicano) +- API: Expose text_color for project and group labels. !25172 (Robert Schilling) +- Added support for ingress hostnames. !25181 (walkafwalka) +- API: Promote project milestone to a group milestone. !25203 (Nermin Vehabovic) +- API: Expose if the current user can merge a MR. !25207 (Robert Schilling) +- add readme to changelogs directory. !25209 (@glensc) +- API: Indicate if label is a project label. !25219 (Robert Schilling) +- Expose refspecs and depth to runner. !25233 +- Port System Header and Footer feature to Core. !25241 +- Sort Environments by Last Updated. !25260 +- Accept force option to overwrite branch on commit via API. !25286 +- Add support for masking CI variables. !25293 +- Add Link from Closed (moved) Issues to Moved Issue. !25300 +- Next/previous navigation between files in MR review. !25355 +- Add YouTrack integration service. !25361 (Yauhen Kotau @bessorion) +- Add ability to set path and name for project on fork using API. !25363 +- Add project level config for merge pipelines. !25385 +- Edit Knative domain after it has been deployed. !25386 +- Add zoom and scroll to metrics dashboard. !25388 +- Persist source sha and target sha for merge pipelines. !25417 +- Add support for toggling discussion filter from notes section. !25426 +- Resolve Move files in the Web IDE. !25431 +- Show header and footer system messages in email. !25474 +- Allow configuring POSTGRES_VERSION in Auto DevOps. !25500 +- Add Saturday to Localization first day of the week. !25509 (Ahmad Haghighi) +- Extend the Gitlab API for deletion of job_artifacts of a single job. !25522 (rroger) +- Simplify CI/CD configuration on serverless projects. !25523 +- Add button to start discussion from single comment. !25575 +- sidekiq: terminate child processes at shutdown. !25669 +- Expose merge request entity for pipelines. !25679 +- Link to most recent MR from a branch. !25689 +- Adds Auto DevOps build job for tags. !25718 (walkafwalka) +- Allow all snippets to be accessed by API. !25772 +- Make file tree in merge requests resizable. +- Make the Web IDE the default editor. +- File uploads are deleted asynchronously when deleting a project or group. + +### Other (28 changes, 6 of them are from the community) + +- Improve GitHub and Gitea project import table UI. !24606 +- Externalize strings from `/app/views/projects/commit`. !24668 (George Tsiolis) +- Correct non-standard unicode spaces to regular unicode. !24795 (Marcel Amirault) +- Provide a performance bar link to the Jaeger UI. !24902 +- Remove BATCH_SIZE from WikiFileFinder. !24933 +- Use export-import svgs from gitlab-svgs. !24954 +- Fix N+1 query in Issues and MergeRequest API when issuable_metadata is present. !25042 (Alex Koval) +- Directly inheriting from ActiveRecord::Migration is deprecated. !25066 (Jasper Maes) +- Bump Helm and kubectl in Auto DevOps to 2.12.3 and 1.11.7 respectively. !25072 +- Log queue duration in production_json.log. !25075 +- Extracted ResolveWithIssueButton to its own component. !25093 (Martin Hobert) +- Add rectangular project and group avatars. !25098 +- Include note in the Rails filter_parameters configuration. !25238 +- Bump Helm and kubectl used in Kubernetes integration to 2.12.3 and 1.11.7 respectively. !25268 +- Include gl_project_path in API /internal/allowed response. !25314 +- Fix incorrect Pages Domains checkbox description. !25392 (Anton Melser) +- Update GitLab Runner Helm Chart to 0.2.0. !25493 +- Add suffix (`_event`) to merge request source. !25508 +- Creates a helper function to check if repo is EE. !25647 +- If chpst is available, make fron-source installations run sidekiq as a process group leader. !25654 +- Bring back Rugged implementation of GetTreeEntries. !25674 +- Moves EE util into the CE file. !25680 +- Bring back Rugged implementation of CommitIsAncestor. !25702 +- Bring back Rugged implementation of TreeEntry. !25706 +- Enable syntax highlighting to other supported markups. !25761 +- Update GitLab Shell to v8.7.1. !25801 +- Bring back Rugged implementation of commit_tree_entry. !25896 +- Removes EE differences for jobs/getters.js. + + ## 11.8.0 (2019-02-22) ### Security (7 changes, 1 of them is from the community) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 5db08bf2dc5..08002f86cc8 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.27.0 +1.27.1 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 56b6be4ebb2..9c78b761ea1 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.3.1 +8.3.2 @@ -1 +1 @@ -11.9.0-rc10 +11.9.1 diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js index 94b78907d9a..b3508f36cf9 100644 --- a/app/assets/javascripts/issue.js +++ b/app/assets/javascripts/issue.js @@ -16,7 +16,9 @@ export default class Issue { Issue.createMrDropdownWrap = document.querySelector('.create-mr-dropdown-wrap'); Issue.initMergeRequests(); - Issue.initRelatedBranches(); + if (document.querySelector('#related-branches')) { + Issue.initRelatedBranches(); + } this.closeButtons = $('a.btn-close'); this.reopenButtons = $('a.btn-reopen'); diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 126b00af552..ef6552fb265 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -806,7 +806,7 @@ .merge-request-tabs-holder { top: $header-height; - z-index: 300; + z-index: 250; background-color: $white-light; border-bottom: 1px solid $border-color; diff --git a/app/controllers/projects/graphs_controller.rb b/app/controllers/projects/graphs_controller.rb index c80fce513f6..67d3f49af18 100644 --- a/app/controllers/projects/graphs_controller.rb +++ b/app/controllers/projects/graphs_controller.rb @@ -46,12 +46,8 @@ class Projects::GraphsController < Projects::ApplicationController def get_languages @languages = - if @project.repository_languages.present? - @project.repository_languages.map do |lang| - { value: lang.share, label: lang.name, color: lang.color, highlight: lang.color } - end - else - @project.repository.languages + ::Projects::RepositoryLanguagesService.new(@project, current_user).execute.map do |lang| + { value: lang.share, label: lang.name, color: lang.color, highlight: lang.color } end end diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index b9d02a62fc3..2cb40697b5c 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -39,6 +39,7 @@ class Projects::IssuesController < Projects::ApplicationController before_action :authorize_create_merge_request_from!, only: [:create_merge_request] before_action :authorize_import_issues!, only: [:import_csv] + before_action :authorize_download_code!, only: [:related_branches] before_action :set_suggested_issues_feature_flags, only: [:new] diff --git a/app/models/broadcast_message.rb b/app/models/broadcast_message.rb index 2d237383e60..1c95abdd9ee 100644 --- a/app/models/broadcast_message.rb +++ b/app/models/broadcast_message.rb @@ -4,7 +4,7 @@ class BroadcastMessage < ActiveRecord::Base include CacheMarkdownField include Sortable - cache_markdown_field :message, pipeline: :broadcast_message + cache_markdown_field :message, pipeline: :broadcast_message, whitelisted: true validates :message, presence: true validates :starts_at, presence: true diff --git a/app/models/concerns/cache_markdown_field.rb b/app/models/concerns/cache_markdown_field.rb index 1a8570b80c3..15d8d58b9b5 100644 --- a/app/models/concerns/cache_markdown_field.rb +++ b/app/models/concerns/cache_markdown_field.rb @@ -7,6 +7,7 @@ # cache_markdown_field :foo # cache_markdown_field :bar # cache_markdown_field :baz, pipeline: :single_line +# cache_markdown_field :baz, whitelisted: true # # Corresponding foo_html, bar_html and baz_html fields should exist. module CacheMarkdownField @@ -37,7 +38,15 @@ module CacheMarkdownField end def html_fields - markdown_fields.map {|field| html_field(field) } + markdown_fields.map { |field| html_field(field) } + end + + def html_fields_whitelisted + markdown_fields.each_with_object([]) do |field, fields| + if @data[field].fetch(:whitelisted, false) + fields << html_field(field) + end + end end end @@ -149,13 +158,18 @@ module CacheMarkdownField alias_method :attributes_before_markdown_cache, :attributes def attributes attrs = attributes_before_markdown_cache + html_fields = cached_markdown_fields.html_fields + whitelisted = cached_markdown_fields.html_fields_whitelisted + exclude_fields = html_fields - whitelisted - attrs.delete('cached_markdown_version') - - cached_markdown_fields.html_fields.each do |field| + exclude_fields.each do |field| attrs.delete(field) end + if whitelisted.empty? + attrs.delete('cached_markdown_version') + end + attrs end diff --git a/app/models/label.rb b/app/models/label.rb index 1c3db3eb35d..08ab07bba7a 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -126,6 +126,10 @@ class Label < ActiveRecord::Base fuzzy_search(query, [:title, :description]) end + def self.by_ids(ids) + where(id: ids) + end + def open_issues_count(user = nil) issues_count(user, state: 'opened') end diff --git a/app/models/project.rb b/app/models/project.rb index 7d6f7fd2c58..4039af7a330 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1378,6 +1378,7 @@ class Project < ActiveRecord::Base repository.raw_repository.write_ref('HEAD', "refs/heads/#{branch}") repository.copy_gitattributes(branch) repository.after_change_head + ProjectCacheWorker.perform_async(self.id, [], [:commit_count]) reload_default_branch else errors.add(:base, "Could not change HEAD: branch '#{branch}' does not exist") diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index cf257ed47c8..6f2070243e6 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -177,7 +177,6 @@ class ProjectPolicy < BasePolicy enable :read_cycle_analytics enable :award_emoji enable :read_pages_content - enable :read_release end # These abilities are not allowed to admins that are not members of the project, @@ -203,6 +202,7 @@ class ProjectPolicy < BasePolicy enable :read_deployment enable :read_merge_request enable :read_sentry_issue + enable :read_release end # We define `:public_user_access` separately because there are cases in gitlab-ee diff --git a/app/serializers/diff_file_entity.rb b/app/serializers/diff_file_entity.rb index 13711070a46..066e30cd3bb 100644 --- a/app/serializers/diff_file_entity.rb +++ b/app/serializers/diff_file_entity.rb @@ -57,7 +57,7 @@ class DiffFileEntity < DiffFileBaseEntity diff_file.diff_lines_for_serializer end - expose :is_fully_expanded, if: -> (diff_file, _) { Feature.enabled?(:expand_diff_full_file) && diff_file.text? } do |diff_file| + expose :is_fully_expanded, if: -> (diff_file, _) { Feature.enabled?(:expand_diff_full_file, default_enabled: true) && diff_file.text? } do |diff_file| diff_file.fully_expanded? end diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index f35ad2a9d8b..49739083868 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -70,10 +70,14 @@ class IssuableBaseService < BaseService end def filter_labels - filter_labels_in_param(:add_label_ids) - filter_labels_in_param(:remove_label_ids) - filter_labels_in_param(:label_ids) - find_or_create_label_ids + params[:add_label_ids] = labels_service.filter_labels_ids_in_param(:add_label_ids) if params[:add_label_ids] + params[:remove_label_ids] = labels_service.filter_labels_ids_in_param(:remove_label_ids) if params[:remove_label_ids] + + if params[:label_ids] + params[:label_ids] = labels_service.filter_labels_ids_in_param(:label_ids) + elsif params[:labels] + params[:label_ids] = labels_service.find_or_create_by_titles.map(&:id) + end end # rubocop: disable CodeReuse/ActiveRecord @@ -101,6 +105,10 @@ class IssuableBaseService < BaseService end.compact end + def labels_service + @labels_service ||= ::Labels::AvailableLabelsService.new(current_user, parent, params) + end + def process_label_ids(attributes, existing_label_ids: nil) label_ids = attributes.delete(:label_ids) add_label_ids = attributes.delete(:add_label_ids) @@ -118,10 +126,6 @@ class IssuableBaseService < BaseService new_label_ids end - def available_labels - @available_labels ||= LabelsFinder.new(current_user, project_id: @project.id, include_ancestor_groups: true).execute - end - def handle_quick_actions_on_create(issuable) merge_quick_actions_into_params!(issuable) end diff --git a/app/services/labels/available_labels_service.rb b/app/services/labels/available_labels_service.rb new file mode 100644 index 00000000000..fe477d96970 --- /dev/null +++ b/app/services/labels/available_labels_service.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true +module Labels + class AvailableLabelsService + attr_reader :current_user, :parent, :params + + def initialize(current_user, parent, params) + @current_user = current_user + @parent = parent + @params = params + end + + def find_or_create_by_titles + labels = params.delete(:labels) + + return [] unless labels + + labels = labels.split(',') if labels.is_a?(String) + + labels.map do |label_name| + label = Labels::FindOrCreateService.new( + current_user, + parent, + include_ancestor_groups: true, + title: label_name.strip, + available_labels: available_labels + ).execute + + label + end.compact + end + + def filter_labels_ids_in_param(key) + return [] if params[key].to_a.empty? + + # rubocop:disable CodeReuse/ActiveRecord + available_labels.by_ids(params[key]).pluck(:id) + # rubocop:enable CodeReuse/ActiveRecord + end + + private + + def available_labels + @available_labels ||= LabelsFinder.new(current_user, finder_params).execute + end + + def finder_params + params = { include_ancestor_groups: true } + + case parent + when Group + params[:group_id] = parent.id + params[:only_group_labels] = true + when Project + params[:project_id] = parent.id + end + + params + end + end +end diff --git a/app/services/projects/detect_repository_languages_service.rb b/app/services/projects/detect_repository_languages_service.rb index 4a837a4fb6a..b020e4d9088 100644 --- a/app/services/projects/detect_repository_languages_service.rb +++ b/app/services/projects/detect_repository_languages_service.rb @@ -2,7 +2,7 @@ module Projects class DetectRepositoryLanguagesService < BaseService - attr_reader :detected_repository_languages, :programming_languages + attr_reader :programming_languages # rubocop: disable CodeReuse/ActiveRecord def execute @@ -25,6 +25,8 @@ module Projects RepositoryLanguage.table_name, detection.insertions(matching_programming_languages) ) + + set_detected_repository_languages end project.repository_languages.reload @@ -56,5 +58,11 @@ module Projects retry end # rubocop: enable CodeReuse/ActiveRecord + + def set_detected_repository_languages + return if project.detected_repository_languages? + + project.update_column(:detected_repository_languages, true) + end end end diff --git a/app/services/projects/repository_languages_service.rb b/app/services/projects/repository_languages_service.rb new file mode 100644 index 00000000000..e75851c7da4 --- /dev/null +++ b/app/services/projects/repository_languages_service.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Projects + class RepositoryLanguagesService < BaseService + def execute + perform_language_detection unless project.detected_repository_languages? + persisted_repository_languages + end + + private + + def perform_language_detection + if persisted_repository_languages.blank? + ::DetectRepositoryLanguagesWorker.perform_async(project.id, current_user.id) + else + project.update_column(:detected_repository_languages, true) + end + end + + def persisted_repository_languages + project.repository_languages + end + end +end diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index 3a674da6e87..819d3c4ec76 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -80,8 +80,9 @@ #merge-requests{ data: { url: referenced_merge_requests_project_issue_path(@project, @issue) } } // This element is filled in using JavaScript. - #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } } - // This element is filled in using JavaScript. + - if can?(current_user, :download_code, @project) + #related-branches{ data: { url: related_branches_project_issue_path(@project, @issue) } } + // This element is filled in using JavaScript. .content-block.emoji-block.emoji-block-sticky .row diff --git a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml index 8181267184a..55c89f137c5 100644 --- a/app/views/projects/merge_requests/conflicts/_submit_form.html.haml +++ b/app/views/projects/merge_requests/conflicts/_submit_form.html.haml @@ -6,7 +6,7 @@ .form-group.row .col-md-4 %h4= _('Resolve conflicts on source branch') - .resolve-info + .resolve-info{ "v-pre": true } = translation.html_safe .col-md-8 %label.label-bold{ "for" => "commit-message" } diff --git a/app/views/projects/protected_branches/shared/_index.html.haml b/app/views/projects/protected_branches/shared/_index.html.haml index 4997770321e..539b184e5c2 100644 --- a/app/views/projects/protected_branches/shared/_index.html.haml +++ b/app/views/projects/protected_branches/shared/_index.html.haml @@ -12,7 +12,7 @@ %p By default, protected branches are designed to: %ul - %li prevent their creation, if not already created, from everybody except users who are allowed to merge + %li prevent their creation, if not already created, from everybody except Maintainers %li prevent pushes from everybody except Maintainers %li prevent <strong>anyone</strong> from force pushing to the branch %li prevent <strong>anyone</strong> from deleting the branch diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb index d27b5e62574..b31099bc670 100644 --- a/app/workers/project_cache_worker.rb +++ b/app/workers/project_cache_worker.rb @@ -27,6 +27,7 @@ class ProjectCacheWorker # rubocop: enable CodeReuse/ActiveRecord def update_statistics(project, statistics = []) + return if Gitlab::Database.read_only? return unless try_obtain_lease_for(project.id, :update_statistics) Rails.logger.info("Updating statistics for project #{project.id}") diff --git a/changelogs/unreleased/10095-job-getters.yml b/changelogs/unreleased/10095-job-getters.yml deleted file mode 100644 index f12fc8b26ec..00000000000 --- a/changelogs/unreleased/10095-job-getters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes EE differences for jobs/getters.js -merge_request: -author: -type: other diff --git a/changelogs/unreleased/10097-number-utils.yml b/changelogs/unreleased/10097-number-utils.yml deleted file mode 100644 index 417008f6539..00000000000 --- a/changelogs/unreleased/10097-number-utils.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moves EE util into the CE file -merge_request: 25680 -author: -type: other diff --git a/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml b/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml deleted file mode 100644 index 5c3b6833235..00000000000 --- a/changelogs/unreleased/13784-simple-masking-of-protected-variables-in-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for masking CI variables. -merge_request: 25293 -author: -type: added diff --git a/changelogs/unreleased/20084-update-the-spinner-component.yml b/changelogs/unreleased/20084-update-the-spinner-component.yml deleted file mode 100644 index c93648e4f54..00000000000 --- a/changelogs/unreleased/20084-update-the-spinner-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a spinner icon which is rendered using pure css -merge_request: 25186 -author: -type: changed diff --git a/changelogs/unreleased/24642-activity_service_optimization.yml b/changelogs/unreleased/24642-activity_service_optimization.yml deleted file mode 100644 index bdfa769959e..00000000000 --- a/changelogs/unreleased/24642-activity_service_optimization.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Optimize Redis usage in User::ActivityService -merge_request: 25005 -author: -type: performance diff --git a/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml b/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml deleted file mode 100644 index 8c5f05c3575..00000000000 --- a/changelogs/unreleased/27333-re-deploy-rollback-button-should-ask-for-confirmation-before-executing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Confirmation Modal to Rollback on Environment -merge_request: 25110 -author: -type: added diff --git a/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml b/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml deleted file mode 100644 index 27ad151cd06..00000000000 --- a/changelogs/unreleased/2802-security-add-public-internal-groups-as-members-to-your-project-idor.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Remove the possibility to share a project with a group that a user is not a member - of -merge_request: -author: -type: security diff --git a/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml b/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml deleted file mode 100644 index d0bb4225ce4..00000000000 --- a/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed "Copying comment with ordered list includes extraneous newlines" -merge_request: 25695 -author: -type: fixed diff --git a/changelogs/unreleased/34555-empty-state-for-starred-projects.yml b/changelogs/unreleased/34555-empty-state-for-starred-projects.yml deleted file mode 100644 index 926d3a2eecf..00000000000 --- a/changelogs/unreleased/34555-empty-state-for-starred-projects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve empty state for starred projects -merge_request: 25138 -author: -type: changed diff --git a/changelogs/unreleased/35638-move-language-setting-to-preferences.yml b/changelogs/unreleased/35638-move-language-setting-to-preferences.yml deleted file mode 100644 index d8658218676..00000000000 --- a/changelogs/unreleased/35638-move-language-setting-to-preferences.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move language setting to preferences -merge_request: 25427 -author: Fabian Schneider @fabsrc -type: changed diff --git a/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml b/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml deleted file mode 100644 index a470f917d53..00000000000 --- a/changelogs/unreleased/37673-minor-issue-with-apostrophe-single-quote-when-clicking-assign-to-me.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix username escaping when using assign to me for issues -merge_request: 24673 -author: -type: fixed diff --git a/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml b/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml deleted file mode 100644 index 758b97deb3b..00000000000 --- a/changelogs/unreleased/39010-add-left-margin-to-1st-time-contributor-badge.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add left margin to 1st time contributor badge -merge_request: 25216 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml b/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml deleted file mode 100644 index 1af49fb6a2c..00000000000 --- a/changelogs/unreleased/39676-wiki-api-problems-on-update-parameters-and-500-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Require only one parameter when updating a wiki' -merge_request: 25191 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/40396-sidekiq-in-process-group.yml b/changelogs/unreleased/40396-sidekiq-in-process-group.yml deleted file mode 100644 index e41557e20d0..00000000000 --- a/changelogs/unreleased/40396-sidekiq-in-process-group.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'sidekiq: terminate child processes at shutdown' -merge_request: 25669 -author: -type: added diff --git a/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml b/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml deleted file mode 100644 index 578c780e1a1..00000000000 --- a/changelogs/unreleased/40396-use-pgroups-for-background-jobs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'If chpst is available, make fron-source installations run sidekiq as a process group leader' -merge_request: 25654 -author: -type: other diff --git a/changelogs/unreleased/40795-set-project-name-on-fork-api.yml b/changelogs/unreleased/40795-set-project-name-on-fork-api.yml deleted file mode 100644 index 742184bbe1e..00000000000 --- a/changelogs/unreleased/40795-set-project-name-on-fork-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ability to set path and name for project on fork using API -merge_request: 25363 -author: -type: added diff --git a/changelogs/unreleased/41888-access-personal-snippets-by-api.yml b/changelogs/unreleased/41888-access-personal-snippets-by-api.yml deleted file mode 100644 index 3561a01ec5f..00000000000 --- a/changelogs/unreleased/41888-access-personal-snippets-by-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow all snippets to be accessed by API -merge_request: 25772 -author: -type: added diff --git a/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml b/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml deleted file mode 100644 index f2c4f88b746..00000000000 --- a/changelogs/unreleased/42086-project-fetch-statistics-api-http-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project fetch statistics -merge_request: 23596 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml b/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml deleted file mode 100644 index 1c739130fcc..00000000000 --- a/changelogs/unreleased/44740-api-to-verify-a-given-user-has-right-to-merge-a-given-mergerequest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose if the current user can merge a MR' -merge_request: 25207 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/45035-force-push-api.yml b/changelogs/unreleased/45035-force-push-api.yml deleted file mode 100644 index 05f5a36ac38..00000000000 --- a/changelogs/unreleased/45035-force-push-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Accept force option to overwrite branch on commit via API -merge_request: 25286 -author: -type: added diff --git a/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml b/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml deleted file mode 100644 index 64ab76a2b05..00000000000 --- a/changelogs/unreleased/45305-ci-status-icon-mismatch-on-merge-requests-page-and-the-mr-itself.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix pipeline status icon mismatch -merge_request: 25407 -author: -type: fixed diff --git a/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml b/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml deleted file mode 100644 index 541acdc56a7..00000000000 --- a/changelogs/unreleased/46464-improve-stop-pipeline-modal.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show pipeline ID, commit, and branch name on modal while stopping pipeline -merge_request: 25059 -author: -type: changed diff --git a/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml b/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml deleted file mode 100644 index d052a28ab51..00000000000 --- a/changelogs/unreleased/46750-ci-empty-environment-is-created-even-when-a-job-isn-t-run-when-manual.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sort Environments by Last Updated -merge_request: 25260 -author: -type: added diff --git a/changelogs/unreleased/47150-update-sshkey.yml b/changelogs/unreleased/47150-update-sshkey.yml deleted file mode 100644 index 342bdb1e2bc..00000000000 --- a/changelogs/unreleased/47150-update-sshkey.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix validation of certain ed25519 keys -merge_request: 25115 -author: Merlijn B. W. Wajer -type: fixed diff --git a/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml b/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml deleted file mode 100644 index e08d2a99369..00000000000 --- a/changelogs/unreleased/47869-jobs-tab-border-top-in-pipeline-s-page-is-1px-off.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Jobs tab border top in pipeline's page is 1px off -merge_request: 24878 -author: -type: fixed diff --git a/changelogs/unreleased/48324-enable-squash-message-on-fast-forward.yml b/changelogs/unreleased/48324-enable-squash-message-on-fast-forward.yml deleted file mode 100644 index 789ff4f9f89..00000000000 --- a/changelogs/unreleased/48324-enable-squash-message-on-fast-forward.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow modifying squash commit message for fast-forward only merge method -merge_request: 26017 -author: -type: fixed diff --git a/changelogs/unreleased/48798-keybinding-mr-diff.yml b/changelogs/unreleased/48798-keybinding-mr-diff.yml deleted file mode 100644 index 3ef3f07f27c..00000000000 --- a/changelogs/unreleased/48798-keybinding-mr-diff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Next/previous navigation between files in MR review -merge_request: 25355 -author: -type: added
\ No newline at end of file diff --git a/changelogs/unreleased/49397-move-files-in-ide.yml b/changelogs/unreleased/49397-move-files-in-ide.yml deleted file mode 100644 index 488091d383c..00000000000 --- a/changelogs/unreleased/49397-move-files-in-ide.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Move files in the Web IDE -merge_request: 25431 -author: -type: added diff --git a/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml b/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml deleted file mode 100644 index 8393cb9d282..00000000000 --- a/changelogs/unreleased/49502-gpg-signature-api-endpoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add API endpoint to get a commit's GPG signature -merge_request: 25032 -author: -type: added diff --git a/changelogs/unreleased/49663-branch-to-mr-connection.yml b/changelogs/unreleased/49663-branch-to-mr-connection.yml deleted file mode 100644 index d92ed6fd3bf..00000000000 --- a/changelogs/unreleased/49663-branch-to-mr-connection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Link to most recent MR from a branch -merge_request: 25689 -author: -type: added diff --git a/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml b/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml deleted file mode 100644 index 3c8b58f3001..00000000000 --- a/changelogs/unreleased/50006-expose-textcolor-from-public-labels-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose text_color for project and group labels' -merge_request: 25172 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml b/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml deleted file mode 100644 index 0188df7fce7..00000000000 --- a/changelogs/unreleased/50313-use-kaniko-to-build-containers-in-autodevops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use auto-build-image for build job in Auto-DevOps.gitlab-ci.yml -merge_request: 24279 -author: -type: changed diff --git a/changelogs/unreleased/50433-make-emoji-picker-bigger.yml b/changelogs/unreleased/50433-make-emoji-picker-bigger.yml deleted file mode 100644 index 8fcf41df09d..00000000000 --- a/changelogs/unreleased/50433-make-emoji-picker-bigger.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make emoji picker bigger -merge_request: 25187 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml b/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml deleted file mode 100644 index 76ea4149c56..00000000000 --- a/changelogs/unreleased/51819-show-feed-toggle-under-system-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for toggling discussion filter from notes section -merge_request: 25426 -author: -type: added diff --git a/changelogs/unreleased/51971-milestones-visibility.yml b/changelogs/unreleased/51971-milestones-visibility.yml deleted file mode 100644 index 818f0071e6c..00000000000 --- a/changelogs/unreleased/51971-milestones-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check if desired milestone for an issue is available -merge_request: -author: -type: security diff --git a/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml b/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml deleted file mode 100644 index 84062c6db91..00000000000 --- a/changelogs/unreleased/52198-timer-is-vertically-misaligned-for-delayed-jobs-in-pipeline-actions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Timer and action name aligned vertically for delayed jobs in pipeline actions' -merge_request: 25117 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/52424-goodbye-hipchat.yml b/changelogs/unreleased/52424-goodbye-hipchat.yml deleted file mode 100644 index 26dc904af5f..00000000000 --- a/changelogs/unreleased/52424-goodbye-hipchat.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove HipChat integration from GitLab -merge_request: 22223 -author: -type: removed diff --git a/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml b/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml deleted file mode 100644 index 816fee1ccfc..00000000000 --- a/changelogs/unreleased/52459-display-job-names-consistently-on-pipelines-and-environments-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display job names consistently on pipelines and environments list -merge_request: 24984 -author: -type: fixed diff --git a/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml b/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml deleted file mode 100644 index 9329e81eb83..00000000000 --- a/changelogs/unreleased/52734-styling-of-user-project-and-group-avatars.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add rectangular project and group avatars -merge_request: 25098 -author: -type: other diff --git a/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml b/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml deleted file mode 100644 index 7fa01e2835a..00000000000 --- a/changelogs/unreleased/52778-don-t-display-pipeline-status-if-pipelines-are-disabled.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide pipeline status when pipelines are disabled on project. -merge_request: 25204 -author: -type: fixed diff --git a/changelogs/unreleased/52792-align-mirror-repository-button.yml b/changelogs/unreleased/52792-align-mirror-repository-button.yml deleted file mode 100644 index e8ce9ee0a4e..00000000000 --- a/changelogs/unreleased/52792-align-mirror-repository-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add right padding to the repository mirror action buttons -merge_request: 25606 -author: -type: fixed diff --git a/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml b/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml deleted file mode 100644 index 13529348c60..00000000000 --- a/changelogs/unreleased/52877-ios-publishing-blog-post-and-gitlab-ci-yml-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add iOS-fastlane template for .gitlab-ci.yml -merge_request: 25395 -author: -type: changed diff --git a/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml b/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml deleted file mode 100644 index e0ed38fc2fa..00000000000 --- a/changelogs/unreleased/53325-admin-runners-page-fails-with-an-sql-statement-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use limited counter for runner build count in admin page. -merge_request: 25220 -author: -type: fixed diff --git a/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml b/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml deleted file mode 100644 index 65439f5a6c2..00000000000 --- a/changelogs/unreleased/53336-improve-web-ide-launch-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve Web IDE launch performance -merge_request: 25700 -author: -type: performance diff --git a/changelogs/unreleased/53361-fresh-protected-branches.yml b/changelogs/unreleased/53361-fresh-protected-branches.yml deleted file mode 100644 index 55080e719b7..00000000000 --- a/changelogs/unreleased/53361-fresh-protected-branches.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow creation of branches that match a wildcard protection, except directly through git -merge_request: 24969 -author: -type: added diff --git a/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml b/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml deleted file mode 100644 index 32cca07f58d..00000000000 --- a/changelogs/unreleased/53411-remove_personal_access_tokens_token.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove undigested token column from personal_access_tokens table from the database -merge_request: 22743 -author: -type: changed diff --git a/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml b/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml deleted file mode 100644 index c460760c10b..00000000000 --- a/changelogs/unreleased/53413-externalize-markdown-toolbar-tooltips.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize markdown toolbar buttons tooltips -merge_request: 25529 -author: -type: fixed diff --git a/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml b/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml deleted file mode 100644 index 6c621763e2e..00000000000 --- a/changelogs/unreleased/53861-api-promote-project-milestone-to-a-group-milestone.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Promote project milestone to a group milestone' -merge_request: 25203 -author: Nermin Vehabovic -type: added diff --git a/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml b/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml deleted file mode 100644 index 556a238ff7d..00000000000 --- a/changelogs/unreleased/53966-make-hashed-storage-migration-safer-and-more-inviting.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hashed Storage rollback mechanism -merge_request: 23955 -author: -type: added diff --git a/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml b/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml deleted file mode 100644 index f7f8e4d0e1f..00000000000 --- a/changelogs/unreleased/54643-lower_issuable_finder_complexity.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Speed up group issue search counts -merge_request: 25411 -author: -type: performance diff --git a/changelogs/unreleased/54725-fix-emoji-button-active-state.yml b/changelogs/unreleased/54725-fix-emoji-button-active-state.yml deleted file mode 100644 index 4f0a436cc87..00000000000 --- a/changelogs/unreleased/54725-fix-emoji-button-active-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix hover and active state colors of award emoji button -merge_request: 25295 -author: -type: fixed diff --git a/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml b/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml deleted file mode 100644 index 92b27f63f82..00000000000 --- a/changelogs/unreleased/54796-api-sort-tie-breaker-for-pagination.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Sort tie breaker with id DESC' -merge_request: 25311 -author: Nermin Vehabovic -type: changed diff --git a/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml b/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml deleted file mode 100644 index 41761213d7b..00000000000 --- a/changelogs/unreleased/54850-pages-domain-show-view-is-not-protected-by-access-control.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Require maintainer access to show pages domain settings -merge_request: 24926 -author: -type: fixed diff --git a/changelogs/unreleased/54924-refactor-notes-actions-params.yml b/changelogs/unreleased/54924-refactor-notes-actions-params.yml deleted file mode 100644 index b6083820401..00000000000 --- a/changelogs/unreleased/54924-refactor-notes-actions-params.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix commenting on commits having SHA1 starting with a large number -merge_request: 25278 -author: -type: fixed diff --git a/changelogs/unreleased/55057-system-message-to-core.yml b/changelogs/unreleased/55057-system-message-to-core.yml deleted file mode 100644 index 3381879eb4a..00000000000 --- a/changelogs/unreleased/55057-system-message-to-core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Port System Header and Footer feature to Core -merge_request: 25241 -author: -type: added diff --git a/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml b/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml deleted file mode 100644 index c58cdc19555..00000000000 --- a/changelogs/unreleased/55109-jira-integration-api-doesn-t-respect-available-format.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Support Jira transition ID as string' -merge_request: 24400 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml b/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml deleted file mode 100644 index 44ea4141632..00000000000 --- a/changelogs/unreleased/55209-tool-tip-hides-menu-item.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Close More Actions tooltip when menu opens -merge_request: 24285 -author: -type: fixed diff --git a/changelogs/unreleased/55312-svg.yml b/changelogs/unreleased/55312-svg.yml deleted file mode 100644 index a6260aeaf2a..00000000000 --- a/changelogs/unreleased/55312-svg.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use export-import svgs from gitlab-svgs -merge_request: 24954 -author: -type: other diff --git a/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml b/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml deleted file mode 100644 index d2f24d6f499..00000000000 --- a/changelogs/unreleased/55376-related_merge_requests-api-call-returns-merge-requests-that-are-not-related-to-the-issue.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Ensure that related merge requests are referenced cross-project' -merge_request: 25222 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/55447-validate-k8s-ca-cert.yml b/changelogs/unreleased/55447-validate-k8s-ca-cert.yml deleted file mode 100644 index e0448d403da..00000000000 --- a/changelogs/unreleased/55447-validate-k8s-ca-cert.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate kubernetes cluster CA certificate -merge_request: 24990 -author: -type: changed diff --git a/changelogs/unreleased/55703-md-image-borders.yml b/changelogs/unreleased/55703-md-image-borders.yml deleted file mode 100644 index 94297a42f6d..00000000000 --- a/changelogs/unreleased/55703-md-image-borders.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only show borders for markdown images in notes -merge_request: 25448 -author: -type: fixed diff --git a/changelogs/unreleased/55893-artifacts-download.yml b/changelogs/unreleased/55893-artifacts-download.yml deleted file mode 100644 index 30c118b7094..00000000000 --- a/changelogs/unreleased/55893-artifacts-download.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes not working dropdowns in pipelines page -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml b/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml deleted file mode 100644 index ef3d9844acb..00000000000 --- a/changelogs/unreleased/55925-if-there-is-only-one-changed-page-in-review-app-go-directly-there.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Review App Link to Changed Page if Only One Change Present -merge_request: 25048 -author: -type: changed diff --git a/changelogs/unreleased/56237-api-truncated-commit-title.yml b/changelogs/unreleased/56237-api-truncated-commit-title.yml deleted file mode 100644 index 1a48d0fda1b..00000000000 --- a/changelogs/unreleased/56237-api-truncated-commit-title.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Expose full commit title' -merge_request: 25189 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml b/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml deleted file mode 100644 index bedc488ebd4..00000000000 --- a/changelogs/unreleased/56251-fix-issue-board-weekday-shift.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix weekday shift in issue board cards for UTC+X timezones by removing local timezone to UTC conversion" -merge_request: 25512 -author: Elias Werberich -type: fixed diff --git a/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml b/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml deleted file mode 100644 index 7febe175faf..00000000000 --- a/changelogs/unreleased/56477-units-are-appended-to-y-axis-label-on-metrics-dashboard.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicate units from metrics graph -merge_request: 25485 -author: -type: fixed diff --git a/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml b/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml deleted file mode 100644 index 5362ac65038..00000000000 --- a/changelogs/unreleased/56485-implement-graphql-mergerequestsresolver.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add field mergeRequests for project in GraphQL -merge_request: 24805 -author: -type: added diff --git a/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml b/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml deleted file mode 100644 index 9b7aed82d49..00000000000 --- a/changelogs/unreleased/56492-implement-new-arguments-state-closed_before-and-closed_after-for-issuesresolver-in-graphql.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Implement new arguments `state`, `closed_before` and `closed_after` for `IssuesResolver` in GraphQL" -merge_request: 24910 -author: -type: changed diff --git a/changelogs/unreleased/56618-hashed-storage-skip-validation.yml b/changelogs/unreleased/56618-hashed-storage-skip-validation.yml deleted file mode 100644 index c6b32d0bfec..00000000000 --- a/changelogs/unreleased/56618-hashed-storage-skip-validation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Skip Project validation during Hashed Storage migration or rollback -merge_request: 25753 -author: -type: fixed diff --git a/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml b/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml deleted file mode 100644 index ae2d9e18e0b..00000000000 --- a/changelogs/unreleased/56694-mark-group-level-labels-in-label-api-as-such.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Indicate if label is a project label' -merge_request: 25219 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml b/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml deleted file mode 100644 index 3eb9e484647..00000000000 --- a/changelogs/unreleased/56726-fix-n-1-in-issues-and-merge-requests-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix N+1 query in Issues and MergeRequest API when issuable_metadata is present -merge_request: 25042 -author: Alex Koval -type: other diff --git a/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml b/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml deleted file mode 100644 index cc3a60479d3..00000000000 --- a/changelogs/unreleased/56787-realtime-validation-for-user-fullname-and-username.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add realtime validation for user fullname and username on validation -merge_request: 25017 -author: Ehsan Abdulqader @EhsanZ -type: added diff --git a/changelogs/unreleased/56809-graphql-version-api.yml b/changelogs/unreleased/56809-graphql-version-api.yml deleted file mode 100644 index 72a4b4e5819..00000000000 --- a/changelogs/unreleased/56809-graphql-version-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add metadata about the GitLab server to GraphQL -merge_request: 24636 -author: -type: added diff --git a/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml b/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml deleted file mode 100644 index 5b9253793be..00000000000 --- a/changelogs/unreleased/56851-blank-values-in-reactive-cache.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow empty values such as [] to be stored in reactive cache -merge_request: 25283 -author: -type: fixed diff --git a/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml b/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml deleted file mode 100644 index ff4aebb9381..00000000000 --- a/changelogs/unreleased/56851-error-tracking-page-seems-broken.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error tracking list page -merge_request: 24806 -author: -type: fixed diff --git a/changelogs/unreleased/56863-system-messages-in-email.yml b/changelogs/unreleased/56863-system-messages-in-email.yml deleted file mode 100644 index 21a90aa95ee..00000000000 --- a/changelogs/unreleased/56863-system-messages-in-email.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show header and footer system messages in email -merge_request: 25474 -author: -type: added diff --git a/changelogs/unreleased/56871-list-issues-error.yml b/changelogs/unreleased/56871-list-issues-error.yml deleted file mode 100644 index af5585c6b5d..00000000000 --- a/changelogs/unreleased/56871-list-issues-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display error message when API call to list Sentry issues fails -merge_request: 24936 -author: -type: fixed diff --git a/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml b/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml deleted file mode 100644 index a7af8994852..00000000000 --- a/changelogs/unreleased/56873-only-load-syntax-highlighting-css-when-selected.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only load syntax highlight CSS of selected theme -merge_request: 25232 -author: -type: performance diff --git a/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml b/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml deleted file mode 100644 index 11d93b34700..00000000000 --- a/changelogs/unreleased/56937-edit-knative-domain-after-it-has-been-deployed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes functions finder for upgraded Knative app -merge_request: 25067 -author: -type: fixed diff --git a/changelogs/unreleased/56937-edit-knative-domain.yml b/changelogs/unreleased/56937-edit-knative-domain.yml deleted file mode 100644 index 7147a4e06b1..00000000000 --- a/changelogs/unreleased/56937-edit-knative-domain.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Edit Knative domain after it has been deployed -merge_request: 25386 -author: -type: added diff --git a/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml b/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml deleted file mode 100644 index f86c77d0e24..00000000000 --- a/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable timeout on merge request merging poll -merge_request: 25988 -author: -type: fixed diff --git a/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml b/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml deleted file mode 100644 index 1d07666dfb1..00000000000 --- a/changelogs/unreleased/57085-introduce-zoom-and-scroll-functionality-on-metrics-charts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add zoom and scroll to metrics dashboard -merge_request: 25388 -author: -type: added diff --git a/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml b/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml deleted file mode 100644 index 2e0ae9c3732..00000000000 --- a/changelogs/unreleased/57101-api-docs-for-hangouts-chat-service-incorrect.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'API: Fix docs and parameters for hangouts-chat service' -merge_request: 25180 -author: Robert Schilling -type: fixed diff --git a/changelogs/unreleased/57223-wiki-finder.yml b/changelogs/unreleased/57223-wiki-finder.yml deleted file mode 100644 index 5ddf197568d..00000000000 --- a/changelogs/unreleased/57223-wiki-finder.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove BATCH_SIZE from WikiFileFinder -merge_request: 24933 -author: -type: other diff --git a/changelogs/unreleased/57330-fix-comment-edited.yml b/changelogs/unreleased/57330-fix-comment-edited.yml deleted file mode 100644 index 68cf6c03d4c..00000000000 --- a/changelogs/unreleased/57330-fix-comment-edited.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix notes being marked as edited after resolving -merge_request: 26143 -author: -type: fixed diff --git a/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml b/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml deleted file mode 100644 index 46f82afda62..00000000000 --- a/changelogs/unreleased/57353-git-push-fails-on-large-lfs-files-where-the-push-take-a-long-time.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provide expires_in in LFS authentication payload -merge_request: 25082 -author: -type: fixed diff --git a/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml b/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml deleted file mode 100644 index 6be6a2115b9..00000000000 --- a/changelogs/unreleased/57410-api-create-release-link-with-ftp-address-return-400-bad-request.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for FTP assets for releases -merge_request: 25071 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/57534_filter_impersonated_sessions.yml b/changelogs/unreleased/57534_filter_impersonated_sessions.yml deleted file mode 100644 index 80aea0ab1bc..00000000000 --- a/changelogs/unreleased/57534_filter_impersonated_sessions.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Do not display impersonated sessions under active sessions and remove ability - to revoke session -merge_request: -author: -type: security diff --git a/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml b/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml deleted file mode 100644 index 9d9158ca4af..00000000000 --- a/changelogs/unreleased/57544-web-ide-new-directory-dialog-shows-file-templates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not show file templates when creating a new directory in WebIDE -merge_request: !25119 -author: -type: fixed diff --git a/changelogs/unreleased/57564-contributing-button-border.yml b/changelogs/unreleased/57564-contributing-button-border.yml deleted file mode 100644 index e5875ef1c0f..00000000000 --- a/changelogs/unreleased/57564-contributing-button-border.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix the border style of CONTRIBUTING button when it exists -merge_request: 25124 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml b/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml deleted file mode 100644 index f7d6a6c4863..00000000000 --- a/changelogs/unreleased/57579-gitlab-project-import-fails-sidekiq-undefined-method-import_jid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix import_jid error on project import -merge_request: 25239 -author: -type: fixed diff --git a/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml b/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml deleted file mode 100644 index 5681309cb9e..00000000000 --- a/changelogs/unreleased/57582-dropdown-icon-misalignment-on-issues-list-on-mobile-screen.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix alignment of dropdown icon on issuable on mobile -merge_request: 25205 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml b/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml deleted file mode 100644 index 0d5cd057ade..00000000000 --- a/changelogs/unreleased/57612-github-importer-ignores-milestone-due_date.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Capture due date when importing milestones from Github -merge_request: 25182 -author: dstanley -type: changed diff --git a/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml b/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml deleted file mode 100644 index d89819eee60..00000000000 --- a/changelogs/unreleased/57671-fix_merge_request_base_pipeline.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ensure the base pipeline of a Merge Request belongs to its target branch -merge_request: 25226 -author: -type: fixed diff --git a/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml b/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml deleted file mode 100644 index 6fb198e1552..00000000000 --- a/changelogs/unreleased/57712-project-import-error-user-expected-got-hash.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project import error importing releases -merge_request: 25495 -author: -type: fixed diff --git a/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml b/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml deleted file mode 100644 index 781446b86d7..00000000000 --- a/changelogs/unreleased/57734-improve-label-dropdown-selection-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve label select rendering -merge_request: 25281 -author: -type: performance diff --git a/changelogs/unreleased/57768-remove-vertical-line.yml b/changelogs/unreleased/57768-remove-vertical-line.yml deleted file mode 100644 index b73b0fa229e..00000000000 --- a/changelogs/unreleased/57768-remove-vertical-line.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove vertical connecting line placeholder from diff discussion notes -merge_request: 25292 -author: -type: fixed diff --git a/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml b/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml deleted file mode 100644 index 2775d9f4e36..00000000000 --- a/changelogs/unreleased/57784-make-closed-duplicate-and-closed-moved-button-a-link-to-target.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Link from Closed (moved) Issues to Moved Issue -merge_request: 25300 -author: -type: added diff --git a/changelogs/unreleased/57785-create-project-template-for-netlify.yml b/changelogs/unreleased/57785-create-project-template-for-netlify.yml deleted file mode 100644 index 78e9e3dece5..00000000000 --- a/changelogs/unreleased/57785-create-project-template-for-netlify.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Create Project Template for Netlify -merge_request: 25453 -author: -type: changed diff --git a/changelogs/unreleased/57788-project-labels-tooltip-missing.yml b/changelogs/unreleased/57788-project-labels-tooltip-missing.yml deleted file mode 100644 index 9146af0e0f3..00000000000 --- a/changelogs/unreleased/57788-project-labels-tooltip-missing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug where project topics truncate -merge_request: 25398 -author: -type: fixed diff --git a/changelogs/unreleased/57794-project-template-for-net.yml b/changelogs/unreleased/57794-project-template-for-net.yml deleted file mode 100644 index bc05ac10aff..00000000000 --- a/changelogs/unreleased/57794-project-template-for-net.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Project template for .NET Core -merge_request: 25486 -author: -type: changed diff --git a/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml b/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml deleted file mode 100644 index b4b305e76d0..00000000000 --- a/changelogs/unreleased/57829-issuable-meta-line-ui-broken-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix author layouts in issuable meta line UIs on mobile -merge_request: 25332 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml b/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml deleted file mode 100644 index 046ef8ee99e..00000000000 --- a/changelogs/unreleased/57905-etag-caching-probably-broken-since-11-5-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix ETag caching not being used for AJAX requests -merge_request: 25400 -author: -type: fixed diff --git a/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml b/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml deleted file mode 100644 index 2e18377a4cf..00000000000 --- a/changelogs/unreleased/57991-frontend-pagination-needs-to-handle-cases-where-the-x-total-pages-header-isn-t-present.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Improve the JS pagination to handle the case when the `X-Total` and `X-Total-Pages` headers aren't present" -merge_request: 25601 -author: -type: fixed diff --git a/changelogs/unreleased/58010-mask-the-existing-variables.yml b/changelogs/unreleased/58010-mask-the-existing-variables.yml deleted file mode 100644 index cc5fdb29686..00000000000 --- a/changelogs/unreleased/58010-mask-the-existing-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Mask all TOKEN and PASSWORD CI variables. -merge_request: 25868 -author: -type: changed diff --git a/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml b/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml deleted file mode 100644 index 7cfeb4a0cd7..00000000000 --- a/changelogs/unreleased/58020-fix-merge-api-endpoint-param.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Respect the should_remove_source_branch parameter to the merge API -merge_request: 25525 -author: -type: fixed diff --git a/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml b/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml deleted file mode 100644 index 69d927dc5e4..00000000000 --- a/changelogs/unreleased/58023-add-Saturday-to-localization-first-day-of-the-week.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Saturday to Localization first day of the week -merge_request: 25509 -author: Ahmad Haghighi -type: added diff --git a/changelogs/unreleased/58082-project-template-for-go-micro.yml b/changelogs/unreleased/58082-project-template-for-go-micro.yml deleted file mode 100644 index 63a70cda0b8..00000000000 --- a/changelogs/unreleased/58082-project-template-for-go-micro.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Project template for go-micro -merge_request: 25553 -author: -type: changed diff --git a/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml b/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml deleted file mode 100644 index a7a87f60c28..00000000000 --- a/changelogs/unreleased/58098-auto-devops-postgres-version-variable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow configuring POSTGRES_VERSION in Auto DevOps -merge_request: 25500 -author: -type: added diff --git a/changelogs/unreleased/58149-fix-read-list-board-policy.yml b/changelogs/unreleased/58149-fix-read-list-board-policy.yml deleted file mode 100644 index 964813f4c9a..00000000000 --- a/changelogs/unreleased/58149-fix-read-list-board-policy.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix error when viewing group issue boards when user doesn't have explicit group - permissions -merge_request: 25524 -author: -type: fixed diff --git a/changelogs/unreleased/58274-folder-icon-in-tags-page.yml b/changelogs/unreleased/58274-folder-icon-in-tags-page.yml deleted file mode 100644 index db8128b8dfd..00000000000 --- a/changelogs/unreleased/58274-folder-icon-in-tags-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use 'folder-open' from sprite icons for Browse Files button in Tag page -merge_request: 25635 -author: -type: fixed diff --git a/changelogs/unreleased/58369-hide-squash-commit.yml b/changelogs/unreleased/58369-hide-squash-commit.yml deleted file mode 100644 index e44b483b3a1..00000000000 --- a/changelogs/unreleased/58369-hide-squash-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve showing squash commit edit issue when only single commit is present -merge_request: 25807 -author: -type: fixed diff --git a/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml b/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml deleted file mode 100644 index b81dc151b44..00000000000 --- a/changelogs/unreleased/58570-fix-running-pipline-that-is-imported-via-dotnetcore-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clean up vendored templates -merge_request: 25794 -author: -type: changed diff --git a/changelogs/unreleased/58648-project-template-for-ios.yml b/changelogs/unreleased/58648-project-template-for-ios.yml deleted file mode 100644 index 708ecb4d3dc..00000000000 --- a/changelogs/unreleased/58648-project-template-for-ios.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add iOS project template -merge_request: 25872 -author: -type: changed diff --git a/changelogs/unreleased/58649-project-template-for-android.yml b/changelogs/unreleased/58649-project-template-for-android.yml deleted file mode 100644 index 130992272ec..00000000000 --- a/changelogs/unreleased/58649-project-template-for-android.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project template for Android -merge_request: 25870 -author: -type: changed diff --git a/changelogs/unreleased/59208-fix-error-500-on-every-page-when-active-broadcast-message-present-after-upgrading-to-11-9-0.yml b/changelogs/unreleased/59208-fix-error-500-on-every-page-when-active-broadcast-message-present-after-upgrading-to-11-9-0.yml deleted file mode 100644 index 3c9feae5a04..00000000000 --- a/changelogs/unreleased/59208-fix-error-500-on-every-page-when-active-broadcast-message-present-after-upgrading-to-11-9-0.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Gracefully handles excluded fields from attributes during serialization on - JsonCache -merge_request: 26368 -author: -type: fixed diff --git a/changelogs/unreleased/8711-prep-frontend-single-repo.yml b/changelogs/unreleased/8711-prep-frontend-single-repo.yml deleted file mode 100644 index 9c16e16a84b..00000000000 --- a/changelogs/unreleased/8711-prep-frontend-single-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates a helper function to check if repo is EE -merge_request: 25647 -author: -type: other diff --git a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml b/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml deleted file mode 100644 index c014edf9c09..00000000000 --- a/changelogs/unreleased/9841-geo-unable-to-compare-branches-on-secondary.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow users to compare branches on a read-only instance -merge_request: 25414 -author: -type: fixed diff --git a/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml b/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml deleted file mode 100644 index 39d7ead9af4..00000000000 --- a/changelogs/unreleased/add-project-level-config-for-prospective-merge-pipelines-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project level config for merge pipelines -merge_request: 25385 -author: -type: added diff --git a/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml b/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml deleted file mode 100644 index 7438053a84f..00000000000 --- a/changelogs/unreleased/add-related-merge-request-count-to-api-response.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add related merge request count to api response -merge_request: 24974 -author: -type: added diff --git a/changelogs/unreleased/add-title-attribute-to-file-row.yml b/changelogs/unreleased/add-title-attribute-to-file-row.yml deleted file mode 100644 index c68d3d544e7..00000000000 --- a/changelogs/unreleased/add-title-attribute-to-file-row.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: add title attribute to display file name -merge_request: 25154 -author: Satoshi Nakamatsu @satoshicano -type: added diff --git a/changelogs/unreleased/add-youtrack-integration.yml b/changelogs/unreleased/add-youtrack-integration.yml deleted file mode 100644 index f500e625145..00000000000 --- a/changelogs/unreleased/add-youtrack-integration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add YouTrack integration service -merge_request: 25361 -author: Yauhen Kotau @bessorion -type: added diff --git a/changelogs/unreleased/add_ldap_tls_options.yml b/changelogs/unreleased/add_ldap_tls_options.yml deleted file mode 100644 index c3678cb8fb6..00000000000 --- a/changelogs/unreleased/add_ldap_tls_options.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow raw `tls_options` to be passed in LDAP configuration -merge_request: 20678 -author: -type: changed diff --git a/changelogs/unreleased/allow-maintainers-to-remove-pages.yml b/changelogs/unreleased/allow-maintainers-to-remove-pages.yml deleted file mode 100644 index 6e344dbe0e9..00000000000 --- a/changelogs/unreleased/allow-maintainers-to-remove-pages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow maintainers to remove pages -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/allow-to-recursively-include.yml b/changelogs/unreleased/allow-to-recursively-include.yml deleted file mode 100644 index edfbfcb0146..00000000000 --- a/changelogs/unreleased/allow-to-recursively-include.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow to recursively expand includes -merge_request: 24356 -author: -type: added diff --git a/changelogs/unreleased/an-peek-jaeger.yml b/changelogs/unreleased/an-peek-jaeger.yml deleted file mode 100644 index 8659ee4f9e0..00000000000 --- a/changelogs/unreleased/an-peek-jaeger.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provide a performance bar link to the Jaeger UI -merge_request: 24902 -author: -type: other diff --git a/changelogs/unreleased/auto-devops-tags.yml b/changelogs/unreleased/auto-devops-tags.yml deleted file mode 100644 index 1b96d457776..00000000000 --- a/changelogs/unreleased/auto-devops-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds Auto DevOps build job for tags -merge_request: 25718 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/bvl-graphql-csrf.yml b/changelogs/unreleased/bvl-graphql-csrf.yml deleted file mode 100644 index d1e5b56c751..00000000000 --- a/changelogs/unreleased/bvl-graphql-csrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow GraphQL requests without CSRF token -merge_request: 25719 -author: -type: fixed diff --git a/changelogs/unreleased/change-badges-example-to-pipeline.yml b/changelogs/unreleased/change-badges-example-to-pipeline.yml deleted file mode 100644 index 8ed4d77fd6c..00000000000 --- a/changelogs/unreleased/change-badges-example-to-pipeline.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change badges.svg example to pipeline.svg -merge_request: 25157 -author: Aviad Levy -type: fixed diff --git a/changelogs/unreleased/changelogs-readme.yml b/changelogs/unreleased/changelogs-readme.yml deleted file mode 100644 index 9f391699575..00000000000 --- a/changelogs/unreleased/changelogs-readme.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: add readme to changelogs directory -merge_request: 25209 -author: "@glensc" -type: added diff --git a/changelogs/unreleased/consistent-pagination.yml b/changelogs/unreleased/consistent-pagination.yml deleted file mode 100644 index 95eefaeb31d..00000000000 --- a/changelogs/unreleased/consistent-pagination.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix inconsistent pagination styles -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/deprecated-migration-inheritance.yml b/changelogs/unreleased/deprecated-migration-inheritance.yml deleted file mode 100644 index 814c511195b..00000000000 --- a/changelogs/unreleased/deprecated-migration-inheritance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Directly inheriting from ActiveRecord::Migration is deprecated -merge_request: 25066 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/diff-tree-resizable.yml b/changelogs/unreleased/diff-tree-resizable.yml deleted file mode 100644 index 7411640aea5..00000000000 --- a/changelogs/unreleased/diff-tree-resizable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make file tree in merge requests resizable -merge_request: -author: -type: added diff --git a/changelogs/unreleased/disallow-guests-to-access-releases.yml b/changelogs/unreleased/disallow-guests-to-access-releases.yml new file mode 100644 index 00000000000..f2d518108d2 --- /dev/null +++ b/changelogs/unreleased/disallow-guests-to-access-releases.yml @@ -0,0 +1,5 @@ +--- +title: Disallow guest users from accessing Releases +merge_request: +author: +type: security diff --git a/changelogs/unreleased/dz-sort-labels-alphabetically.yml b/changelogs/unreleased/dz-sort-labels-alphabetically.yml deleted file mode 100644 index acfde3de999..00000000000 --- a/changelogs/unreleased/dz-sort-labels-alphabetically.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sort labels alphabetically on issues and merge requests list -merge_request: 25470 -author: -type: changed diff --git a/changelogs/unreleased/enable-markup-highlighting.yml b/changelogs/unreleased/enable-markup-highlighting.yml deleted file mode 100644 index 33fcf784f7d..00000000000 --- a/changelogs/unreleased/enable-markup-highlighting.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable syntax highlighting to other supported markups -merge_request: 25761 -author: -type: other diff --git a/changelogs/unreleased/expand-diff-to-full-file.yml b/changelogs/unreleased/expand-diff-to-full-file.yml deleted file mode 100644 index f41a6be22e8..00000000000 --- a/changelogs/unreleased/expand-diff-to-full-file.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow expanding a diff to display full file -merge_request: 24406 -author: -type: added diff --git a/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml b/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml deleted file mode 100644 index 399f60ef219..00000000000 --- a/changelogs/unreleased/expose-additional-merge-request-pipeline-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose additional merge request pipeline variables -merge_request: 24595 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/expose-merge-ref-to-runner.yml b/changelogs/unreleased/expose-merge-ref-to-runner.yml deleted file mode 100644 index 945f4f6e05a..00000000000 --- a/changelogs/unreleased/expose-merge-ref-to-runner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose refspecs and depth to runner -merge_request: 25233 -author: -type: added diff --git a/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml b/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml deleted file mode 100644 index e5cbc87ba24..00000000000 --- a/changelogs/unreleased/expose-merge-request-entity-for-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose merge request entity for pipelines -merge_request: 25679 -author: -type: added diff --git a/changelogs/unreleased/fast-destroy-uploads.yml b/changelogs/unreleased/fast-destroy-uploads.yml deleted file mode 100644 index ee3363a6ae9..00000000000 --- a/changelogs/unreleased/fast-destroy-uploads.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: File uploads are deleted asynchronously when deleting a project or group. -merge_request: -author: -type: added diff --git a/changelogs/unreleased/feature-api-delete-job-artifacts.yml b/changelogs/unreleased/feature-api-delete-job-artifacts.yml deleted file mode 100644 index ddbbe3c2650..00000000000 --- a/changelogs/unreleased/feature-api-delete-job-artifacts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extend the Gitlab API for deletion of job_artifacts of a single job. -merge_request: 25522 -author: rroger -type: added diff --git a/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml b/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml deleted file mode 100644 index ebb71f00c4b..00000000000 --- a/changelogs/unreleased/feature-gb-add-serverless-cicd-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Simplify CI/CD configuration on serverless projects -merge_request: 25523 -author: -type: added diff --git a/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml b/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml deleted file mode 100644 index ad92135d401..00000000000 --- a/changelogs/unreleased/feature-gb-enable-ci-persisted-stages-by-default.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable persisted pipeline stages by default -merge_request: 25347 -author: -type: performance diff --git a/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml b/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml deleted file mode 100644 index 86df4595e7b..00000000000 --- a/changelogs/unreleased/feature-runner-tag-filter-for-admin-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a tag filter to the admin runners view -merge_request: 19740 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/filter-confidential-issues.yml b/changelogs/unreleased/filter-confidential-issues.yml deleted file mode 100644 index 83f19a57aab..00000000000 --- a/changelogs/unreleased/filter-confidential-issues.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Ability to filter confidential issues -merge_request: 24960 -author: Robert Schilling -type: added diff --git a/changelogs/unreleased/filter-note-parameters.yml b/changelogs/unreleased/filter-note-parameters.yml deleted file mode 100644 index fca2a394820..00000000000 --- a/changelogs/unreleased/filter-note-parameters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include note in the Rails filter_parameters configuration -merge_request: 25238 -author: -type: other diff --git a/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml b/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml deleted file mode 100644 index af80a069fde..00000000000 --- a/changelogs/unreleased/fix-38010-sidebar-loads-and-collapses.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed navigation sidebar flashing open on page load -merge_request: 24555 -author: -type: fixed diff --git a/changelogs/unreleased/fix-badges-logs.yml b/changelogs/unreleased/fix-badges-logs.yml deleted file mode 100644 index 6236e7b046d..00000000000 --- a/changelogs/unreleased/fix-badges-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Doc - fix the url of pipeline status badge -merge_request: 25404 -author: Aviad Levy -type: fixed diff --git a/changelogs/unreleased/fix-blob-editor-deleting-content.yml b/changelogs/unreleased/fix-blob-editor-deleting-content.yml deleted file mode 100644 index d5b7bbc7b1c..00000000000 --- a/changelogs/unreleased/fix-blob-editor-deleting-content.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed blob editor deleting file content for certain file paths -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml b/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml deleted file mode 100644 index 8a98a39fdc2..00000000000 --- a/changelogs/unreleased/fix-gb-fix-bridge-jobs-variables-policy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bridge jobs only/except variables policy -merge_request: 25710 -author: -type: fixed diff --git a/changelogs/unreleased/fix-group-without-owner.yml b/changelogs/unreleased/fix-group-without-owner.yml deleted file mode 100644 index 884f1b3a08a..00000000000 --- a/changelogs/unreleased/fix-group-without-owner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: fix group without owner after transfer -merge_request: 25573 -author: Peter Marko -type: fixed diff --git a/changelogs/unreleased/fix-projects-partial-locals.yml b/changelogs/unreleased/fix-projects-partial-locals.yml deleted file mode 100644 index 7e2cc008105..00000000000 --- a/changelogs/unreleased/fix-projects-partial-locals.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix undefined variable error on json project views -merge_request: 26297 -author: -type: fixed diff --git a/changelogs/unreleased/fix_-56347.yml b/changelogs/unreleased/fix_-56347.yml deleted file mode 100644 index 1d03ed8864c..00000000000 --- a/changelogs/unreleased/fix_-56347.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix overlapping empty-header logo -merge_request: 24868 -author: Jonas L. -type: fixed diff --git a/changelogs/unreleased/fj-58804-fix-bitbucket-import.yml b/changelogs/unreleased/fj-58804-fix-bitbucket-import.yml deleted file mode 100644 index dc44c64a055..00000000000 --- a/changelogs/unreleased/fj-58804-fix-bitbucket-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug in BitBucket imports with SHA shorter than 40 chars -merge_request: 26050 -author: -type: fixed diff --git a/changelogs/unreleased/gitaly-version-v1.26.0.yml b/changelogs/unreleased/gitaly-version-v1.26.0.yml deleted file mode 100644 index cc91b13c3c1..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.26.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.26.0 -merge_request: 25890 -author: -type: changed diff --git a/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml b/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml deleted file mode 100644 index b8668d338de..00000000000 --- a/changelogs/unreleased/gitlab_kubernetes_helm_bump.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump Helm and kubectl used in Kubernetes integration to 2.12.3 and 1.11.7 respectively -merge_request: 25268 -author: -type: other diff --git a/changelogs/unreleased/gokhanap-master-patch-03762.yml b/changelogs/unreleased/gokhanap-master-patch-03762.yml deleted file mode 100644 index 22ab453e359..00000000000 --- a/changelogs/unreleased/gokhanap-master-patch-03762.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'commit page info-well overflow fix #56436' -merge_request: 24799 -author: Gokhan Apaydin -type: fixed diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml b/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml deleted file mode 100644 index 29dbf2367b7..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/commit` -merge_request: 24668 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/gt-update-activity-filter-for-issues.yml b/changelogs/unreleased/gt-update-activity-filter-for-issues.yml deleted file mode 100644 index f9be54ea8a9..00000000000 --- a/changelogs/unreleased/gt-update-activity-filter-for-issues.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update activity filter for issues -merge_request: 23423 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-update-new-password-breadcrumb.yml b/changelogs/unreleased/gt-update-new-password-breadcrumb.yml deleted file mode 100644 index 43ea2f0d44b..00000000000 --- a/changelogs/unreleased/gt-update-new-password-breadcrumb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update new password breadcrumb -merge_request: 25037 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml b/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml deleted file mode 100644 index f7b10ea5c17..00000000000 --- a/changelogs/unreleased/gt-update-operations-settings-breadcrumb-trail.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update operations settings breadcrumb trail -merge_request: 25539 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/helm-2-12-3.yml b/changelogs/unreleased/helm-2-12-3.yml deleted file mode 100644 index 0d0d904a9cb..00000000000 --- a/changelogs/unreleased/helm-2-12-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump Helm and kubectl in Auto DevOps to 2.12.3 and 1.11.7 respectively -merge_request: 25072 -author: -type: other diff --git a/changelogs/unreleased/import-go-to-project-cta.yml b/changelogs/unreleased/import-go-to-project-cta.yml deleted file mode 100644 index ae719f08790..00000000000 --- a/changelogs/unreleased/import-go-to-project-cta.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve GitHub and Gitea project import table UI -merge_request: 24606 -author: -type: other diff --git a/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml b/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml deleted file mode 100644 index 76ff15cba5b..00000000000 --- a/changelogs/unreleased/improve-performance-for-diverging-commit-counts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance for diverging commit counts -merge_request: 24287 -author: -type: performance diff --git a/changelogs/unreleased/improve-snippets-empty-state.yml b/changelogs/unreleased/improve-snippets-empty-state.yml deleted file mode 100644 index 9859243a81f..00000000000 --- a/changelogs/unreleased/improve-snippets-empty-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve snippets empty state -merge_request: 18348 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/include-ci-yaml.yml b/changelogs/unreleased/include-ci-yaml.yml deleted file mode 100644 index 5909950ef0b..00000000000 --- a/changelogs/unreleased/include-ci-yaml.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate 'include' keywords in gitlab-ci.yml configuration files. -merge_request: 24098 -author: Paul Bonaud -type: fixed diff --git a/changelogs/unreleased/ingress-hostnames.yml b/changelogs/unreleased/ingress-hostnames.yml deleted file mode 100644 index 66721113769..00000000000 --- a/changelogs/unreleased/ingress-hostnames.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added support for ingress hostnames -merge_request: 25181 -author: walkafwalka -type: added diff --git a/changelogs/unreleased/jc-fix-set-project-writable.yml b/changelogs/unreleased/jc-fix-set-project-writable.yml deleted file mode 100644 index 0bfd90c3967..00000000000 --- a/changelogs/unreleased/jc-fix-set-project-writable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix method to mark a project repository as writable -merge_request: 25546 -author: -type: fixed diff --git a/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml b/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml deleted file mode 100644 index ba882112f70..00000000000 --- a/changelogs/unreleased/jej-feature-gates-can-be-set-by-group-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow setting feature flags per GitLab group through the API -merge_request: 25022 -author: -type: added diff --git a/changelogs/unreleased/jira-link-mention-compact.yml b/changelogs/unreleased/jira-link-mention-compact.yml deleted file mode 100644 index f75f3ce183c..00000000000 --- a/changelogs/unreleased/jira-link-mention-compact.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Jira: make issue links title compact" -merge_request: 25609 -author: Elan Ruusamäe @glensc -type: changed diff --git a/changelogs/unreleased/kinolaev-master-patch-87865.yml b/changelogs/unreleased/kinolaev-master-patch-87865.yml deleted file mode 100644 index b4dbc2c0e1f..00000000000 --- a/changelogs/unreleased/kinolaev-master-patch-87865.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix rollout status for statefulsets and daemonsets -merge_request: 24972 -author: Sergej Nikolaev <kinolaev@gmail.com> -type: fixed diff --git a/changelogs/unreleased/modify_group_policy.yml b/changelogs/unreleased/modify_group_policy.yml deleted file mode 100644 index cd9fc340faa..00000000000 --- a/changelogs/unreleased/modify_group_policy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow project members to see private group if the project is in the group namespace -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/more-pgroup-fix.yml b/changelogs/unreleased/more-pgroup-fix.yml deleted file mode 100644 index 6e85205ccba..00000000000 --- a/changelogs/unreleased/more-pgroup-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix the last-ditch memory killer pgroup SIGKILL -merge_request: 25940 -author: -type: fixed diff --git a/changelogs/unreleased/move_chatops_to_core.yml b/changelogs/unreleased/move_chatops_to_core.yml deleted file mode 100644 index 7a75efedfa8..00000000000 --- a/changelogs/unreleased/move_chatops_to_core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move ChatOps to Core -merge_request: 24780 -author: -type: changed diff --git a/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml b/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml deleted file mode 100644 index 012b547a630..00000000000 --- a/changelogs/unreleased/osw-create-and-store-merge-ref-for-mrs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support merge ref writing (without merging to target branch) -merge_request: 24692 -author: -type: added diff --git a/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml b/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml deleted file mode 100644 index 4e01a13d781..00000000000 --- a/changelogs/unreleased/osw-fetch-latest-version-when-creating-suggestions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Always fetch MR latest version when creating suggestions -merge_request: 25441 -author: -type: fixed diff --git a/changelogs/unreleased/osw-merge-refs-refreshing-api.yml b/changelogs/unreleased/osw-merge-refs-refreshing-api.yml deleted file mode 100644 index 095600cd088..00000000000 --- a/changelogs/unreleased/osw-merge-refs-refreshing-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: API support for MR merge to temporary merge ref path -merge_request: 24918 -author: -type: added diff --git a/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml b/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml deleted file mode 100644 index dfccd6194d4..00000000000 --- a/changelogs/unreleased/osw-merge-to-ref-changes-for-ci-team.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make merge to refs/merge-requests/:iid/merge not raise when FF-only enabled -merge_request: 25653 -author: -type: fixed diff --git a/changelogs/unreleased/patch-45.yml b/changelogs/unreleased/patch-45.yml deleted file mode 100644 index 94fa1d29b32..00000000000 --- a/changelogs/unreleased/patch-45.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix incorrect Pages Domains checkbox description. -merge_request: 25392 -author: Anton Melser -type: other diff --git a/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml b/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml deleted file mode 100644 index 6957d156161..00000000000 --- a/changelogs/unreleased/persist-source-sha-and-target-sha-for-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Persist source sha and target sha for merge pipelines -merge_request: 25417 -author: -type: added diff --git a/changelogs/unreleased/ravlen-fix-spaces-unicode.yml b/changelogs/unreleased/ravlen-fix-spaces-unicode.yml deleted file mode 100644 index fbcbdc53cfe..00000000000 --- a/changelogs/unreleased/ravlen-fix-spaces-unicode.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correct non-standard unicode spaces to regular unicode -merge_request: 24795 -author: Marcel Amirault -type: other diff --git a/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml b/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml deleted file mode 100644 index 082075506c0..00000000000 --- a/changelogs/unreleased/refactor-56367-extract-resolve-with-issue-button-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extracted ResolveWithIssueButton to its own component -merge_request: 25093 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml b/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml deleted file mode 100644 index bf78f8d84a6..00000000000 --- a/changelogs/unreleased/refactor-merge-request-between-pipeline-and-build.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add suffix (`_event`) to merge request source -merge_request: 25508 -author: -type: other diff --git a/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml b/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml deleted file mode 100644 index 045fbbb48b7..00000000000 --- a/changelogs/unreleased/remove-second-primary-button-on-wiki-edit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove second primary button on wiki edit -merge_request: 19959 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/restrict-jupyter-login.yml b/changelogs/unreleased/restrict-jupyter-login.yml deleted file mode 100644 index 2c20ef3d7ac..00000000000 --- a/changelogs/unreleased/restrict-jupyter-login.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Project level filtering for JupyterHub -merge_request: 25684 -author: Amit Rathi (amit1rrr) -type: changed diff --git a/changelogs/unreleased/rs-admin-user-case-insensitive.yml b/changelogs/unreleased/rs-admin-user-case-insensitive.yml deleted file mode 100644 index 40398c46a1e..00000000000 --- a/changelogs/unreleased/rs-admin-user-case-insensitive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Admin section finds users case-insensitively -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/security-2774-milestones-detail.yml b/changelogs/unreleased/security-2774-milestones-detail.yml deleted file mode 100644 index faf56fee01e..00000000000 --- a/changelogs/unreleased/security-2774-milestones-detail.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display only information visible to current user on the Milestone page -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2797-milestone-mrs.yml b/changelogs/unreleased/security-2797-milestone-mrs.yml deleted file mode 100644 index 5bb104ec403..00000000000 --- a/changelogs/unreleased/security-2797-milestone-mrs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show only merge requests visible to user on milestone detail page -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2798-fix-boards-policy.yml b/changelogs/unreleased/security-2798-fix-boards-policy.yml deleted file mode 100644 index 10e8ac3a787..00000000000 --- a/changelogs/unreleased/security-2798-fix-boards-policy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable issue boards API when issues are disabled -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2799-emails.yml b/changelogs/unreleased/security-2799-emails.yml deleted file mode 100644 index dbf1207810e..00000000000 --- a/changelogs/unreleased/security-2799-emails.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't show new issue link after move when a user does not have permissions -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-2826-fix-project-serialization-in-quick-actions.yml b/changelogs/unreleased/security-2826-fix-project-serialization-in-quick-actions.yml deleted file mode 100644 index 272f8a95957..00000000000 --- a/changelogs/unreleased/security-2826-fix-project-serialization-in-quick-actions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove project serialization in quick actions response -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-50334.yml b/changelogs/unreleased/security-50334.yml deleted file mode 100644 index 828ef82b517..00000000000 --- a/changelogs/unreleased/security-50334.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix git clone revealing private repo's presence -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-55468-check-validity-before-querying.yml b/changelogs/unreleased/security-55468-check-validity-before-querying.yml deleted file mode 100644 index 8bb11a97f52..00000000000 --- a/changelogs/unreleased/security-55468-check-validity-before-querying.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix blind SSRF in Prometheus integration by checking URL before querying -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-56224.yml b/changelogs/unreleased/security-56224.yml new file mode 100644 index 00000000000..a4e274e6ca5 --- /dev/null +++ b/changelogs/unreleased/security-56224.yml @@ -0,0 +1,5 @@ +--- +title: Hide "related branches" when user does not have permission +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-56348.yml b/changelogs/unreleased/security-56348.yml deleted file mode 100644 index a289e4e9077..00000000000 --- a/changelogs/unreleased/security-56348.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check snippet attached file to be moved is within designated directory -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml b/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml new file mode 100644 index 00000000000..f92d2c0dcb1 --- /dev/null +++ b/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml @@ -0,0 +1,5 @@ +--- +title: Fix XSS in resolve conflicts form +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-commit-private-related-mr.yml b/changelogs/unreleased/security-commit-private-related-mr.yml deleted file mode 100644 index c4de200b0d8..00000000000 --- a/changelogs/unreleased/security-commit-private-related-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't allow non-members to see private related MRs. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-exif-migration.yml b/changelogs/unreleased/security-exif-migration.yml new file mode 100644 index 00000000000..cc529099df5 --- /dev/null +++ b/changelogs/unreleased/security-exif-migration.yml @@ -0,0 +1,5 @@ +--- +title: Added rake task for removing EXIF data from existing uploads. +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml b/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml deleted file mode 100644 index e98d4e89712..00000000000 --- a/changelogs/unreleased/security-fj-diff-import-file-read-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix arbitrary file read via diffs during import -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-id-fix-mr-visibility.yml b/changelogs/unreleased/security-id-fix-mr-visibility.yml deleted file mode 100644 index 8f41d191acc..00000000000 --- a/changelogs/unreleased/security-id-fix-mr-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display the correct number of MRs a user has access to -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-id-potential-denial-languages.yml b/changelogs/unreleased/security-id-potential-denial-languages.yml new file mode 100644 index 00000000000..2194ecb97dc --- /dev/null +++ b/changelogs/unreleased/security-id-potential-denial-languages.yml @@ -0,0 +1,5 @@ +--- +title: Return cached languages if they've been detected before +merge_request: +author: +type: security diff --git a/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml b/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml deleted file mode 100644 index 7d7478d297b..00000000000 --- a/changelogs/unreleased/security-id-restricted-access-to-private-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Forbid creating discussions for users with restricted access -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-issue_54789_2.yml b/changelogs/unreleased/security-issue_54789_2.yml deleted file mode 100644 index 8ecb72a2ae3..00000000000 --- a/changelogs/unreleased/security-issue_54789_2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not disclose milestone titles for unauthorized users -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-kubernetes-google-login-csrf.yml b/changelogs/unreleased/security-kubernetes-google-login-csrf.yml deleted file mode 100644 index 2f87100a8dd..00000000000 --- a/changelogs/unreleased/security-kubernetes-google-login-csrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate session key when authorizing with GCP to create a cluster -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-kubernetes-local-ssrf.yml b/changelogs/unreleased/security-kubernetes-local-ssrf.yml deleted file mode 100644 index 7a2ad092339..00000000000 --- a/changelogs/unreleased/security-kubernetes-local-ssrf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Block local URLs for Kubernetes integration -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-mermaid.yml b/changelogs/unreleased/security-mermaid.yml deleted file mode 100644 index ec42b5a1615..00000000000 --- a/changelogs/unreleased/security-mermaid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Limit mermaid rendering to 5K characters -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-osw-stop-linking-to-packages.yml b/changelogs/unreleased/security-osw-stop-linking-to-packages.yml deleted file mode 100644 index 078f06140fe..00000000000 --- a/changelogs/unreleased/security-osw-stop-linking-to-packages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Stop linking to unrecognized package sources -merge_request: 55518 -author: -type: security diff --git a/changelogs/unreleased/security-protect-private-repo-information.yml b/changelogs/unreleased/security-protect-private-repo-information.yml deleted file mode 100644 index 8b1a528206d..00000000000 --- a/changelogs/unreleased/security-protect-private-repo-information.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix leaking private repository information in API -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-shared-project-private-group.yml b/changelogs/unreleased/security-shared-project-private-group.yml deleted file mode 100644 index 3b21daa5491..00000000000 --- a/changelogs/unreleased/security-shared-project-private-group.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed ability to see private groups by users not belonging to given group -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-tags-oracle.yml b/changelogs/unreleased/security-tags-oracle.yml deleted file mode 100644 index eb8ad6f646c..00000000000 --- a/changelogs/unreleased/security-tags-oracle.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent releases links API to leak tag existance -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-bump-fog-gem.yml b/changelogs/unreleased/sh-bump-fog-gem.yml deleted file mode 100644 index 6a26d5c6488..00000000000 --- a/changelogs/unreleased/sh-bump-fog-gem.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes issue with AWS V4 signatures not working with some S3 providers -merge_request: 21788 -author: -type: fixed diff --git a/changelogs/unreleased/sh-create-branch-as-project-owner-for-github-import.yml b/changelogs/unreleased/sh-create-branch-as-project-owner-for-github-import.yml deleted file mode 100644 index a3d484cbf05..00000000000 --- a/changelogs/unreleased/sh-create-branch-as-project-owner-for-github-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'GitHub import: Create new branches as project owner' -merge_request: 26335 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-blank-codeowners-ce.yml b/changelogs/unreleased/sh-fix-blank-codeowners-ce.yml deleted file mode 100644 index 05ea5869eb1..00000000000 --- a/changelogs/unreleased/sh-fix-blank-codeowners-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 500 error caused by CODEOWNERS with no matches -merge_request: 26072 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-cpp-templates-404.yml b/changelogs/unreleased/sh-fix-cpp-templates-404.yml deleted file mode 100644 index ac958d84099..00000000000 --- a/changelogs/unreleased/sh-fix-cpp-templates-404.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix 404s when C++ .gitignore template selected -merge_request: 25416 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml b/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml deleted file mode 100644 index e6c762f1d47..00000000000 --- a/changelogs/unreleased/sh-fix-double-xhr-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicate XHR request when requesting new pipeline page -merge_request: 25506 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-58103.yml b/changelogs/unreleased/sh-fix-issue-58103.yml deleted file mode 100644 index 1599af23fed..00000000000 --- a/changelogs/unreleased/sh-fix-issue-58103.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Properly handle multiple X-Forwarded-For addresses in runner IP -merge_request: 25511 -author: -type: fixed diff --git a/changelogs/unreleased/sh-handle-null-bytes-in-merge-request-diffs.yml b/changelogs/unreleased/sh-handle-null-bytes-in-merge-request-diffs.yml deleted file mode 100644 index 01b6b08b61b..00000000000 --- a/changelogs/unreleased/sh-handle-null-bytes-in-merge-request-diffs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error creating a merge request when diff includes a null byte -merge_request: 26190 -author: -type: fixed diff --git a/changelogs/unreleased/sh-include-project-path-for-internal-api.yml b/changelogs/unreleased/sh-include-project-path-for-internal-api.yml deleted file mode 100644 index 1973049e9e3..00000000000 --- a/changelogs/unreleased/sh-include-project-path-for-internal-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include gl_project_path in API /internal/allowed response -merge_request: 25314 -author: -type: other diff --git a/changelogs/unreleased/sh-log-rails-queue-duration.yml b/changelogs/unreleased/sh-log-rails-queue-duration.yml deleted file mode 100644 index 89390aef108..00000000000 --- a/changelogs/unreleased/sh-log-rails-queue-duration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Log queue duration in production_json.log -merge_request: 25075 -author: -type: other diff --git a/changelogs/unreleased/sh-optimize-calendar-activities.yml b/changelogs/unreleased/sh-optimize-calendar-activities.yml deleted file mode 100644 index b8500357e17..00000000000 --- a/changelogs/unreleased/sh-optimize-calendar-activities.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate most N+1 queries loading UserController#calendar_activities -merge_request: 25697 -author: -type: performance diff --git a/changelogs/unreleased/sh-optimize-todos-api.yml b/changelogs/unreleased/sh-optimize-todos-api.yml deleted file mode 100644 index 936ac31b853..00000000000 --- a/changelogs/unreleased/sh-optimize-todos-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Significantly reduce N+1 queries in /api/v4/todos endpoint -merge_request: 25711 -author: -type: performance diff --git a/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml b/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml deleted file mode 100644 index f8ac345bc95..00000000000 --- a/changelogs/unreleased/sh-remove-nplusone-admin-runners-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove N+1 query for tags in /admin/runners page -merge_request: 25572 -author: -type: performance diff --git a/changelogs/unreleased/sh-revert-rack-request-health-checks.yml b/changelogs/unreleased/sh-revert-rack-request-health-checks.yml deleted file mode 100644 index 5dd5e5b731c..00000000000 --- a/changelogs/unreleased/sh-revert-rack-request-health-checks.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix health checks not working behind load balancers -merge_request: 26055 -author: -type: fixed diff --git a/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml b/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml deleted file mode 100644 index 0f62176b4a5..00000000000 --- a/changelogs/unreleased/sh-rugged-commit-is-ancestor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of CommitIsAncestor -merge_request: 25702 -author: -type: other diff --git a/changelogs/unreleased/sh-rugged-commit-tree-entry.yml b/changelogs/unreleased/sh-rugged-commit-tree-entry.yml deleted file mode 100644 index bcefa2c7112..00000000000 --- a/changelogs/unreleased/sh-rugged-commit-tree-entry.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of commit_tree_entry -merge_request: 25896 -author: -type: other diff --git a/changelogs/unreleased/sh-rugged-find-commit.yml b/changelogs/unreleased/sh-rugged-find-commit.yml deleted file mode 100644 index 85b5936c9ba..00000000000 --- a/changelogs/unreleased/sh-rugged-find-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of find_commit -merge_request: 25477 -author: -type: fixed diff --git a/changelogs/unreleased/sh-rugged-get-tree-entry.yml b/changelogs/unreleased/sh-rugged-get-tree-entry.yml deleted file mode 100644 index 4d46b764022..00000000000 --- a/changelogs/unreleased/sh-rugged-get-tree-entry.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of TreeEntry -merge_request: 25706 -author: -type: other diff --git a/changelogs/unreleased/sh-rugged-tree-entries.yml b/changelogs/unreleased/sh-rugged-tree-entries.yml deleted file mode 100644 index fca1f204b9b..00000000000 --- a/changelogs/unreleased/sh-rugged-tree-entries.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bring back Rugged implementation of GetTreeEntries -merge_request: 25674 -author: -type: other diff --git a/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml b/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml deleted file mode 100644 index e7900e2230d..00000000000 --- a/changelogs/unreleased/sh-wip-fix-duplicate-env-xhr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix pagination and duplicate requests in environments page -merge_request: 25582 -author: -type: fixed diff --git a/changelogs/unreleased/shell-8-7.yml b/changelogs/unreleased/shell-8-7.yml deleted file mode 100644 index c2dd0c1f1bb..00000000000 --- a/changelogs/unreleased/shell-8-7.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Shell to v8.7.1 -merge_request: 25801 -author: -type: other diff --git a/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml b/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml deleted file mode 100644 index fbab898b799..00000000000 --- a/changelogs/unreleased/support-only-changes-on-mr-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Support `only: changes:` on MR pipelines' -merge_request: 24490 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/table-fix-scroll-and-block.yml b/changelogs/unreleased/table-fix-scroll-and-block.yml deleted file mode 100644 index e6def0468b8..00000000000 --- a/changelogs/unreleased/table-fix-scroll-and-block.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix large table horizontal scroll and prevent side-by-side tables -merge_request: 25520 -author: Dany Jupille -type: fixed diff --git a/changelogs/unreleased/tr-error-tracking-project-selection.yml b/changelogs/unreleased/tr-error-tracking-project-selection.yml deleted file mode 100644 index 36cfe4556bb..00000000000 --- a/changelogs/unreleased/tr-error-tracking-project-selection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Error tracking configuration - add a Sentry project selection dropdown -merge_request: 24701 -author: -type: changed diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml deleted file mode 100644 index 3bf55630c4d..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-2-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.2.0 -merge_request: 25493 -author: -type: other diff --git a/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml b/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml deleted file mode 100644 index 06c638a6522..00000000000 --- a/changelogs/unreleased/use-date-for-upcoming-milestone-comparison.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix upcoming milestone when there are milestones with far-future due dates -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/use-encrypted-runner-tokens.yml b/changelogs/unreleased/use-encrypted-runner-tokens.yml deleted file mode 100644 index e01978557bf..00000000000 --- a/changelogs/unreleased/use-encrypted-runner-tokens.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use encrypted runner tokens -merge_request: 25532 -author: -type: security diff --git a/changelogs/unreleased/use-untrusted-regexp.yml b/changelogs/unreleased/use-untrusted-regexp.yml new file mode 100644 index 00000000000..dd7f1bcaca1 --- /dev/null +++ b/changelogs/unreleased/use-untrusted-regexp.yml @@ -0,0 +1,5 @@ +--- +title: Use UntrustedRegexp for matching refs policy +merge_request: +author: +type: security diff --git a/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml b/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml deleted file mode 100644 index 7a6bda1580d..00000000000 --- a/changelogs/unreleased/web-ide-commit-header-icon-alignment-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed alignment of changed icon in Web IDE -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/web-ide-default-editor.yml b/changelogs/unreleased/web-ide-default-editor.yml deleted file mode 100644 index b98be5c16c2..00000000000 --- a/changelogs/unreleased/web-ide-default-editor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make the Web IDE the default editor -merge_request: -author: -type: added diff --git a/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml b/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml deleted file mode 100644 index a9c280320dc..00000000000 --- a/changelogs/unreleased/winh-enable-reply_to_individual_notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add button to start discussion from single comment -merge_request: 25575 -author: -type: added diff --git a/changelogs/unreleased/zj-load-languages-from-database.yml b/changelogs/unreleased/zj-load-languages-from-database.yml deleted file mode 100644 index 1688829b42c..00000000000 --- a/changelogs/unreleased/zj-load-languages-from-database.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Load repository language from the database if detected before -merge_request: 25518 -author: -type: performance diff --git a/db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb b/db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb new file mode 100644 index 00000000000..5ce0ca19888 --- /dev/null +++ b/db/migrate/20190312071108_add_detected_repository_languages_to_projects.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddDetectedRepositoryLanguagesToProjects < ActiveRecord::Migration[5.0] + DOWNTIME = false + + def change + add_column :projects, :detected_repository_languages, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 59a76e21a5f..24b84f23167 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190301182457) do +ActiveRecord::Schema.define(version: 20190312071108) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1738,6 +1738,7 @@ ActiveRecord::Schema.define(version: 20190301182457) do t.bigint "pool_repository_id" t.string "runners_token_encrypted" t.string "bfg_object_map" + t.boolean "detected_repository_languages" t.index ["ci_id"], name: "index_projects_on_ci_id", using: :btree t.index ["created_at"], name: "index_projects_on_created_at", using: :btree t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree diff --git a/doc/administration/raketasks/uploads/sanitize.md b/doc/administration/raketasks/uploads/sanitize.md new file mode 100644 index 00000000000..54a423b9571 --- /dev/null +++ b/doc/administration/raketasks/uploads/sanitize.md @@ -0,0 +1,62 @@ +# Uploads Sanitize tasks + +## Requirements + +You need `exiftool` installed on your system. If you installed GitLab: + +- Using the Omnibus package, you're all set. +- From source, make sure `exiftool` is installed: + + ```sh + # Debian/Ubuntu + sudo apt-get install libimage-exiftool-perl + + # RHEL/CentOS + sudo yum install perl-Image-ExifTool + ``` + +## Remove EXIF data from existing uploads + +Since 11.9 EXIF data are automatically stripped from JPG or TIFF image uploads. +Because EXIF data may contain sensitive information (e.g. GPS location), you +can remove EXIF data also from existing images which were uploaded before +with the following command: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif +``` + +This command by default runs in dry mode and it doesn't remove EXIF data. It can be used for +checking if (and how many) images should be sanitized. + +The rake task accepts following parameters. + +Parameter | Type | Description +--------- | ---- | ----------- +`start_id` | integer | Only uploads with equal or greater ID will be processed +`stop_id` | integer | Only uploads with equal or smaller ID will be processed +`dry_run` | boolean | Do not remove EXIF data, only check if EXIF data are present or not, default: true +`sleep_time` | float | Pause for number of seconds after processing each image, default: 0.3 seconds + +If you have too many uploads, you can speed up sanitization by setting +`sleep_time` to a lower value or by running multiple rake tasks in parallel, +each with a separate range of upload IDs (by setting `start_id` and `stop_id`). + +To run the command without dry mode and remove EXIF data from all uploads, you can use: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log +``` + +To run the command without dry mode on uploads with ID between 100 and 5000 and pause for 0.1 second, you can use: + +```bash +sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log +``` + +Because the output of commands will be probably long, the output is written also into exif.log file. + +If sanitization fails for an upload, an error message should be in the output of the rake task (typical reasons may +be that the file is missing in the storage or it's not a valid image). Please +[report](https://gitlab.com/gitlab-org/gitlab-ce/issues/new) any issues at `gitlab.com` and use +prefix 'EXIF' in issue title with the error output and (if possible) the image. diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 985895acce3..816d12a8dd4 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -340,6 +340,19 @@ job: - branches ``` +Pattern matching is case-sensitive by default. Use `i` flag modifier, like +`/pattern/i` to make a pattern case-insensitive: + +```yaml +job: + # use regexp + only: + - /^issue-.*$/i + # use special keyword + except: + - branches +``` + In this example, `job` will run only for refs that are tagged, or if a build is explicitly requested via an API trigger or a [Pipeline Schedule][schedules]: diff --git a/doc/raketasks/README.md b/doc/raketasks/README.md index 90187617c41..0729875daf8 100644 --- a/doc/raketasks/README.md +++ b/doc/raketasks/README.md @@ -15,3 +15,4 @@ comments: false - [Import](import.md) of git repositories in bulk - [Rebuild authorized_keys file](http://docs.gitlab.com/ce/raketasks/maintenance.html#rebuild-authorized_keys-file) task for administrators - [Migrate Uploads](../administration/raketasks/uploads/migrate.md) +- [Sanitize Uploads](../administration/raketasks/uploads/sanitize.md) diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md index 480cc921d76..2060b5dd4a2 100644 --- a/doc/user/project/protected_branches.md +++ b/doc/user/project/protected_branches.md @@ -10,7 +10,7 @@ created protected branches. By default, a protected branch does four simple things: - it prevents its creation, if not already created, from everybody except users - who are allowed to merge + with Maintainer permission - it prevents pushes from everybody except users with Maintainer permission - it prevents **anyone** from force pushing to the branch - it prevents **anyone** from deleting the branch diff --git a/ee/changelogs/unreleased/security-milestone-labels.yml b/ee/changelogs/unreleased/security-milestone-labels.yml new file mode 100644 index 00000000000..4f8abcbc8be --- /dev/null +++ b/ee/changelogs/unreleased/security-milestone-labels.yml @@ -0,0 +1,5 @@ +--- +title: Check label_ids parent when updating issue board +merge_request: +author: +type: security diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 91501ba4d36..22c90e4e83e 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -392,11 +392,9 @@ module API desc 'Get languages in project repository' get ':id/languages' do - if user_project.repository_languages.present? - user_project.repository_languages.map { |l| [l.name, l.share] }.to_h - else - user_project.repository.languages.map { |language| language.values_at(:label, :value) }.to_h - end + ::Projects::RepositoryLanguagesService + .new(user_project, current_user) + .execute.map { |lang| [lang.name, lang.share] }.to_h end desc 'Remove a project' diff --git a/lib/gitlab/checks/branch_check.rb b/lib/gitlab/checks/branch_check.rb index ad926739752..1dbd564fb6f 100644 --- a/lib/gitlab/checks/branch_check.rb +++ b/lib/gitlab/checks/branch_check.rb @@ -59,6 +59,8 @@ module Gitlab def protected_branch_creation_checks logger.log_timed(LOG_MESSAGES[:protected_branch_creation_checks]) do + break if user_access.can_push_to_branch?(branch_name) + unless user_access.can_merge_to_branch?(branch_name) raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:create_protected_branch] end diff --git a/lib/gitlab/ci/build/policy/refs.rb b/lib/gitlab/ci/build/policy/refs.rb index df5f5ffc253..360424bec11 100644 --- a/lib/gitlab/ci/build/policy/refs.rb +++ b/lib/gitlab/ci/build/policy/refs.rb @@ -35,8 +35,8 @@ module Gitlab # patterns can be matched only when branch or tag is used # the pattern matching does not work for merge requests pipelines if pipeline.branch? || pipeline.tag? - if pattern.first == "/" && pattern.last == "/" - Regexp.new(pattern[1...-1]) =~ pipeline.ref + if regexp = Gitlab::UntrustedRegexp::RubySyntax.fabricate(pattern) + regexp.match?(pipeline.ref) else pattern == pipeline.ref end diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb b/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb index d7e6dacf068..2b719c9c6fc 100644 --- a/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb +++ b/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb @@ -13,13 +13,13 @@ module Gitlab def initialize(regexp) @value = regexp - unless Gitlab::UntrustedRegexp.valid?(@value) + unless Gitlab::UntrustedRegexp::RubySyntax.valid?(@value) raise Lexer::SyntaxError, 'Invalid regular expression!' end end def evaluate(variables = {}) - Gitlab::UntrustedRegexp.fabricate(@value) + Gitlab::UntrustedRegexp::RubySyntax.fabricate!(@value) rescue RegexpError raise Expression::RuntimeError, 'Invalid regular expression!' end diff --git a/lib/gitlab/config/entry/legacy_validation_helpers.rb b/lib/gitlab/config/entry/legacy_validation_helpers.rb index d3ab5625743..0a629075302 100644 --- a/lib/gitlab/config/entry/legacy_validation_helpers.rb +++ b/lib/gitlab/config/entry/legacy_validation_helpers.rb @@ -45,17 +45,15 @@ module Gitlab end def validate_regexp(value) - !value.nil? && Regexp.new(value.to_s) && true - rescue RegexpError, TypeError - false + Gitlab::UntrustedRegexp::RubySyntax.valid?(value) end def validate_string_or_regexp(value) return true if value.is_a?(Symbol) return false unless value.is_a?(String) - if value.first == '/' && value.last == '/' - validate_regexp(value[1...-1]) + if Gitlab::UntrustedRegexp::RubySyntax.matches_syntax?(value) + validate_regexp(value) else true end diff --git a/lib/gitlab/config/entry/validators.rb b/lib/gitlab/config/entry/validators.rb index 25bfa50f829..d348e11b753 100644 --- a/lib/gitlab/config/entry/validators.rb +++ b/lib/gitlab/config/entry/validators.rb @@ -120,17 +120,13 @@ module Gitlab private - def look_like_regexp?(value) - value.is_a?(String) && value.start_with?('/') && - value.end_with?('/') + def matches_syntax?(value) + Gitlab::UntrustedRegexp::RubySyntax.matches_syntax?(value) end def validate_regexp(value) - look_like_regexp?(value) && - Regexp.new(value.to_s[1...-1]) && - true - rescue RegexpError - false + matches_syntax?(value) && + Gitlab::UntrustedRegexp::RubySyntax.valid?(value) end end @@ -149,7 +145,7 @@ module Gitlab def validate_string_or_regexp(value) return false unless value.is_a?(String) - return validate_regexp(value) if look_like_regexp?(value) + return validate_regexp(value) if matches_syntax?(value) true end diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb index dbee47a19ee..dce80bf21de 100644 --- a/lib/gitlab/diff/file.rb +++ b/lib/gitlab/diff/file.rb @@ -158,7 +158,10 @@ module Gitlab new_blob || old_blob end - attr_writer :highlighted_diff_lines + def highlighted_diff_lines=(value) + clear_memoization(:diff_lines_for_serializer) + @highlighted_diff_lines = value + end # Array of Gitlab::Diff::Line objects def diff_lines @@ -314,19 +317,21 @@ module Gitlab # This adds the bottom match line to the array if needed. It contains # the data to load more context lines. def diff_lines_for_serializer - lines = highlighted_diff_lines + strong_memoize(:diff_lines_for_serializer) do + lines = highlighted_diff_lines - return if lines.empty? - return if blob.nil? + next if lines.empty? + next if blob.nil? - last_line = lines.last + last_line = lines.last - if last_line.new_pos < total_blob_lines(blob) && !deleted_file? - match_line = Gitlab::Diff::Line.new("", 'match', nil, last_line.old_pos, last_line.new_pos) - lines.push(match_line) - end + if last_line.new_pos < total_blob_lines(blob) && !deleted_file? + match_line = Gitlab::Diff::Line.new("", 'match', nil, last_line.old_pos, last_line.new_pos) + lines.push(match_line) + end - lines + lines + end end def fully_expanded? diff --git a/lib/gitlab/github_import/importer/pull_request_importer.rb b/lib/gitlab/github_import/importer/pull_request_importer.rb index 72451e5e01e..1b293ddc7c7 100644 --- a/lib/gitlab/github_import/importer/pull_request_importer.rb +++ b/lib/gitlab/github_import/importer/pull_request_importer.rb @@ -89,7 +89,7 @@ module Gitlab return if project.repository.branch_exists?(source_branch) - project.repository.add_branch(project.owner, source_branch, pull_request.source_branch_sha) + project.repository.add_branch(project.creator, source_branch, pull_request.source_branch_sha) rescue Gitlab::Git::CommandError => e Gitlab::Sentry.track_acceptable_exception(e, extra: { diff --git a/lib/gitlab/github_import/importer/repository_importer.rb b/lib/gitlab/github_import/importer/repository_importer.rb index e2dfb00dcc5..6d48c6a15b4 100644 --- a/lib/gitlab/github_import/importer/repository_importer.rb +++ b/lib/gitlab/github_import/importer/repository_importer.rb @@ -5,6 +5,7 @@ module Gitlab module Importer class RepositoryImporter include Gitlab::ShellAdapter + include Gitlab::Utils::StrongMemoize attr_reader :project, :client, :wiki_formatter @@ -17,7 +18,7 @@ module Gitlab # Returns true if we should import the wiki for the project. # rubocop: disable CodeReuse/ActiveRecord def import_wiki? - client.repository(project.import_source)&.has_wiki && + client_repository&.has_wiki && !project.wiki_repository_exists? && Gitlab::GitalyClient::RemoteService.exists?(wiki_url) end @@ -52,6 +53,7 @@ module Gitlab refmap = Gitlab::GithubImport.refmap project.repository.fetch_as_mirror(project.import_url, refmap: refmap, forced: true, remote_name: 'github') + project.change_head(default_branch) if default_branch true rescue Gitlab::Git::Repository::NoRepository, Gitlab::Shell::Error => e fail_import("Failed to import the repository: #{e.message}") @@ -82,6 +84,18 @@ module Gitlab project.import_state.mark_as_failed(message) false end + + private + + def default_branch + client_repository&.default_branch + end + + def client_repository + strong_memoize(:client_repository) do + client.repository(project.import_source) + end + end end end end diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml index fa54fc17d95..af7798b959f 100644 --- a/lib/gitlab/import_export/import_export.yml +++ b/lib/gitlab/import_export/import_export.yml @@ -117,6 +117,7 @@ excluded_attributes: - :description_html - :repository_languages - :bfg_object_map + - :detected_repository_languages namespaces: - :runners_token - :runners_token_encrypted diff --git a/lib/gitlab/sanitizers/exif.rb b/lib/gitlab/sanitizers/exif.rb new file mode 100644 index 00000000000..7427aba382f --- /dev/null +++ b/lib/gitlab/sanitizers/exif.rb @@ -0,0 +1,157 @@ +# frozen_string_literal: true + +module Gitlab + module Sanitizers + class Exif + # these tags are not removed from the image + WHITELISTED_TAGS = %w( + ResolutionUnit + XResolution + YResolution + YCbCrSubSampling + YCbCrPositioning + BitsPerSample + ImageHeight + ImageWidth + ImageSize + Copyright + CopyrightNotice + ).freeze + + # these tags are common in exiftool output, these + # do not contain any sensitive information, but + # we don't need to preserve them when removing + # exif tags + IGNORED_TAGS = %w( + ColorComponents + EncodingProcess + ExifByteOrder + ExifToolVersion + JFIFVersion + Directory + FileAccessDate + FileInodeChangeDate + FileModifyDate + FileName + FilePermissions + FileSize + SourceFile + Megapixels + FileType + FileTypeExtension + MIMEType + ).freeze + + ALLOWED_TAGS = WHITELISTED_TAGS + IGNORED_TAGS + EXCLUDE_PARAMS = WHITELISTED_TAGS.map { |tag| "-#{tag}" } + + attr_reader :logger + + def initialize(logger: Rails.logger) + @logger = logger + end + + # rubocop: disable CodeReuse/ActiveRecord + def batch_clean(start_id: nil, stop_id: nil, dry_run: true, sleep_time: nil) + relation = Upload.where('lower(path) like ? or lower(path) like ? or lower(path) like ?', + '%.jpg', '%.jpeg', '%.tiff') + + logger.info "running in dry run mode, no images will be rewritten" if dry_run + + find_params = { + start: start_id.present? ? start_id.to_i : nil, + finish: stop_id.present? ? stop_id.to_i : Upload.last&.id + } + + relation.find_each(find_params) do |upload| + begin + clean(upload.build_uploader, dry_run: dry_run) + sleep sleep_time if sleep_time + rescue => err + logger.error "failed to sanitize #{upload_ref(upload)}: #{err.message}" + logger.debug err.backtrace.join("\n ") + end + end + end + # rubocop: enable CodeReuse/ActiveRecord + + def clean(uploader, dry_run: true) + Dir.mktmpdir('gitlab-exif') do |tmpdir| + src_path = fetch_upload_to_file(uploader, tmpdir) + + to_remove = extra_tags(src_path) + + if to_remove.empty? + logger.info "#{upload_ref(uploader.upload)}: only whitelisted tags present, skipping" + break + end + + logger.info "#{upload_ref(uploader.upload)}: found exif tags to remove: #{to_remove}" + + break if dry_run + + remove_and_store(tmpdir, src_path, uploader) + end + end + + def extra_tags(path) + exif_tags(path).keys - ALLOWED_TAGS + end + + private + + def remove_and_store(tmpdir, src_path, uploader) + exec_remove_exif!(src_path) + logger.info "#{upload_ref(uploader.upload)}: exif removed, storing" + File.open(src_path, 'r') { |f| uploader.store!(f) } + end + + def exec_remove_exif!(path) + # IPTC and XMP-iptcExt groups may keep copyright information so + # we always preserve them + cmd = ["exiftool", "-all=", "-tagsFromFile", "@", *EXCLUDE_PARAMS, "--IPTC:all", "--XMP-iptcExt:all", path] + output, status = Gitlab::Popen.popen(cmd) + + if status != 0 + raise "exiftool return code is #{status}: #{output}" + end + + if File.size(path) == 0 + raise "size of file is 0" + end + + # exiftool creates backup of the original file in filename_original + old_path = "#{path}_original" + if File.size(path) == File.size(old_path) + raise "size of sanitized file is same as original size" + end + end + + def fetch_upload_to_file(uploader, dir) + # upload is stored into the file with the original name - this filename + # is used by carrierwave when storing the file back to the storage + filename = File.join(dir, uploader.filename) + + File.open(filename, 'w') do |file| + file.binmode + file.write uploader.read + end + + filename + end + + def upload_ref(upload) + "#{upload.id}:#{upload.path}" + end + + def exif_tags(path) + cmd = ["exiftool", "-all", "-j", "-sort", "--IPTC:all", "--XMP-iptcExt:all", path] + output, status = Gitlab::Popen.popen(cmd) + + raise "failed to get exif tags: #{output}" if status != 0 + + JSON.parse(output).first + end + end + end +end diff --git a/lib/gitlab/untrusted_regexp.rb b/lib/gitlab/untrusted_regexp.rb index ba1137313d8..14126b6ec06 100644 --- a/lib/gitlab/untrusted_regexp.rb +++ b/lib/gitlab/untrusted_regexp.rb @@ -35,6 +35,10 @@ module Gitlab matches end + def match?(text) + text.present? && scan(text).present? + end + def replace(text, rewrite) RE2.Replace(text, regexp, rewrite) end @@ -43,37 +47,6 @@ module Gitlab self.source == other.source end - # Handles regular expressions with the preferred RE2 library where possible - # via UntustedRegex. Falls back to Ruby's built-in regular expression library - # when the syntax would be invalid in RE2. - # - # One difference between these is `(?m)` multi-line mode. Ruby regex enables - # this by default, but also handles `^` and `$` differently. - # See: https://www.regular-expressions.info/modifiers.html - def self.with_fallback(pattern, multiline: false) - UntrustedRegexp.new(pattern, multiline: multiline) - rescue RegexpError - Regexp.new(pattern) - end - - def self.valid?(pattern) - !!self.fabricate(pattern) - rescue RegexpError - false - end - - def self.fabricate(pattern) - matches = pattern.match(%r{^/(?<regexp>.+)/(?<flags>[ismU]*)$}) - - raise RegexpError, 'Invalid regular expression!' if matches.nil? - - expression = matches[:regexp] - flags = matches[:flags] - expression.prepend("(?#{flags})") if flags.present? - - self.new(expression, multiline: false) - end - private attr_reader :regexp diff --git a/lib/gitlab/untrusted_regexp/ruby_syntax.rb b/lib/gitlab/untrusted_regexp/ruby_syntax.rb new file mode 100644 index 00000000000..91f300f97d0 --- /dev/null +++ b/lib/gitlab/untrusted_regexp/ruby_syntax.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Gitlab + class UntrustedRegexp + # This class implements support for Ruby syntax of regexps + # and converts that to RE2 representation: + # /<regexp>/<flags> + class RubySyntax + PATTERN = %r{^/(?<regexp>.+)/(?<flags>[ismU]*)$}.freeze + + # Checks if pattern matches a regexp pattern + # but does not enforce it's validity + def self.matches_syntax?(pattern) + pattern.is_a?(String) && pattern.match(PATTERN).present? + end + + # The regexp can match the pattern `/.../`, but may not be fabricatable: + # it can be invalid or incomplete: `/match ( string/` + def self.valid?(pattern) + !!self.fabricate(pattern) + end + + def self.fabricate(pattern) + self.fabricate!(pattern) + rescue RegexpError + nil + end + + def self.fabricate!(pattern) + raise RegexpError, 'Pattern is not string!' unless pattern.is_a?(String) + + matches = pattern.match(PATTERN) + raise RegexpError, 'Invalid regular expression!' if matches.nil? + + expression = matches[:regexp] + flags = matches[:flags] + expression.prepend("(?#{flags})") if flags.present? + + UntrustedRegexp.new(expression, multiline: false) + end + end + end +end diff --git a/lib/tasks/gitlab/uploads/sanitize.rake b/lib/tasks/gitlab/uploads/sanitize.rake new file mode 100644 index 00000000000..12cf5302555 --- /dev/null +++ b/lib/tasks/gitlab/uploads/sanitize.rake @@ -0,0 +1,18 @@ +namespace :gitlab do + namespace :uploads do + namespace :sanitize do + desc 'GitLab | Uploads | Remove EXIF from images.' + task :remove_exif, [:start_id, :stop_id, :dry_run, :sleep_time] => :environment do |task, args| + args.with_defaults(dry_run: 'true') + args.with_defaults(sleep_time: 0.3) + + logger = Logger.new(STDOUT) + + sanitizer = Gitlab::Sanitizers::Exif.new(logger: logger) + sanitizer.batch_clean(start_id: args.start_id, stop_id: args.stop_id, + dry_run: args.dry_run != 'false', + sleep_time: args.sleep_time.to_f) + end + end + end +end diff --git a/spec/controllers/projects/graphs_controller_spec.rb b/spec/controllers/projects/graphs_controller_spec.rb index 8decd8f1382..df6a6e00f73 100644 --- a/spec/controllers/projects/graphs_controller_spec.rb +++ b/spec/controllers/projects/graphs_controller_spec.rb @@ -27,6 +27,7 @@ describe Projects::GraphsController do describe 'charts' do context 'when languages were previously detected' do + let(:project) { create(:project, :repository, detected_repository_languages: true) } let!(:repository_language) { create(:repository_language, project: project) } it 'sets the languages properly' do diff --git a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb index 693ad89069c..0a006011c89 100644 --- a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb +++ b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' describe 'User creates branch and merge request on issue page', :js do + let(:membership_level) { :developer } let(:user) { create(:user) } let!(:project) { create(:project, :repository) } let(:issue) { create(:issue, project: project, title: 'Cherry-Coloured Funk') } @@ -17,7 +18,7 @@ describe 'User creates branch and merge request on issue page', :js do context 'when signed in' do before do - project.add_developer(user) + project.add_user(user, membership_level) sign_in(user) end @@ -167,6 +168,39 @@ describe 'User creates branch and merge request on issue page', :js do expect(page).not_to have_css('.create-mr-dropdown-wrap') end end + + context 'when related branch exists' do + let!(:project) { create(:project, :repository, :private) } + let(:branch_name) { "#{issue.iid}-foo" } + + before do + project.repository.create_branch(branch_name, 'master') + + visit project_issue_path(project, issue) + end + + context 'when user is developer' do + it 'shows related branches' do + expect(page).to have_css('#related-branches') + + wait_for_requests + + expect(page).to have_content(branch_name) + end + end + + context 'when user is guest' do + let(:membership_level) { :guest } + + it 'does not show related branches' do + expect(page).not_to have_css('#related-branches') + + wait_for_requests + + expect(page).not_to have_content(branch_name) + end + end + end end private diff --git a/spec/features/merge_request/user_resolves_conflicts_spec.rb b/spec/features/merge_request/user_resolves_conflicts_spec.rb index 16c058ab6bd..8fd44b87e5a 100644 --- a/spec/features/merge_request/user_resolves_conflicts_spec.rb +++ b/spec/features/merge_request/user_resolves_conflicts_spec.rb @@ -164,6 +164,21 @@ describe 'Merge request > User resolves conflicts', :js do expect(page).to have_content('Gregor Samsa woke from troubled dreams') end end + + context "with malicious branch name" do + let(:bad_branch_name) { "malicious-branch-{{toString.constructor('alert(/xss/)')()}}" } + let(:branch) { project.repository.create_branch(bad_branch_name, 'conflict-resolvable') } + let(:merge_request) { create_merge_request(branch.name) } + + before do + visit project_merge_request_path(project, merge_request) + click_link('conflicts', href: %r{/conflicts\Z}) + end + + it "renders bad name without xss issues" do + expect(find('.resolve-conflicts-form .resolve-info')).to have_content(bad_branch_name) + end + end end UNRESOLVABLE_CONFLICTS = { diff --git a/spec/features/projects/graph_spec.rb b/spec/features/projects/graph_spec.rb index 9665f1755d6..e1bc18519a2 100644 --- a/spec/features/projects/graph_spec.rb +++ b/spec/features/projects/graph_spec.rb @@ -6,6 +6,8 @@ describe 'Project Graph', :js do let(:branch_name) { 'master' } before do + ::Projects::DetectRepositoryLanguagesService.new(project, user).execute + project.add_maintainer(user) sign_in(user) diff --git a/spec/lib/gitlab/checks/branch_check_spec.rb b/spec/lib/gitlab/checks/branch_check_spec.rb index 12beeecd470..8d5ab27a17c 100644 --- a/spec/lib/gitlab/checks/branch_check_spec.rb +++ b/spec/lib/gitlab/checks/branch_check_spec.rb @@ -108,64 +108,86 @@ describe Gitlab::Checks::BranchCheck do end context 'protected branch creation feature is enabled' do - context 'user is not allowed to create protected branches' do + context 'user can push to branch' do before do allow(user_access) - .to receive(:can_merge_to_branch?) + .to receive(:can_push_to_branch?) .with('feature') - .and_return(false) + .and_return(true) end - it 'raises an error' do - expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You are not allowed to create protected branches on this project.') + it 'does not raise an error' do + expect { subject.validate! }.not_to raise_error end end - context 'user is allowed to create protected branches' do + context 'user cannot push to branch' do before do allow(user_access) - .to receive(:can_merge_to_branch?) + .to receive(:can_push_to_branch?) .with('feature') - .and_return(true) - - allow(project.repository) - .to receive(:branch_names_contains_sha) - .with(newrev) - .and_return(['branch']) + .and_return(false) end - context "newrev isn't in any protected branches" do + context 'user cannot merge to branch' do before do - allow(ProtectedBranch) - .to receive(:any_protected?) - .with(project, ['branch']) + allow(user_access) + .to receive(:can_merge_to_branch?) + .with('feature') .and_return(false) end it 'raises an error' do - expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You can only use an existing protected branch ref as the basis of a new protected branch.') + expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You are not allowed to create protected branches on this project.') end end - context 'newrev is included in a protected branch' do + context 'user can merge to branch' do before do - allow(ProtectedBranch) - .to receive(:any_protected?) - .with(project, ['branch']) + allow(user_access) + .to receive(:can_merge_to_branch?) + .with('feature') .and_return(true) + + allow(project.repository) + .to receive(:branch_names_contains_sha) + .with(newrev) + .and_return(['branch']) end - context 'via web interface' do - let(:protocol) { 'web' } + context "newrev isn't in any protected branches" do + before do + allow(ProtectedBranch) + .to receive(:any_protected?) + .with(project, ['branch']) + .and_return(false) + end - it 'allows branch creation' do - expect { subject.validate! }.not_to raise_error + it 'raises an error' do + expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You can only use an existing protected branch ref as the basis of a new protected branch.') end end - context 'via SSH' do - it 'raises an error' do - expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You can only create protected branches using the web interface and API.') + context 'newrev is included in a protected branch' do + before do + allow(ProtectedBranch) + .to receive(:any_protected?) + .with(project, ['branch']) + .and_return(true) + end + + context 'via web interface' do + let(:protocol) { 'web' } + + it 'allows branch creation' do + expect { subject.validate! }.not_to raise_error + end + end + + context 'via SSH' do + it 'raises an error' do + expect { subject.validate! }.to raise_error(Gitlab::GitAccess::UnauthorizedError, 'You can only create protected branches using the web interface and API.') + end end end end diff --git a/spec/lib/gitlab/ci/build/policy/refs_spec.rb b/spec/lib/gitlab/ci/build/policy/refs_spec.rb index b4ddbf89b70..ec0450643c3 100644 --- a/spec/lib/gitlab/ci/build/policy/refs_spec.rb +++ b/spec/lib/gitlab/ci/build/policy/refs_spec.rb @@ -92,10 +92,23 @@ describe Gitlab::Ci::Build::Policy::Refs do .to be_satisfied_by(pipeline) end + it 'is satisfied when case-insensitive regexp matches pipeline ref' do + expect(described_class.new(['/DOCS-.*/i'])) + .to be_satisfied_by(pipeline) + end + it 'is not satisfied when regexp does not match pipeline ref' do expect(described_class.new(['/fix-.*/'])) .not_to be_satisfied_by(pipeline) end end + + context 'malicious regexp' do + let(:pipeline) { build_stubbed(:ci_pipeline, ref: malicious_text) } + + subject { described_class.new([malicious_regexp_ruby]) } + + include_examples 'malicious regexp' + end end end diff --git a/spec/lib/gitlab/ci/pipeline/expression/lexeme/pattern_spec.rb b/spec/lib/gitlab/ci/pipeline/expression/lexeme/pattern_spec.rb index 3ebc2e94727..cff7f57ceff 100644 --- a/spec/lib/gitlab/ci/pipeline/expression/lexeme/pattern_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/expression/lexeme/pattern_spec.rb @@ -85,7 +85,7 @@ describe Gitlab::Ci::Pipeline::Expression::Lexeme::Pattern do end it 'raises error if evaluated regexp is not valid' do - allow(Gitlab::UntrustedRegexp).to receive(:valid?).and_return(true) + allow(Gitlab::UntrustedRegexp::RubySyntax).to receive(:valid?).and_return(true) regexp = described_class.new('/invalid ( .*/') diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 38626f728d7..e45ea1c2528 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -414,7 +414,7 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do context 'malicious regexp' do let(:data) { malicious_text } - let(:regex) { malicious_regexp } + let(:regex) { malicious_regexp_re2 } include_examples 'malicious regexp' end diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb index 611c3e946ed..cc36060f864 100644 --- a/spec/lib/gitlab/diff/file_spec.rb +++ b/spec/lib/gitlab/diff/file_spec.rb @@ -72,6 +72,13 @@ describe Gitlab::Diff::File do expect(diff_file.diff_lines_for_serializer.last.type).to eq('match') end + context 'when called multiple times' do + it 'only adds bottom match line once' do + expect(diff_file.diff_lines_for_serializer.size).to eq(31) + expect(diff_file.diff_lines_for_serializer.size).to eq(31) + end + end + context 'when deleted' do let(:commit) { project.commit('d59c60028b053793cecfb4022de34602e1a9218e') } let(:diff_file) { commit.diffs.diff_file_with_old_path('files/js/commit.js.coffee') } diff --git a/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb index 37c3fae7cb7..680de47de2b 100644 --- a/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/pull_request_importer_spec.rb @@ -273,10 +273,10 @@ describe Gitlab::GithubImport::Importer::PullRequestImporter, :clean_gitlab_redi mr.state = 'opened' mr.save - # Ensure the project owner is creating the branches because the + # Ensure the project creator is creating the branches because the # merge request author may not have access to push to this - # repository. - allow(project.repository).to receive(:add_branch).with(project.owner, anything, anything).and_call_original + # repository. The project owner may also be a group. + allow(project.repository).to receive(:add_branch).with(project.creator, anything, anything).and_call_original importer.insert_git_data(mr, exists) diff --git a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb index 47233ea6ee2..41810a8ec03 100644 --- a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb @@ -179,6 +179,17 @@ describe Gitlab::GithubImport::Importer::RepositoryImporter do describe '#import_repository' do it 'imports the repository' do + repo = double(:repo, default_branch: 'develop') + + expect(client) + .to receive(:repository) + .with('foo/bar') + .and_return(repo) + + expect(project) + .to receive(:change_head) + .with('develop') + expect(project) .to receive(:ensure_repository) diff --git a/spec/lib/gitlab/json_cache_spec.rb b/spec/lib/gitlab/json_cache_spec.rb index b7dc8234bdf..b82c09af306 100644 --- a/spec/lib/gitlab/json_cache_spec.rb +++ b/spec/lib/gitlab/json_cache_spec.rb @@ -146,6 +146,18 @@ describe Gitlab::JsonCache do expect(cache.read(key, BroadcastMessage)).to be_nil end + + it 'gracefully handles excluded fields from attributes during serialization' do + allow(backend).to receive(:read) + .with(expanded_key) + .and_return(broadcast_message.attributes.except("message_html").to_json) + + result = cache.read(key, BroadcastMessage) + + BroadcastMessage.cached_markdown_fields.html_fields.each do |field| + expect(result.public_send(field)).to be_nil + end + end end context 'when the cached value is an array' do @@ -327,7 +339,9 @@ describe Gitlab::JsonCache do .with(expanded_key) .and_return('{') - expect(cache.read(key, BroadcastMessage)).to be_nil + result = cache.fetch(key, as: BroadcastMessage) { 'block result' } + + expect(result).to eq 'block result' end it 'gracefully handles an empty hash' do @@ -335,7 +349,7 @@ describe Gitlab::JsonCache do .with(expanded_key) .and_return('{}') - expect(cache.read(key, BroadcastMessage)).to be_a(BroadcastMessage) + expect(cache.fetch(key, as: BroadcastMessage)).to be_a(BroadcastMessage) end it 'gracefully handles unknown attributes' do @@ -343,17 +357,19 @@ describe Gitlab::JsonCache do .with(expanded_key) .and_return(broadcast_message.attributes.merge(unknown_attribute: 1).to_json) - expect(cache.read(key, BroadcastMessage)).to be_nil + result = cache.fetch(key, as: BroadcastMessage) { 'block result' } + + expect(result).to eq 'block result' end it 'gracefully handles excluded fields from attributes during serialization' do - backend.write(expanded_key, broadcast_message.to_json) + allow(backend).to receive(:read) + .with(expanded_key) + .and_return(broadcast_message.attributes.except("message_html").to_json) result = cache.fetch(key, as: BroadcastMessage) { 'block result' } - excluded_fields = BroadcastMessage.cached_markdown_fields.html_fields - - (excluded_fields + ['cached_markdown_version']).each do |field| + BroadcastMessage.cached_markdown_fields.html_fields.each do |field| expect(result.public_send(field)).to be_nil end end diff --git a/spec/lib/gitlab/route_map_spec.rb b/spec/lib/gitlab/route_map_spec.rb index d672f7b5675..a39c774429e 100644 --- a/spec/lib/gitlab/route_map_spec.rb +++ b/spec/lib/gitlab/route_map_spec.rb @@ -60,7 +60,7 @@ describe Gitlab::RouteMap do subject do map = described_class.new(<<-"MAP".strip_heredoc) - - source: '#{malicious_regexp}' + - source: '#{malicious_regexp_re2}' public: '/' MAP diff --git a/spec/lib/gitlab/sanitizers/exif_spec.rb b/spec/lib/gitlab/sanitizers/exif_spec.rb new file mode 100644 index 00000000000..bd5f330c7a1 --- /dev/null +++ b/spec/lib/gitlab/sanitizers/exif_spec.rb @@ -0,0 +1,120 @@ +require 'spec_helper' + +describe Gitlab::Sanitizers::Exif do + let(:sanitizer) { described_class.new } + + describe '#batch_clean' do + context 'with image uploads' do + let!(:uploads) { create_list(:upload, 3, :with_file, :issuable_upload) } + + it 'processes all uploads if range ID is not set' do + expect(sanitizer).to receive(:clean).exactly(3).times + + sanitizer.batch_clean + end + + it 'processes only uploads in the selected range' do + expect(sanitizer).to receive(:clean).once + + sanitizer.batch_clean(start_id: uploads[1].id, stop_id: uploads[1].id) + end + + it 'pauses if sleep_time is set' do + expect(sanitizer).to receive(:sleep).exactly(3).times.with(1.second) + expect(sanitizer).to receive(:clean).exactly(3).times + + sanitizer.batch_clean(sleep_time: 1) + end + end + + it 'filters only jpg/tiff images' do + create(:upload, path: 'filename.jpg') + create(:upload, path: 'filename.jpeg') + create(:upload, path: 'filename.JPG') + create(:upload, path: 'filename.tiff') + create(:upload, path: 'filename.TIFF') + create(:upload, path: 'filename.png') + create(:upload, path: 'filename.txt') + + expect(sanitizer).to receive(:clean).exactly(5).times + sanitizer.batch_clean + end + end + + describe '#clean' do + let(:uploader) { create(:upload, :with_file, :issuable_upload).build_uploader } + + context "no dry run" do + it "removes exif from the image" do + uploader.store!(fixture_file_upload('spec/fixtures/rails_sample.jpg')) + + original_upload = uploader.upload + expected_args = ["exiftool", "-all=", "-tagsFromFile", "@", *Gitlab::Sanitizers::Exif::EXCLUDE_PARAMS, "--IPTC:all", "--XMP-iptcExt:all", kind_of(String)] + + expect(sanitizer).to receive(:extra_tags).and_return(["", 0]) + expect(sanitizer).to receive(:exec_remove_exif!).once.and_call_original + expect(uploader).to receive(:store!).and_call_original + expect(Gitlab::Popen).to receive(:popen).with(expected_args) do |args| + File.write("#{args.last}_original", "foo") if args.last.start_with?(Dir.tmpdir) + + [expected_args, 0] + end + + sanitizer.clean(uploader, dry_run: false) + + expect(uploader.upload.id).not_to eq(original_upload.id) + expect(uploader.upload.path).to eq(original_upload.path) + end + + it "ignores image without exif" do + expected_args = ["exiftool", "-all", "-j", "-sort", "--IPTC:all", "--XMP-iptcExt:all", kind_of(String)] + + expect(Gitlab::Popen).to receive(:popen).with(expected_args).and_return(["[{}]", 0]) + expect(sanitizer).not_to receive(:exec_remove_exif!) + expect(uploader).not_to receive(:store!) + + sanitizer.clean(uploader, dry_run: false) + end + + it "raises an error if the exiftool fails with an error" do + expect(Gitlab::Popen).to receive(:popen).and_return(["error", 1]) + + expect { sanitizer.clean(uploader, dry_run: false) }.to raise_exception(RuntimeError, "failed to get exif tags: error") + end + end + + context "dry run" do + it "doesn't change the image" do + expect(sanitizer).to receive(:extra_tags).and_return({ 'foo' => 'bar' }) + expect(sanitizer).not_to receive(:exec_remove_exif!) + expect(uploader).not_to receive(:store!) + + sanitizer.clean(uploader, dry_run: true) + end + end + end + + describe "#extra_tags" do + it "returns a list of keys for exif file" do + tags = '[{ + "DigitalSourceType": "some source", + "ImageHeight": 654 + }]' + + expect(Gitlab::Popen).to receive(:popen).and_return([tags, 0]) + + expect(sanitizer.extra_tags('filename')).not_to be_empty + end + + it "returns an empty list for file with only whitelisted and ignored tags" do + tags = '[{ + "ImageHeight": 654, + "Megapixels": 0.641 + }]' + + expect(Gitlab::Popen).to receive(:popen).and_return([tags, 0]) + + expect(sanitizer.extra_tags('some file')).to be_empty + end + end +end diff --git a/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb b/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb new file mode 100644 index 00000000000..005d41580de --- /dev/null +++ b/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb @@ -0,0 +1,72 @@ +require 'fast_spec_helper' +require 'support/shared_examples/malicious_regexp_shared_examples' + +describe Gitlab::UntrustedRegexp::RubySyntax do + describe '.matches_syntax?' do + it 'returns true if regexp is valid' do + expect(described_class.matches_syntax?('/some .* thing/')) + .to be true + end + + it 'returns true if regexp is invalid, but resembles regexp' do + expect(described_class.matches_syntax?('/some ( thing/')) + .to be true + end + end + + describe '.valid?' do + it 'returns true if regexp is valid' do + expect(described_class.valid?('/some .* thing/')) + .to be true + end + + it 'returns false if regexp is invalid' do + expect(described_class.valid?('/some ( thing/')) + .to be false + end + end + + describe '.fabricate' do + context 'when regexp is valid' do + it 'fabricates regexp without flags' do + expect(described_class.fabricate('/some .* thing/')).not_to be_nil + end + end + + context 'when regexp is a raw pattern' do + it 'returns error' do + expect(described_class.fabricate('some .* thing')).to be_nil + end + end + end + + describe '.fabricate!' do + context 'when regexp is using /regexp/ scheme with flags' do + it 'fabricates regexp with a single flag' do + regexp = described_class.fabricate!('/something/i') + + expect(regexp).to eq Gitlab::UntrustedRegexp.new('(?i)something') + expect(regexp.scan('SOMETHING')).to be_one + end + + it 'fabricates regexp with multiple flags' do + regexp = described_class.fabricate!('/something/im') + + expect(regexp).to eq Gitlab::UntrustedRegexp.new('(?im)something') + end + + it 'fabricates regexp without flags' do + regexp = described_class.fabricate!('/something/') + + expect(regexp).to eq Gitlab::UntrustedRegexp.new('something') + end + end + + context 'when regexp is a raw pattern' do + it 'raises an error' do + expect { described_class.fabricate!('some .* thing') } + .to raise_error(RegexpError) + end + end + end +end diff --git a/spec/lib/gitlab/untrusted_regexp_spec.rb b/spec/lib/gitlab/untrusted_regexp_spec.rb index 0a6ac0aa294..9d483f13a5e 100644 --- a/spec/lib/gitlab/untrusted_regexp_spec.rb +++ b/spec/lib/gitlab/untrusted_regexp_spec.rb @@ -2,48 +2,6 @@ require 'fast_spec_helper' require 'support/shared_examples/malicious_regexp_shared_examples' describe Gitlab::UntrustedRegexp do - describe '.valid?' do - it 'returns true if regexp is valid' do - expect(described_class.valid?('/some ( thing/')) - .to be false - end - - it 'returns true if regexp is invalid' do - expect(described_class.valid?('/some .* thing/')) - .to be true - end - end - - describe '.fabricate' do - context 'when regexp is using /regexp/ scheme with flags' do - it 'fabricates regexp with a single flag' do - regexp = described_class.fabricate('/something/i') - - expect(regexp).to eq described_class.new('(?i)something') - expect(regexp.scan('SOMETHING')).to be_one - end - - it 'fabricates regexp with multiple flags' do - regexp = described_class.fabricate('/something/im') - - expect(regexp).to eq described_class.new('(?im)something') - end - - it 'fabricates regexp without flags' do - regexp = described_class.fabricate('/something/') - - expect(regexp).to eq described_class.new('something') - end - end - - context 'when regexp is a raw pattern' do - it 'raises an error' do - expect { described_class.fabricate('some .* thing') } - .to raise_error(RegexpError) - end - end - end - describe '#initialize' do subject { described_class.new(pattern) } @@ -92,11 +50,41 @@ describe Gitlab::UntrustedRegexp do end end + describe '#match?' do + subject { described_class.new(regexp).match?(text) } + + context 'malicious regexp' do + let(:text) { malicious_text } + let(:regexp) { malicious_regexp_re2 } + + include_examples 'malicious regexp' + end + + context 'matching regexp' do + let(:regexp) { 'foo' } + let(:text) { 'foo' } + + it 'returns an array of nil matches' do + is_expected.to eq(true) + end + end + + context 'non-matching regexp' do + let(:regexp) { 'boo' } + let(:text) { 'foo' } + + it 'returns an array of nil matches' do + is_expected.to eq(false) + end + end + end + describe '#scan' do subject { described_class.new(regexp).scan(text) } + context 'malicious regexp' do let(:text) { malicious_text } - let(:regexp) { malicious_regexp } + let(:regexp) { malicious_regexp_re2 } include_examples 'malicious regexp' end diff --git a/spec/models/broadcast_message_spec.rb b/spec/models/broadcast_message_spec.rb index 89839709131..30ca07d5d2c 100644 --- a/spec/models/broadcast_message_spec.rb +++ b/spec/models/broadcast_message_spec.rb @@ -95,6 +95,12 @@ describe BroadcastMessage do end end + describe '#attributes' do + it 'includes message_html field' do + expect(subject.attributes.keys).to include("cached_markdown_version", "message_html") + end + end + describe '#active?' do it 'is truthy when started and not ended' do message = build(:broadcast_message) diff --git a/spec/models/concerns/cache_markdown_field_spec.rb b/spec/models/concerns/cache_markdown_field_spec.rb index 447279f19a8..7d555f15e39 100644 --- a/spec/models/concerns/cache_markdown_field_spec.rb +++ b/spec/models/concerns/cache_markdown_field_spec.rb @@ -23,6 +23,7 @@ describe CacheMarkdownField do include CacheMarkdownField cache_markdown_field :foo cache_markdown_field :baz, pipeline: :single_line + cache_markdown_field :zoo, whitelisted: true def self.add_attr(name) self.attribute_names += [name] @@ -35,7 +36,7 @@ describe CacheMarkdownField do add_attr :cached_markdown_version - [:foo, :foo_html, :bar, :baz, :baz_html].each do |name| + [:foo, :foo_html, :bar, :baz, :baz_html, :zoo, :zoo_html].each do |name| add_attr(name) end @@ -84,8 +85,8 @@ describe CacheMarkdownField do end describe '.attributes' do - it 'excludes cache attributes' do - expect(thing.attributes.keys.sort).to eq(%w[bar baz foo]) + it 'excludes cache attributes that is blacklisted by default' do + expect(thing.attributes.keys.sort).to eq(%w[bar baz cached_markdown_version foo zoo zoo_html]) end end @@ -297,7 +298,12 @@ describe CacheMarkdownField do it 'saves the changes using #update_columns' do expect(thing).to receive(:persisted?).and_return(true) expect(thing).to receive(:update_columns) - .with("foo_html" => updated_html, "baz_html" => "", "cached_markdown_version" => cache_version) + .with( + "foo_html" => updated_html, + "baz_html" => "", + "zoo_html" => "", + "cached_markdown_version" => cache_version + ) thing.refresh_markdown_cache! end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 71bd7972436..3beddaeddbd 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2388,6 +2388,12 @@ describe Project do project.change_head(project.default_branch) end + it 'updates commit count' do + expect(ProjectCacheWorker).to receive(:perform_async).with(project.id, [], [:commit_count]) + + project.change_head(project.default_branch) + end + it 'copies the gitattributes' do expect(project.repository).to receive(:copy_gitattributes).with(project.default_branch) project.change_head(project.default_branch) diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb index 772d1fbee2b..c12c4677af1 100644 --- a/spec/policies/project_policy_spec.rb +++ b/spec/policies/project_policy_spec.rb @@ -15,7 +15,7 @@ describe ProjectPolicy do read_project_for_iids read_issue_iid read_label read_milestone read_project_snippet read_project_member read_note create_project create_issue create_note upload_file create_merge_request_in - award_emoji read_release + award_emoji ] end @@ -24,7 +24,7 @@ describe ProjectPolicy do download_code fork_project create_project_snippet update_issue admin_issue admin_label admin_list read_commit_status read_build read_container_image read_pipeline read_environment read_deployment - read_merge_request download_wiki_code read_sentry_issue + read_merge_request download_wiki_code read_sentry_issue read_release ] end diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 60d9d7fed13..fdbb78b8829 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -13,12 +13,18 @@ shared_examples 'languages and percentages JSON response' do ) end - it 'returns expected language values' do - get api("/projects/#{project.id}/languages", user) + context "when the languages haven't been detected yet" do + it 'returns expected language values' do + get api("/projects/#{project.id}/languages", user) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response).to eq({}) - expect(response).to have_gitlab_http_status(:ok) - expect(json_response).to eq(expected_languages) - expect(json_response.count).to be > 1 + get api("/projects/#{project.id}/languages", user) + + expect(response).to have_gitlab_http_status(:ok) + expect(JSON.parse(response.body)).to eq(expected_languages) + end end context 'when the languages were detected before' do diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb index 1f317971a66..71ec091c42c 100644 --- a/spec/requests/api/releases_spec.rb +++ b/spec/requests/api/releases_spec.rb @@ -4,12 +4,14 @@ describe API::Releases do let(:project) { create(:project, :repository, :private) } let(:maintainer) { create(:user) } let(:reporter) { create(:user) } + let(:guest) { create(:user) } let(:non_project_member) { create(:user) } let(:commit) { create(:commit, project: project) } before do project.add_maintainer(maintainer) project.add_reporter(reporter) + project.add_guest(guest) project.repository.add_tag(maintainer, 'v0.1', commit.id) project.repository.add_tag(maintainer, 'v0.2', commit.id) @@ -66,6 +68,24 @@ describe API::Releases do end end + context 'when user is a guest' do + it 'responds 403 Forbidden' do + get api("/projects/#{project.id}/releases", guest) + + expect(response).to have_gitlab_http_status(:forbidden) + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it 'responds 200 OK' do + get api("/projects/#{project.id}/releases", guest) + + expect(response).to have_gitlab_http_status(:ok) + end + end + end + context 'when user is not a project member' do it 'cannot find the project' do get api("/projects/#{project.id}/releases", non_project_member) @@ -189,6 +209,24 @@ describe API::Releases do end end end + + context 'when user is a guest' do + it 'responds 403 Forbidden' do + get api("/projects/#{project.id}/releases/v0.1", guest) + + expect(response).to have_gitlab_http_status(:forbidden) + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it 'responds 200 OK' do + get api("/projects/#{project.id}/releases/v0.1", guest) + + expect(response).to have_gitlab_http_status(:ok) + end + end + end end context 'when specified tag is not found in the project' do diff --git a/spec/services/labels/available_labels_service_spec.rb b/spec/services/labels/available_labels_service_spec.rb new file mode 100644 index 00000000000..4d5c87ecc53 --- /dev/null +++ b/spec/services/labels/available_labels_service_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true +require 'spec_helper' + +describe Labels::AvailableLabelsService do + let(:user) { create(:user) } + let(:project) { create(:project, :public, group: group) } + let(:group) { create(:group) } + + let(:project_label) { create(:label, project: project) } + let(:other_project_label) { create(:label) } + let(:group_label) { create(:group_label, group: group) } + let(:other_group_label) { create(:group_label) } + let(:labels) { [project_label, other_project_label, group_label, other_group_label] } + + context '#find_or_create_by_titles' do + let(:label_titles) { labels.map(&:title).push('non existing title') } + + context 'when parent is a project' do + context 'when a user is not a project member' do + it 'returns only relevant label ids' do + result = described_class.new(user, project, labels: label_titles).find_or_create_by_titles + + expect(result).to match_array([project_label, group_label]) + end + end + + context 'when a user is a project member' do + before do + project.add_developer(user) + end + + it 'creates new labels for not found titles' do + result = described_class.new(user, project, labels: label_titles).find_or_create_by_titles + + expect(result.count).to eq(5) + expect(result).to include(project_label, group_label) + expect(result).not_to include(other_project_label, other_group_label) + end + end + end + + context 'when parent is a group' do + context 'when a user is not a group member' do + it 'returns only relevant label ids' do + result = described_class.new(user, group, labels: label_titles).find_or_create_by_titles + + expect(result).to match_array([group_label]) + end + end + + context 'when a user is a group member' do + before do + group.add_developer(user) + end + + it 'creates new labels for not found titles' do + result = described_class.new(user, group, labels: label_titles).find_or_create_by_titles + + expect(result.count).to eq(5) + expect(result).to include(group_label) + expect(result).not_to include(project_label, other_project_label, other_group_label) + end + end + end + end + + context '#filter_labels_ids_in_param' do + let(:label_ids) { labels.map(&:id).push(99999) } + + context 'when parent is a project' do + it 'returns only relevant label ids' do + result = described_class.new(user, project, ids: label_ids).filter_labels_ids_in_param(:ids) + + expect(result).to match_array([project_label.id, group_label.id]) + end + end + + context 'when parent is a group' do + it 'returns only relevant label ids' do + result = described_class.new(user, group, ids: label_ids).filter_labels_ids_in_param(:ids) + + expect(result).to match_array([group_label.id]) + end + end + end +end diff --git a/spec/services/projects/detect_repository_languages_service_spec.rb b/spec/services/projects/detect_repository_languages_service_spec.rb index deea1189cdf..b38bd62c9f0 100644 --- a/spec/services/projects/detect_repository_languages_service_spec.rb +++ b/spec/services/projects/detect_repository_languages_service_spec.rb @@ -19,6 +19,10 @@ describe Projects::DetectRepositoryLanguagesService, :clean_gitlab_redis_shared_ expect(names).to eq(%w[Ruby JavaScript HTML CoffeeScript]) end + + it 'updates detected_repository_languages flag' do + expect { subject.execute }.to change(project, :detected_repository_languages).to(true) + end end context 'with a previous detection' do @@ -36,6 +40,12 @@ describe Projects::DetectRepositoryLanguagesService, :clean_gitlab_redis_shared_ expect(repository_languages).to eq(%w[Ruby D]) end + + it "doesn't touch detected_repository_languages flag" do + expect(project).not_to receive(:update_column).with(:detected_repository_languages, true) + + subject.execute + end end context 'when no repository exists' do diff --git a/spec/services/projects/repository_languages_service_spec.rb b/spec/services/projects/repository_languages_service_spec.rb new file mode 100644 index 00000000000..61c1b8c5ec1 --- /dev/null +++ b/spec/services/projects/repository_languages_service_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe Projects::RepositoryLanguagesService do + let(:service) { described_class.new(project, project.owner) } + + context 'when detected_repository_languages flag is set' do + let(:project) { create(:project) } + + context 'when a project is without detected programming languages' do + it 'schedules a worker and returns the empty result' do + expect(::DetectRepositoryLanguagesWorker).to receive(:perform_async).with(project.id, project.owner.id) + expect(service.execute).to eq([]) + end + end + + context 'when a project is with detected programming languages' do + let!(:repository_language) { create(:repository_language, project: project) } + + it 'does not schedule a worker and returns the detected languages' do + expect(::DetectRepositoryLanguagesWorker).not_to receive(:perform_async).with(project.id, project.owner.id) + + languages = service.execute + + expect(languages.size).to eq(1) + expect(languages.last.attributes.values).to eq( + [project.id, repository_language.programming_language_id, repository_language.share] + ) + end + + it 'sets detected_repository_languages flag' do + expect { service.execute }.to change(project, :detected_repository_languages).from(nil).to(true) + end + end + end + + context 'when detected_repository_languages flag is not set' do + let!(:repository_language) { create(:repository_language, project: project) } + let(:project) { create(:project, detected_repository_languages: true) } + let(:languages) { service.execute } + + it 'returns repository languages' do + expect(languages.size).to eq(1) + expect(languages.last.attributes.values).to eq( + [project.id, repository_language.programming_language_id, repository_language.share] + ) + end + end +end diff --git a/spec/support/shared_examples/malicious_regexp_shared_examples.rb b/spec/support/shared_examples/malicious_regexp_shared_examples.rb index db69b75c0c8..a86050e2cf2 100644 --- a/spec/support/shared_examples/malicious_regexp_shared_examples.rb +++ b/spec/support/shared_examples/malicious_regexp_shared_examples.rb @@ -2,7 +2,8 @@ require 'timeout' shared_examples 'malicious regexp' do let(:malicious_text) { 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!' } - let(:malicious_regexp) { '(?i)^(([a-z])+.)+[A-Z]([a-z])+$' } + let(:malicious_regexp_re2) { '(?i)^(([a-z])+.)+[A-Z]([a-z])+$' } + let(:malicious_regexp_ruby) { '/^(([a-z])+.)+[A-Z]([a-z])+$/i' } it 'takes under a second' do expect { Timeout.timeout(1) { subject } }.not_to raise_error diff --git a/vendor/project_templates/android.tar.gz b/vendor/project_templates/android.tar.gz Binary files differindex 3df17a0d9a6..277aedaa1ca 100644 --- a/vendor/project_templates/android.tar.gz +++ b/vendor/project_templates/android.tar.gz |