diff options
246 files changed, 1591 insertions, 1186 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 68dea56a67d..383300a895f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -947,6 +947,20 @@ no_ee_check: - //@gitlab-org/gitlab-ce # GitLab Review apps +review-build-cng: + <<: *single-script-job + variables: + <<: *single-script-job-variables + SCRIPT_NAME: trigger-build + script: + - gem install gitlab --no-document + - apk add --update openssl curl jq + - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/review_apps/review-apps.sh + - chmod 755 review-apps.sh + - source ./review-apps.sh + - wait_for_job_to_be_done "gitlab:assets:compile" + - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./$SCRIPT_NAME cng + review-deploy: <<: *review-base retry: 2 @@ -961,15 +975,14 @@ review-deploy: <<: *review-environment on_stop: review-stop before_script: - - apk update && apk add jq - - gem install gitlab --no-document - script: - export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION) - export GITALY_VERSION=$(<GITALY_SERVER_VERSION) - export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION) + - apk update && apk add jq + - gem install gitlab --no-document - source ./scripts/review_apps/review-apps.sh - - wait_for_job_to_be_done "gitlab:assets:compile" - - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng + script: + - wait_for_job_to_be_done "review-build-cng" - check_kube_domain - download_gitlab_chart - ensure_namespace @@ -980,7 +993,6 @@ review-deploy: .review-qa-base: &review-qa-base <<: *review-docker - retry: 2 allow_failure: true variables: <<: *review-docker-variables diff --git a/CHANGELOG.md b/CHANGELOG.md index b47dc4e19ac..c1deab58d38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,192 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.7.0 (2019-01-22) + +### Security (14 changes, 1 of them is from the community) + +- Escape label and milestone titles to prevent XSS in GFM autocomplete. !2693 +- Bump Ruby on Rails to 5.0.7.1. !23396 (@blackst0ne) +- Delete confidential todos for user when downgraded to Guest. +- Project guests no longer are able to see refs page. +- Set URL rel attribute for broken URLs. +- Prevent leaking protected variables for ambiguous refs. +- Authorize before reading job information via API. +- Allow changing group CI/CD settings only for owners. +- Fix SSRF with import_url and remote mirror url. +- Don't expose cross project repositories through diffs when creating merge reqeusts. +- Validate bundle files before unpacking them. +- Issuable no longer is visible to users when project can't be viewed. +- Escape html entities in LabelReferenceFilter when no label found. +- Prevent private snippets from being embeddable. + +### Removed (3 changes, 1 of them is from the community) + +- Removes all instances of deprecated Gitlab Upgrader calls. !23603 (@jwolen) +- Removed discard draft comment button form notes. !24185 +- Remove migration to backfill project_repositories for legacy storage projects. !24299 + +### Fixed (42 changes, 7 of them are from the community) + +- Prevent awards emoji being updated when updating status. !23470 +- Allow merge after rebase without page refresh on FF repositories. !23572 +- Prevent admins from attempting hashed storage migration on read only DB. !23597 +- Correct the ordering of metrics on the performance dashboard. !23630 +- Display empty files properly on MR diffs. !23671 (Sean Nichols) +- Allow GitHub imports via token even if OAuth2 provider not configured. !23703 +- Update header navigation theme colors. !23734 (George Tsiolis) +- Fix login box bottom margins on signin page. !23739 (@gear54) +- Return an ApplicationSetting in CurrentSettings. !23766 +- Fix bug commenting on LFS images. !23812 +- Only prompt user once when navigating away from file editor. !23820 (Sam Bigelow) +- Display commit ID for discussions made on merge request commits. !23837 +- Stop autofocusing on diff comment after initial mount. !23849 +- Fix object storage not working properly with Google S3 compatibility. !23858 +- Fix project calendar feed when sorted by priority. !23870 +- Fix edit button disappearing in issue title. !23948 (Ruben Moya) +- Aligns build loader animation with the job log. !23959 +- Allow 'rake gitlab:cleanup:remote_upload_files' to read bucket files without having permissions to see all buckets. !23981 +- Correctly externalize pipeline tags. !24028 +- Fix error when creating labels in a new issue in the boards page. !24039 (Ruben Moya) +- Use 'parsePikadayDate' to parse due date string. !24045 +- Fix commit SHA not showing in merge request compare dropdown. !24084 +- Remove top margin in modal header titles. !24108 +- Drop Webhooks from project import/export config. !24121 +- Only validate project visibility when it has changed. !24142 +- Resolve About this feature link should open in new window. !24149 +- Add syntax highlighting to suggestion diff. !24156 +- Fix Bitbucket Server import only including first 25 pull requests. !24178 +- Enable caching for records which primary key is not `id`. !24245 +- Adjust applied suggestion reverting previous changes. !24250 +- Fix unexpected exception by failure of finding an actual head pipeline. !24257 +- Fix broken templated "Too many changes to show" text. !24282 +- Fix requests profiler in admin page not rendering HTML properly. !24291 +- Fix no avatar not showing in user selection box. !24346 +- Upgrade to gitaly 1.12.1. !24361 +- Fix runner eternal loop when update job result. !24481 +- Fix notification email for image diff notes. +- Fixed merge request diffs empty states. +- Fixed diff suggestions removing dashes. +- Don't hide CI dropdown behind diff summary. (gfyoung) +- Fix spacing on discussions. +- Fixes missing margin in releases block. + +### Changed (22 changes, 8 of them are from the community) + +- Show clusters of ancestors in cluster list page. !22996 +- Remove unnecessary line before reply holder. !23092 (George Tsiolis) +- Make the Pages permission setting more clear. !23146 +- Disable merging of labels with same names. !23265 +- Allow basic authentication on go get middleware. !23497 (Morty Choi @mortyccp) +- No longer require email subaddressing for issue creation by email. !23523 +- Adjust padding of .dropdown-title to comply with design specs. !23546 +- Make commit IDs in merge request discussion header monospace. !23562 +- Update environments breadcrumb. !23751 (George Tsiolis) +- Add date range in milestone change email notifications. !23762 +- Require Knative to be installed only on an RBAC kubernetes cluster. !23807 (Chris Baumbauer) +- Fix label and header styles in the job details sidebar. !23816 (Nathan Friend) +- Add % prefix to milestone reference links. !23928 +- Reorder sidebar menu item for group clusters. !24001 (George Tsiolis) +- Support CURD operation for Links as one of the Release assets. !24056 +- Upgrade Omniauth and JWT gems to switch away from Google+ API. !24068 +- Renames Milestone sort into Milestone due date. !24080 (Jacopo Beschi @jacopo-beschi) +- Discussion filter only displayed in discussions tab for merge requests. !24082 +- Make RBAC enabled default for new clusters. !24119 +- Hashed Storage: Only set as `read_only` when starting the per-project migration. !24128 +- Knative version bump 0.1.3 -> 0.2.2. (Chris Baumbauer) +- Show message on non-diff discussions. + +### Performance (7 changes) + +- Fix some N+1 queries related to Admin Dashboard, User Dashboards and Activity Stream. !23034 +- Add indexes to speed up CI query. !23188 +- Improve the loading time on merge request's discussion page by caching diff highlight. !23857 +- Cache avatar URLs and paths within a request. !23950 +- Improve snippet search performance by removing duplicate counts. !23952 +- Skip per-commit validations already evaluated. !23984 +- Fix timeout issues retrieving branches via API. !24034 + +### Added (29 changes, 6 of them are from the community) + +- Handle ci.skip push option. !15643 (Jonathon Reinhart) +- Add NGINX 0.16.0 and above metrics. !22133 +- Add project milestone link. !22552 +- Support tls communication in gitaly. !22602 +- Add option to make ci variables protected by default. !22744 (Alexis Reigel) +- Add project identifier as List-Id email Header to ease filtering. !22817 (Olivier Crête) +- Add markdown helper buttons to file editor. !23480 +- Allow to include templates in gitlab-ci.yml. !23495 +- Extend override check to also check arity. !23498 (Jacopo Beschi @jacopo-beschi) +- Add importing of issues from CSV file. !23532 +- Add submit feedback link to help dropdown. !23547 +- Send a notification email to project maintainers when a mirror update fails. !23595 +- Restore Object Pools when restoring an object pool. !23682 +- Creates component for release block. !23697 +- Configure Auto DevOps deployed applications with secrets from prefixed CI variables. !23719 +- Add name, author_id, and sha to releases table. !23763 +- Display a list of Sentry Issues in GitLab. !23770 +- Releases API. !23795 +- Creates frontend app for releases. !23796 +- Add new pipeline variable CI_COMMIT_SHORT_SHA. !23822 +- Create system notes on issue / MR creation when labels, milestone, or due date is set. !23859 +- Adds API documentation for releases. !23901 +- Add API Support for Kubernetes integration. !23922 +- Expose CI/CD predefined variable `CI_API_V4_URL`. !23936 +- Add Knative metrics to Prometheus. !23972 (Chris Baumbauer) +- Use reports syntax for Dependency scanning in Auto DevOps. !24081 +- Allow to include files from another projects in gitlab-ci.yml. !24101 +- User Popovers for Commit Infos, Member Lists and Snippets. !24132 +- Add no-color theme for syntax highlighting. (khm) + +### Other (45 changes, 30 of them are from the community) + +- Redesign project lists UI. !22682 +- [Rails5.1] Update functional specs to use new keyword format. !23095 (@blackst0ne) +- Update a condition to visibility a merge request collaboration message. !23104 (Harry Kiselev) +- Remove framework/mobile.scss. !23301 (Takuya Noguchi) +- Passing the separator argument as a positional parameter is deprecated. !23334 (Jasper Maes) +- Clarifies docs about CI `allow_failure`. !23367 (C.J. Jameson) +- Refactor issuable sidebar to use serializer. !23379 +- Refactor the logic of updating head pipelines for merge requests. !23502 +- Allow user to add Kubernetes cluster for clusterable when there are ancestor clusters. !23569 +- Adds explanatory text to input fields on user profile settings page. !23673 +- Externalize strings from `/app/views/shared/notes`. !23696 (Tao Wang) +- Remove rails 4 support in CI, Gemfiles, bin/ and config/. !23717 (Jasper Maes) +- Fix calendar events fetching error on private profile page. !23718 (Harry Kiselev) +- Update GitLab Workhorse to v8.0.0. !23740 +- Hide confidential events in the API. !23746 +- Changed Userpopover Fixtures and shadow color. !23768 +- Fix deprecation: Passing conditions to delete_all is deprecated. !23817 (Jasper Maes) +- Fix deprecation: Passing ActiveRecord::Base objects to sanitize_sql_hash_for_assignment. !23818 (Jasper Maes) +- Remove rails4 specific code. !23847 (Jasper Maes) +- Remove deprecated ActionDispatch::ParamsParser. !23848 (Jasper Maes) +- Fix deprecation: Comparing equality between ActionController::Parameters and a Hash is deprecated. !23855 (Jasper Maes) +- Fix deprecation: Directly inheriting from ActiveRecord::Migration is deprecated. !23884 (Jasper Maes) +- Fix deprecation: alias_method_chain is deprecated. Please, use Module#prepend instead. !23887 (Jasper Maes) +- Update specs to exclude possible false positive pass. !23893 (@blackst0ne) +- Passing an argument to force an association to reload is now deprecated. !23894 (Jasper Maes) +- ActiveRecord::Migration -> ActiveRecord::Migration[5.0]. !23910 (Jasper Maes) +- Split bio into individual line in extended user tooltips. !23940 +- Fix deprecation: redirect_to :back is deprecated. !23943 (Jasper Maes) +- Fix deprecation: insert_sql is deprecated and will be removed. !23944 (Jasper Maes) +- Upgrade @gitlab/ui to 1.16.2. !23946 +- convert specs in javascripts/ and support/ to new syntax. !23947 (Jasper Maes) +- Remove deprecated xhr from specs. !23949 (Jasper Maes) +- Remove app/views/shared/issuable/_filter.html.haml. !24008 (Takuya Noguchi) +- Fix deprecation: Using positional arguments in integration tests. !24009 (Jasper Maes) +- UI improvements for redesigned project lists. !24011 +- Update cert-manager chart from v0.5.0 to v0.5.2. !24025 (Takuya Noguchi) +- Hide spinner on empty activites list on user profile overview. !24063 +- Don't show Auto DevOps enabled banner for projects with CI file or CI disabled. !24067 +- Update GitLab Runner Helm Chart to 0.1.43. !24083 +- Fix navigation style in docs. !24090 (Takuya Noguchi) +- Remove gem install bundler from Docker-based Ruby environments. !24093 (Takuya Noguchi) +- Fix deprecation: Using positional arguments in integration tests. !24110 (Jasper Maes) +- Fix deprecation: returning false in Active Record and Active Model callbacks will not implicitly halt a callback chain. !24134 (Jasper Maes) +- ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddIndexesToCiBuildsAndPipelines. !24167 (Jasper Maes) +- Update url placeholder for the sentry configuration page. !24338 + + ## 11.6.5 (2019-01-17) ### Fixed (5 changes) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index f88cf52e6ef..cd99d386a8d 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.13.0
\ No newline at end of file +1.14.0
\ No newline at end of file @@ -1 +1 @@ -11.7.0-pre +11.8.0-pre diff --git a/app/assets/javascripts/diffs/components/compare_versions.vue b/app/assets/javascripts/diffs/components/compare_versions.vue index f0a827be7e8..3770b5c8864 100644 --- a/app/assets/javascripts/diffs/components/compare_versions.vue +++ b/app/assets/javascripts/diffs/components/compare_versions.vue @@ -3,6 +3,7 @@ import { mapActions, mapGetters, mapState } from 'vuex'; import { GlTooltipDirective, GlLink, GlButton } from '@gitlab/ui'; import { __ } from '~/locale'; import { getParameterValues, mergeUrlParams } from '~/lib/utils/url_utility'; +import { polyfillSticky } from '~/lib/utils/sticky'; import Icon from '~/vue_shared/components/icon.vue'; import CompareVersionsDropdown from './compare_versions_dropdown.vue'; @@ -54,10 +55,19 @@ export default { showDropdowns() { return !this.commit && this.mergeRequestDiffs.length; }, + fileTreeIcon() { + return this.showTreeList ? 'collapse-left' : 'expand-left'; + }, + toggleFileBrowserTitle() { + return this.showTreeList ? __('Hide file browser') : __('Show file browser'); + }, baseVersionPath() { return this.mergeRequestDiff.base_version_path; }, }, + mounted() { + polyfillSticky(this.$el); + }, methods: { ...mapActions('diffs', [ 'setInlineDiffViewType', @@ -73,7 +83,7 @@ export default { </script> <template> - <div class="mr-version-controls"> + <div class="mr-version-controls" :class="{ 'is-fileTreeOpen': showTreeList }"> <div class="mr-version-menus-container content-block"> <button v-gl-tooltip.hover @@ -82,10 +92,10 @@ export default { :class="{ active: showTreeList, }" - :title="__('Toggle file browser')" + :title="toggleFileBrowserTitle" @click="toggleShowTreeList" > - <icon name="hamburger" /> + <icon :name="fileTreeIcon" /> </button> <div v-if="showDropdowns" class="d-flex align-items-center compare-versions-container"> Changes between @@ -108,7 +118,7 @@ export default { {{ __('Viewing commit') }} <gl-link :href="commit.commit_url" class="monospace">{{ commit.short_id }}</gl-link> </div> - <div class="inline-parallel-buttons d-none d-md-flex ml-auto"> + <div class="inline-parallel-buttons d-none d-lg-flex ml-auto"> <gl-button v-if="commit || startVersion" :href="latestVersionPath" diff --git a/app/assets/javascripts/dirty_submit/dirty_submit_form.js b/app/assets/javascripts/dirty_submit/dirty_submit_form.js index d8d0fa1fac4..00e41dd0301 100644 --- a/app/assets/javascripts/dirty_submit/dirty_submit_form.js +++ b/app/assets/javascripts/dirty_submit/dirty_submit_form.js @@ -25,15 +25,16 @@ class DirtySubmitForm { DirtySubmitForm.THROTTLE_DURATION, ); this.form.addEventListener('input', throttledUpdateDirtyInput); + this.form.addEventListener('change', throttledUpdateDirtyInput); this.form.addEventListener('submit', event => this.formSubmit(event)); } updateDirtyInput(event) { - const input = event.target; + const { target } = event; - if (!input.dataset.isDirtySubmitInput) return; + if (!target.dataset.isDirtySubmitInput) return; - this.updateDirtyInputs(input); + this.updateDirtyInputs(target); this.toggleSubmission(); } diff --git a/app/assets/javascripts/notes/components/note_form.vue b/app/assets/javascripts/notes/components/note_form.vue index 6dbb858e93d..269b4a4b117 100644 --- a/app/assets/javascripts/notes/components/note_form.vue +++ b/app/assets/javascripts/notes/components/note_form.vue @@ -6,6 +6,7 @@ import issueWarning from '../../vue_shared/components/issue/issue_warning.vue'; import markdownField from '../../vue_shared/components/markdown/field.vue'; import issuableStateMixin from '../mixins/issuable_state'; import resolvable from '../mixins/resolvable'; +import { __ } from '~/locale'; export default { name: 'NoteForm', @@ -33,7 +34,7 @@ export default { saveButtonTitle: { type: String, required: false, - default: 'Save comment', + default: __('Save comment'), }, discussion: { type: Object, diff --git a/app/assets/stylesheets/components/related_items_list.scss b/app/assets/stylesheets/components/related_items_list.scss new file mode 100644 index 00000000000..048a5c0300c --- /dev/null +++ b/app/assets/stylesheets/components/related_items_list.scss @@ -0,0 +1,381 @@ +$item-path-max-width: 160px; +$item-milestone-max-width: 120px; +$item-weight-max-width: 48px; + +.related-items-list { + padding: $gl-padding-4; + + &, + .list-item:last-child { + margin-bottom: 0; + } +} + +.item-body { + display: flex; + position: relative; + align-items: center; + padding: $gl-padding-8; + line-height: $gl-line-height; + + .item-contents { + display: flex; + align-items: center; + flex-wrap: wrap; + flex-grow: 1; + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed, + .confidential-icon, + .item-milestone .icon, + .item-weight .board-card-info-icon { + min-width: $gl-padding; + cursor: help; + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + margin-right: $gl-padding-4; + } + + .confidential-icon { + align-self: baseline; + color: $orange-600; + margin-right: $gl-padding-4; + } + + .item-title { + flex-basis: 100%; + margin-bottom: $gl-padding-8; + font-size: $gl-font-size-small; + + &.mr-title { + font-weight: $gl-font-weight-bold; + } + + .sortable-link { + max-width: 85%; + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + display: none; + } + } + + .item-meta { + display: flex; + flex-wrap: wrap; + flex-basis: 100%; + font-size: $gl-font-size-small; + color: $gl-text-color-secondary; + + .item-meta-child { + order: 0; + display: flex; + flex-wrap: wrap; + flex-basis: 100%; + + .item-due-date, + .item-weight { + margin-left: $gl-padding-8; + } + + .item-milestone, + .item-weight { + cursor: help; + } + + .item-milestone { + text-decoration: none; + max-width: $item-milestone-max-width; + } + + .item-due-date { + margin-right: 0; + } + + .item-weight { + margin-right: 0; + max-width: $item-weight-max-width; + } + } + + .item-path-id .path-id-text, + .item-milestone .milestone-title, + .item-due-date, + .item-weight .board-card-info-text { + color: $gl-text-color-secondary; + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + + .item-path-id { + margin-top: $gl-padding-4; + font-size: $gl-font-size-xs; + white-space: nowrap; + + .path-id-text { + font-weight: $gl-font-weight-bold; + max-width: $item-path-max-width; + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + display: block; + } + + &:not(.mr-item-path) { + order: 1; + } + } + + .item-milestone .ic-clock { + color: $gl-text-color-tertiary; + margin-right: $gl-padding-4; + } + + .item-assignees { + order: 2; + align-self: flex-end; + align-items: center; + margin-left: auto; + + .user-avatar-link { + margin-right: -$gl-padding-4; + + &:nth-of-type(1) { + z-index: 2; + } + + &:nth-of-type(2) { + z-index: 1; + } + + &:last-child { + margin-right: 0; + } + } + + .avatar { + height: $gl-padding; + width: $gl-padding; + margin-right: 0; + vertical-align: bottom; + } + + .avatar-counter { + height: $gl-padding; + border: 1px solid transparent; + background-color: $gl-text-color-tertiary; + font-weight: $gl-font-weight-bold; + padding: 0 $gl-padding-4; + line-height: $gl-padding; + } + } + } + + .btn-item-remove { + position: absolute; + right: 0; + top: $gl-padding-4 / 2; + padding: $gl-padding-4; + margin-right: $gl-padding-4 / 2; + line-height: 0; + border-color: transparent; + color: $gl-text-color-secondary; + + &:hover { + color: $gl-text-color; + } + } +} + +.mr-status-wrapper, +.mr-ci-status + { + line-height: 0; +} + +@include media-breakpoint-up(sm) { + .item-body { + .item-contents .item-title { + .mr-title-link, + .sortable-link { + max-width: 90%; + } + } + } +} + +/* Small devices (landscape phones, 768px and up) */ +@include media-breakpoint-up(md) { + .item-body { + .item-contents { + min-width: 0; + + .item-title { + flex-basis: unset; + // 95% because we compensate + // for remove button which is + // positioned absolutely + width: 95%; + margin-bottom: $gl-padding-4; + + .mr-title-link, + .sortable-link { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-width: 100%; + } + } + + .item-meta { + .item-path-id { + order: 0; + margin-top: 0; + } + + .item-meta-child { + flex-basis: unset; + margin-left: auto; + margin-right: $gl-padding-4; + + ~ .item-assignees { + margin-left: $gl-padding-4; + } + } + + .item-assignees { + margin-bottom: 0; + margin-left: 0; + order: 2; + } + } + } + + .btn-item-remove { + order: 1; + } + } +} + +/* Medium devices (desktops, 992px and up) */ +@include media-breakpoint-up(lg) { + .item-body { + padding: $gl-padding; + + .item-title { + font-size: $gl-font-size; + } + + .item-meta .item-path-id { + font-size: inherit; // Base size given to `item-meta` is `$gl-font-size-small` + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + margin-right: $gl-padding-4; + } + } +} + +/* Large devices (large desktops, 1200px and up) */ +@include media-breakpoint-up(xl) { + .item-body { + padding: $gl-padding-8; + padding-left: $gl-padding; + + .item-contents { + flex-wrap: nowrap; + overflow: hidden; + + .item-title { + display: flex; + margin-bottom: 0; + min-width: 0; + width: auto; + flex-basis: unset; + font-weight: $gl-font-weight-normal; + + .mr-title-link, + .sortable-link { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + display: block; + margin-right: $gl-padding-8; + } + + .confidential-icon { + align-self: auto; + margin-top: 0; + } + } + + .item-meta { + margin-top: 0; + justify-content: flex-end; + flex: 1; + flex-wrap: nowrap; + + .item-path-id { + order: 0; + margin-top: 0; + margin-left: $gl-padding-8; + margin-right: auto; + + .issue-token-state-icon-open, + .issue-token-state-icon-closed { + display: none; + } + } + + .item-meta-child { + margin-left: $gl-padding-8; + flex-wrap: nowrap; + } + + .item-assignees { + flex-grow: 0; + margin-top: 0; + margin-right: $gl-padding-4; + + .avatar { + height: $gl-padding-24; + width: $gl-padding-24; + } + + .avatar-counter { + height: $gl-padding-24; + min-width: $gl-padding-24; + line-height: $gl-padding-24; + border-radius: $gl-padding-24; + } + } + } + } + + .btn-item-remove { + position: relative; + align-self: center; + top: initial; + right: 0; + margin-right: 0; + padding: $btn-sm-side-margin; + + &:hover { + border-color: $border-color; + } + } + } +} diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index c1666c728f3..e886a54dc99 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -664,3 +664,8 @@ $priority-label-empty-state-width: 114px; Issues Analytics */ $issues-analytics-popover-boarder-color: rgba(0, 0, 0, 0.15); +/* +Merge Requests +*/ +$mr-tabs-height: 51px; +$mr-version-controls-height: 56px; diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index b78f11aadf1..4f804866886 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -9,7 +9,7 @@ @media (min-width: map-get($grid-breakpoints, md)) { position: -webkit-sticky; position: sticky; - top: $header-height + 51px; + top: $mr-version-controls-height + $header-height + $mr-tabs-height; margin-left: -1px; border-left: 1px solid $border-color; z-index: 102; @@ -19,6 +19,7 @@ .with-performance-bar & { top: $header-height + 36px + $performance-bar-height; + } } @@ -34,7 +35,7 @@ } .with-performance-bar & { - top: 127px; + top: $header-height + $performance-bar-height + $mr-version-controls-height + $mr-tabs-height; } } @@ -1026,8 +1027,9 @@ .tree-list-holder { position: -webkit-sticky; position: sticky; - top: 100px; - max-height: calc(100vh - 100px); + $top-pos: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px; + top: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px; + max-height: calc(100vh - $top-pos); padding-right: $gl-padding; .file-row { @@ -1036,8 +1038,9 @@ } .with-performance-bar & { - top: 135px; - max-height: calc(100vh - 135px); + $performance-bar-top-pos: $performance-bar-height + $top-pos; + top: $performance-bar-top-pos; + max-height: calc(100vh - $performance-bar-top-pos); } } diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss index 6c847fc0d53..0037364978c 100644 --- a/app/assets/stylesheets/pages/issues.scss +++ b/app/assets/stylesheets/pages/issues.scss @@ -80,7 +80,6 @@ ul.related-merge-requests > li { } } -.merge-requests-title, .related-branches-title { font-size: 16px; font-weight: $gl-font-weight-bold; @@ -91,23 +90,16 @@ ul.related-merge-requests > li { } .merge-request-status { - font-size: 13px; - padding: 0 5px; - color: $white-light; - height: 20px; - border-radius: 3px; - line-height: 18px; - &.merged { - background: $blue-500; + color: $blue-500; } &.closed { - background: $red-500; + color: $red-500; } &.open { - background: $green-500; + color: $green-500; } } diff --git a/app/assets/stylesheets/pages/issues/issue_count_badge.scss b/app/assets/stylesheets/pages/issues/issue_count_badge.scss index 4fba89e956b..64ca61f7094 100644 --- a/app/assets/stylesheets/pages/issues/issue_count_badge.scss +++ b/app/assets/stylesheets/pages/issues/issue_count_badge.scss @@ -1,11 +1,13 @@ -.issue-count-badge { +.issue-count-badge, +.mr-count-badge { display: inline-flex; border-radius: $border-radius-base; border: 1px solid $border-color; padding: 5px $gl-padding-8; } -.issue-count-badge-count { +.issue-count-badge-count, +.mr-count-badge-count { display: inline-flex; align-items: center; } diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 1e4b8d8b7e4..53afb182b54 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -708,6 +708,7 @@ .mr-version-controls { position: relative; + z-index: 103; background: $gray-light; color: $gl-text-color; @@ -755,13 +756,37 @@ color: $orange-500; padding-right: 5px; } + + @include media-breakpoint-up(md) { + position: -webkit-sticky; + position: sticky; + top: $header-height + $mr-tabs-height; + width: 100%; + border-top: 1px solid $border-color; + + &.is-fileTreeOpen { + margin-left: -16px; + width: calc(100% + 32px); + } + + .mr-version-menus-container { + flex-wrap: nowrap; + } + + .with-performance-bar & { + top: $header-height + $performance-bar-height + $mr-tabs-height; + } + } } .merge-request-tabs-holder { top: $header-height; z-index: 200; background-color: $white-light; - border-bottom: 1px solid $border-color; + + @include media-breakpoint-down(md) { + border-bottom: 1px solid $border-color; + } @include media-breakpoint-up(sm) { position: sticky; @@ -816,7 +841,7 @@ display: flex; justify-content: space-between; - @include media-breakpoint-down(md) { + @include media-breakpoint-down(sm) { flex-direction: column-reverse; } diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb index c114e16edf8..4ec0e94df9a 100644 --- a/app/controllers/concerns/uploads_actions.rb +++ b/app/controllers/concerns/uploads_actions.rb @@ -29,7 +29,13 @@ module UploadsActions def show return render_404 unless uploader&.exists? - expires_in 0.seconds, must_revalidate: true, private: true + if cache_publicly? + # We need to reset caching from the applications controller to get rid of the no-store value + headers['Cache-Control'] = '' + expires_in 5.minutes, public: true, must_revalidate: false + else + expires_in 0.seconds, must_revalidate: true, private: true + end disposition = uploader.image_or_video? ? 'inline' : 'attachment' @@ -114,6 +120,10 @@ module UploadsActions nil end + def cache_publicly? + false + end + def model strong_memoize(:model) { find_model } end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 878816475b2..d3af35723ac 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -10,10 +10,10 @@ class ProjectsController < Projects::ApplicationController prepend_before_action(only: [:show]) { authenticate_sessionless_user!(:rss) } before_action :whitelist_query_limiting, only: [:create] - before_action :authenticate_user!, except: [:index, :show, :activity, :refs] + before_action :authenticate_user!, except: [:index, :show, :activity, :refs, :resolve] before_action :redirect_git_extension, only: [:show] - before_action :project, except: [:index, :new, :create] - before_action :repository, except: [:index, :new, :create] + before_action :project, except: [:index, :new, :create, :resolve] + before_action :repository, except: [:index, :new, :create, :resolve] before_action :assign_ref_vars, only: [:show], if: :repo_exists? before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?] before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?] @@ -442,4 +442,14 @@ class ProjectsController < Projects::ApplicationController def present_project @project = @project.present(current_user: current_user) end + + def resolve + @project = Project.find(params[:id]) + + if can?(current_user, :read_project, @project) + redirect_to @project + else + render_404 + end + end end diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index fa5d84633b5..519e7439205 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -70,6 +70,10 @@ class UploadsController < ApplicationController end end + def cache_publicly? + User === model || Appearance === model + end + def upload_model_class MODEL_CLASSES[params[:model]] || raise(UnknownUploadModelError) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 82bb2d1a805..9efa84b02f0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -268,6 +268,17 @@ module ApplicationHelper _('You are on a read-only GitLab instance.') end + def client_class_list + "gl-browser-#{browser.id} gl-platform-#{browser.platform.id}" + end + + def client_js_flags + { + "is#{browser.id.to_s.titlecase}": true, + "is#{browser.platform.id.to_s.titlecase}": true + } + end + def autocomplete_data_sources(object, noteable_type) return {} unless object && noteable_type diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb index 0c0247da1fb..f17da0bb7b1 100644 --- a/app/models/clusters/applications/runner.rb +++ b/app/models/clusters/applications/runner.rb @@ -3,7 +3,7 @@ module Clusters module Applications class Runner < ActiveRecord::Base - VERSION = '0.1.43'.freeze + VERSION = '0.1.45'.freeze self.table_name = 'clusters_applications_runners' diff --git a/app/models/issue.rb b/app/models/issue.rb index b7e13bcbccf..5c4ecbfdf4e 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -230,7 +230,8 @@ class Issue < ActiveRecord::Base end def check_for_spam? - project.public? && (title_changed? || description_changed?) + publicly_visible? && + (title_changed? || description_changed? || confidential_changed?) end def as_json(options = {}) diff --git a/app/models/label.rb b/app/models/label.rb index 5d2d1afd1d9..1c3db3eb35d 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -214,6 +214,7 @@ class Label < ActiveRecord::Base super(options).tap do |json| json[:type] = self.try(:type) json[:priority] = priority(options[:project]) if options.key?(:project) + json[:textColor] = text_color end end diff --git a/app/uploaders/personal_file_uploader.rb b/app/uploaders/personal_file_uploader.rb index 25474b494ff..272837aa6ce 100644 --- a/app/uploaders/personal_file_uploader.rb +++ b/app/uploaders/personal_file_uploader.rb @@ -6,8 +6,15 @@ class PersonalFileUploader < FileUploader options.storage_path end - def self.base_dir(model, _store = nil) - File.join(options.base_dir, model_path_segment(model)) + def self.base_dir(model, store = nil) + base_dirs(model)[store || Store::LOCAL] + end + + def self.base_dirs(model) + { + Store::LOCAL => File.join(options.base_dir, model_path_segment(model)), + Store::REMOTE => model_path_segment(model) + } end def self.model_path_segment(model) @@ -33,13 +40,6 @@ class PersonalFileUploader < FileUploader store_dirs[object_store] end - def store_dirs - { - Store::LOCAL => File.join(base_dir, dynamic_segment), - Store::REMOTE => File.join(self.class.model_path_segment(model), dynamic_segment) - } - end - private def secure_url diff --git a/app/views/layouts/_init_client_detection_flags.html.haml b/app/views/layouts/_init_client_detection_flags.html.haml new file mode 100644 index 00000000000..c729f8aa696 --- /dev/null +++ b/app/views/layouts/_init_client_detection_flags.html.haml @@ -0,0 +1,7 @@ +- client = client_js_flags + +- if client + -# haml-lint:disable InlineJavaScript + :javascript + gl = window.gl || {}; + gl.client = #{client.to_json}; diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 1f4d24d996c..4373240001e 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -1,8 +1,9 @@ !!! 5 %html{ lang: I18n.locale, class: page_class } = render "layouts/head" - %body{ class: "#{user_application_theme} #{@body_class}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}", find_file: find_file_path } } + %body{ class: "#{user_application_theme} #{@body_class} #{client_class_list}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}", find_file: find_file_path } } = render "layouts/init_auto_complete" if @gfm_form + = render "layouts/init_client_detection_flags" = render 'peek/bar' = render partial: "layouts/header/default", locals: { project: @project, group: @group } = render 'layouts/page', sidebar: sidebar, nav: nav diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml index 31f1cf560e2..12da62f4c64 100644 --- a/app/views/projects/_activity.html.haml +++ b/app/views/projects/_activity.html.haml @@ -1,5 +1,5 @@ %div{ class: container_class } - .nav-block.d-none.d-sm-block.activities + .nav-block.d-none.d-sm-flex.activities = render 'shared/event_filter' .controls = link_to project_path(@project, rss_url_options), title: s_("ProjectActivityRSS|Subscribe"), class: 'btn d-none d-sm-inline-block has-tooltip' do diff --git a/app/views/projects/issues/_merge_requests.html.haml b/app/views/projects/issues/_merge_requests.html.haml index 5c36d2202a6..eb46bf5c6a3 100644 --- a/app/views/projects/issues/_merge_requests.html.haml +++ b/app/views/projects/issues/_merge_requests.html.haml @@ -1,35 +1,35 @@ - if @merge_requests.any? - %h2.merge-requests-title - = pluralize(@merge_requests.count, 'Related Merge Request') - %ul.unstyled-list.related-merge-requests - - has_any_head_pipeline = @merge_requests.any?(&:head_pipeline_id) - - @merge_requests.each do |merge_request| - %li - %span.merge-request-ci-status - - if merge_request.head_pipeline - = render_pipeline_status(merge_request.head_pipeline) - - elsif has_any_head_pipeline - = icon('blank fw') - %span.merge-request-id - = merge_request.to_reference - %span.merge-request-info - %strong - = link_to merge_request.title, merge_request_path(merge_request), class: "row_title" - - unless @issue.project.id == merge_request.target_project.id - in - - project = merge_request.target_project - = link_to project.full_name, project_path(project) + .card-slim.mt-3 + .card-header + %h2.card-title.mt-0.mb-0.h5.merge-requests-title + %span.mr-1.bold + = _('Related merge requests') + .d-inline-flex.lh-100.align-middle + .mr-count-badge + .mr-count-badge-count + = sprite_icon('merge-request', size: 16, css_class: 'mr-1 text-secondary') + = @merge_requests.count + %ul.content-list.related-items-list + - has_any_head_pipeline = @merge_requests.any?(&:head_pipeline_id) + - @merge_requests.each do |merge_request| + %li.list-item.py-0.px-0 + .item-body.issuable-info-container.py-lg-3.px-lg-3.pl-md-3 + .item-contents + .item-title.d-flex.align-items-center.mr-title + = render partial: 'projects/issues/merge_requests_status', locals: { merge_request: merge_request, css_class: 'd-none d-xl-block append-right-8' } + = link_to merge_request.title, merge_request_path(merge_request), { class: 'mr-title-link'} + .item-meta + = render partial: 'projects/issues/merge_requests_status', locals: { merge_request: merge_request, css_class: 'd-xl-none d-lg-block append-right-5' } + %span.d-flex.align-items-center.append-right-8.mr-item-path.item-path-id.mt-0 + %span.path-id-text.bold.text-truncate{ data: { toggle: 'tooltip'}, title: merge_request.target_project.full_path } + = merge_request.target_project.full_path + = merge_request.to_reference + %span.mr-ci-status.flex-md-grow-1.justify-content-end.d-flex.ml-md-2 + - if merge_request.head_pipeline + = render_pipeline_status(merge_request.head_pipeline, tooltip_placement: 'bottom') + - elsif has_any_head_pipeline + = icon('blank fw') - - if merge_request.merged? - %span.merge-request-status.prepend-left-10.merged - Merged - - elsif merge_request.closed? - %span.merge-request-status.prepend-left-10.closed - Closed - - else - %span.merge-request-status.prepend-left-10.open - Open - - - if @closed_by_merge_requests.present? - %li - = render partial: 'projects/issues/closed_by_box', locals: {merge_request_count: @merge_requests.count} + - if @closed_by_merge_requests.present? + %p + = render partial: 'projects/issues/closed_by_box', locals: {merge_request_count: @merge_requests.count} diff --git a/app/views/projects/issues/_merge_requests_status.html.haml b/app/views/projects/issues/_merge_requests_status.html.haml new file mode 100644 index 00000000000..38126d6f0c6 --- /dev/null +++ b/app/views/projects/issues/_merge_requests_status.html.haml @@ -0,0 +1,22 @@ +- time_format = '%b %e, %Y %l:%M%P %Z%z' + +- if merge_request.merged? + - mr_status_date = merge_request.merged_at + - mr_status_title = _('Merged') + - mr_status_icon = 'merge' + - mr_status_class = 'merged' +- elsif merge_request.closed? + - mr_status_date = merge_request.closed_event&.created_at + - mr_status_title = _('Closed') + - mr_status_icon = 'issue-close' + - mr_status_class = 'closed' +- else + - mr_status_date = merge_request.created_at + - mr_status_title = _('Opened') + - mr_status_icon = 'issue-open-m' + - mr_status_class = 'open' + +- mr_status_tooltip = "<div><span class=\"bold\">#{mr_status_title}</span> #{time_ago_in_words(mr_status_date)} ago</div><span class=\"text-tertiary\">#{l(mr_status_date.to_time, format: time_format)}</span>" + +%span.mr-status-wrapper.suggestion-help-hover{ class: css_class, data: { toggle: 'tooltip', placement: 'bottom', html: 'true', title: mr_status_tooltip } } + = sprite_icon(mr_status_icon, size: 16, css_class: "merge-request-status #{mr_status_class}") diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb index 61d866b1f02..ae853ec9316 100644 --- a/app/workers/build_finished_worker.rb +++ b/app/workers/build_finished_worker.rb @@ -9,14 +9,26 @@ class BuildFinishedWorker # rubocop: disable CodeReuse/ActiveRecord def perform(build_id) Ci::Build.find_by(id: build_id).try do |build| - # We execute that in sync as this access the files in order to access local file, and reduce IO - BuildTraceSectionsWorker.new.perform(build.id) - BuildCoverageWorker.new.perform(build.id) - - # We execute that async as this are two independent operations that can be executed after TraceSections and Coverage - BuildHooksWorker.perform_async(build.id) - ArchiveTraceWorker.perform_async(build.id) + process_build(build) end end # rubocop: enable CodeReuse/ActiveRecord + + private + + # Processes a single CI build that has finished. + # + # This logic resides in a separate method so that EE can extend it more + # easily. + # + # @param [Ci::Build] build The build to process. + def process_build(build) + # We execute these in sync to reduce IO. + BuildTraceSectionsWorker.new.perform(build.id) + BuildCoverageWorker.new.perform(build.id) + + # We execute these async as these are independent operations. + BuildHooksWorker.perform_async(build.id) + ArchiveTraceWorker.perform_async(build.id) + end end diff --git a/app/workers/expire_pipeline_cache_worker.rb b/app/workers/expire_pipeline_cache_worker.rb index c96e8a0379b..148384600b6 100644 --- a/app/workers/expire_pipeline_cache_worker.rb +++ b/app/workers/expire_pipeline_cache_worker.rb @@ -11,16 +11,9 @@ class ExpirePipelineCacheWorker pipeline = Ci::Pipeline.find_by(id: pipeline_id) return unless pipeline - project = pipeline.project store = Gitlab::EtagCaching::Store.new - store.touch(project_pipelines_path(project)) - store.touch(project_pipeline_path(project, pipeline)) - store.touch(commit_pipelines_path(project, pipeline.commit)) unless pipeline.commit.nil? - store.touch(new_merge_request_pipelines_path(project)) - each_pipelines_merge_request_path(project, pipeline) do |path| - store.touch(path) - end + update_etag_cache(pipeline, store) Gitlab::Cache::Ci::ProjectPipelineStatus.update_for_pipeline(pipeline) end @@ -51,4 +44,23 @@ class ExpirePipelineCacheWorker yield(path) end end + + # Updates ETag caches of a pipeline. + # + # This logic resides in a separate method so that EE can more easily extend + # it. + # + # @param [Ci::Pipeline] pipeline + # @param [Gitlab::EtagCaching::Store] store + def update_etag_cache(pipeline, store) + project = pipeline.project + + store.touch(project_pipelines_path(project)) + store.touch(project_pipeline_path(project, pipeline)) + store.touch(commit_pipelines_path(project, pipeline.commit)) unless pipeline.commit.nil? + store.touch(new_merge_request_pipelines_path(project)) + each_pipelines_merge_request_path(project, pipeline) do |path| + store.touch(path) + end + end end diff --git a/changelogs/unreleased/18667-handle-push-opts.yml b/changelogs/unreleased/18667-handle-push-opts.yml deleted file mode 100644 index 204293476f6..00000000000 --- a/changelogs/unreleased/18667-handle-push-opts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Handle ci.skip push option -merge_request: 15643 -author: Jonathon Reinhart -type: added diff --git a/changelogs/unreleased/23367-clarify-docs-allow-failure.yml b/changelogs/unreleased/23367-clarify-docs-allow-failure.yml deleted file mode 100644 index 221d9e83ffb..00000000000 --- a/changelogs/unreleased/23367-clarify-docs-allow-failure.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clarifies docs about CI `allow_failure` -merge_request: 23367 -author: C.J. Jameson -type: other diff --git a/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml b/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml deleted file mode 100644 index 00eb5223d58..00000000000 --- a/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add markdown helper buttons to file editor -merge_request: 23480 -author: -type: added diff --git a/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml b/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml deleted file mode 100644 index 4139099eac3..00000000000 --- a/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: No longer require email subaddressing for issue creation by email -merge_request: 23523 -author: -type: changed diff --git a/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml b/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml deleted file mode 100644 index 65f5253a271..00000000000 --- a/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow user to add Kubernetes cluster for clusterable when there are ancestor clusters -merge_request: 23569 -author: -type: other diff --git a/changelogs/unreleased/34758-list-ancestor-clusters.yml b/changelogs/unreleased/34758-list-ancestor-clusters.yml deleted file mode 100644 index 8fdba7ba90a..00000000000 --- a/changelogs/unreleased/34758-list-ancestor-clusters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show clusters of ancestors in cluster list page -merge_request: 22996 -author: -type: changed diff --git a/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml b/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml deleted file mode 100644 index 9ea2157bfb7..00000000000 --- a/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes all instances of deprecated Gitlab Upgrader calls -merge_request: 23603 -author: '@jwolen' -type: removed diff --git a/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml b/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml deleted file mode 100644 index 5567aad6320..00000000000 --- a/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add API Support for Kubernetes integration -merge_request: 23922 -author: -type: added diff --git a/changelogs/unreleased/41766-vue-component.yml b/changelogs/unreleased/41766-vue-component.yml deleted file mode 100644 index 12343c8ce84..00000000000 --- a/changelogs/unreleased/41766-vue-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates component for release block -merge_request: 23697 -author: -type: added diff --git a/changelogs/unreleased/41766-vuex-store.yml b/changelogs/unreleased/41766-vuex-store.yml deleted file mode 100644 index f20fc736a6f..00000000000 --- a/changelogs/unreleased/41766-vuex-store.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates frontend app for releases -merge_request: 23796 -author: -type: added diff --git a/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml b/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml deleted file mode 100644 index 9892466ca50..00000000000 --- a/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extend override check to also check arity -merge_request: 23498 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml b/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml deleted file mode 100644 index f5d99e9a448..00000000000 --- a/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add submit feedback link to help dropdown -merge_request: 23547 -author: -type: added diff --git a/changelogs/unreleased/44353-improve-snippet-search-performance.yml b/changelogs/unreleased/44353-improve-snippet-search-performance.yml deleted file mode 100644 index 2ecbcef8843..00000000000 --- a/changelogs/unreleased/44353-improve-snippet-search-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve snippet search performance by removing duplicate counts -merge_request: 23952 -author: -type: performance diff --git a/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml b/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml deleted file mode 100644 index ba9edc8740d..00000000000 --- a/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refactor issuable sidebar to use serializer -merge_request: 23379 -author: -type: other diff --git a/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml b/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml new file mode 100644 index 00000000000..28e2a4cc377 --- /dev/null +++ b/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml @@ -0,0 +1,5 @@ +--- +title: Redesigned related merge requests in issue page. +merge_request: 24270 +author: +type: changed diff --git a/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml b/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml deleted file mode 100644 index fd1e4605f2d..00000000000 --- a/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow merge after rebase without page refresh on FF repositories -merge_request: 23572 -author: -type: fixed diff --git a/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml b/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml deleted file mode 100644 index 65efa85176b..00000000000 --- a/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Configure Auto DevOps deployed applications with secrets from prefixed CI variables -merge_request: 23719 -author: -type: added diff --git a/changelogs/unreleased/49231-import-issues-csv.yml b/changelogs/unreleased/49231-import-issues-csv.yml deleted file mode 100644 index c10bd8143b2..00000000000 --- a/changelogs/unreleased/49231-import-issues-csv.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add importing of issues from CSV file -merge_request: 23532 -author: -type: added diff --git a/changelogs/unreleased/50013-add-browser-platform-flags.yml b/changelogs/unreleased/50013-add-browser-platform-flags.yml new file mode 100644 index 00000000000..6176b8b64a7 --- /dev/null +++ b/changelogs/unreleased/50013-add-browser-platform-flags.yml @@ -0,0 +1,5 @@ +--- +title: Add CSS & JS global flags to represent browser and platform +merge_request: 24017 +author: +type: other diff --git a/changelogs/unreleased/51485-new-issue-labels-note.yml b/changelogs/unreleased/51485-new-issue-labels-note.yml deleted file mode 100644 index a312d379ce2..00000000000 --- a/changelogs/unreleased/51485-new-issue-labels-note.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create system notes on issue / MR creation when labels, milestone, or due date is set -merge_request: 23859 -author: -type: added diff --git a/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml b/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml deleted file mode 100644 index a845234b42f..00000000000 --- a/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Stop autofocusing on diff comment after initial mount -merge_request: 23849 -author: -type: fixed diff --git a/changelogs/unreleased/51944-redesign-project-lists-ui.yml b/changelogs/unreleased/51944-redesign-project-lists-ui.yml deleted file mode 100644 index 56f9a86a686..00000000000 --- a/changelogs/unreleased/51944-redesign-project-lists-ui.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redesign project lists UI -merge_request: 22682 -author: -type: other diff --git a/changelogs/unreleased/51970-correct-ordering-of-metrics.yml b/changelogs/unreleased/51970-correct-ordering-of-metrics.yml deleted file mode 100644 index fbc7b58d901..00000000000 --- a/changelogs/unreleased/51970-correct-ordering-of-metrics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correct the ordering of metrics on the performance dashboard -merge_request: 23630 -author: -type: fixed diff --git a/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml b/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml deleted file mode 100644 index 2d54cf814b7..00000000000 --- a/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable merging of labels with same names -merge_request: 23265 -author: -type: changed diff --git a/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml b/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml deleted file mode 100644 index bd8d0699bd1..00000000000 --- a/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't show Auto DevOps enabled banner for projects with CI file or CI disabled -merge_request: 24067 -author: -type: other diff --git a/changelogs/unreleased/52620-fix-loader-animation-alignment.yml b/changelogs/unreleased/52620-fix-loader-animation-alignment.yml deleted file mode 100644 index 5cfb7fc019f..00000000000 --- a/changelogs/unreleased/52620-fix-loader-animation-alignment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Aligns build loader animation with the job log -merge_request: 23959 -author: -type: fixed diff --git a/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml b/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml deleted file mode 100644 index 501940d6da3..00000000000 --- a/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent awards emoji being updated when updating status -merge_request: 23470 -author: -type: fixed diff --git a/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml b/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml new file mode 100644 index 00000000000..b661c55957d --- /dev/null +++ b/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml @@ -0,0 +1,5 @@ +--- +title: Make possible to toggle file tree while scrolling through diffs +merge_request: !24103 +author: +type: changed diff --git a/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml b/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml deleted file mode 100644 index 99da02dd31a..00000000000 --- a/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds explanatory text to input fields on user profile settings page -merge_request: 23673 -author: -type: other diff --git a/changelogs/unreleased/53493-list-id-email-header.yml b/changelogs/unreleased/53493-list-id-email-header.yml deleted file mode 100644 index 09a0639f6f5..00000000000 --- a/changelogs/unreleased/53493-list-id-email-header.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project identifier as List-Id email Header to ease filtering -merge_request: 22817 -author: Olivier Crête -type: added diff --git a/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml b/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml new file mode 100644 index 00000000000..08c5ded05d5 --- /dev/null +++ b/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml @@ -0,0 +1,5 @@ +--- +title: Redirect GET projects/:id to project page +merge_request: 24467 +author: +type: added diff --git a/changelogs/unreleased/53696-make-rbac-default.yml b/changelogs/unreleased/53696-make-rbac-default.yml deleted file mode 100644 index 4f1326cd874..00000000000 --- a/changelogs/unreleased/53696-make-rbac-default.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make RBAC enabled default for new clusters -merge_request: 24119 -author: -type: changed diff --git a/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml b/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml new file mode 100644 index 00000000000..d804e2df2cd --- /dev/null +++ b/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml @@ -0,0 +1,5 @@ +--- +title: Fix foreground color for labels to ensure consistency of label appearance +merge_request: 23873 +author: Nathan Friend +type: fixed diff --git a/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml b/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml deleted file mode 100644 index 083b5f21a52..00000000000 --- a/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removed discard draft comment button form notes -merge_request: 24185 -author: -type: removed diff --git a/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml b/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml new file mode 100644 index 00000000000..1daa72fb9c4 --- /dev/null +++ b/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml @@ -0,0 +1,6 @@ +--- +title: Fix suboptimal handling of checkbox and radio input events causing + group general settings submit button to stay disabled after changing its visibility +merge_request: 23022 +author: +type: fixed diff --git a/changelogs/unreleased/53907-improve-milestone-links.yml b/changelogs/unreleased/53907-improve-milestone-links.yml deleted file mode 100644 index 8e867e783cc..00000000000 --- a/changelogs/unreleased/53907-improve-milestone-links.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add % prefix to milestone reference links -merge_request: 23928 -author: -type: changed diff --git a/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml b/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml deleted file mode 100644 index 5c40a1e900c..00000000000 --- a/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add date range in milestone change email notifications -merge_request: 23762 -author: -type: changed diff --git a/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml b/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml deleted file mode 100644 index 0632c1992c7..00000000000 --- a/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show message on non-diff discussions -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/53966-hashed-storage-read-only.yml b/changelogs/unreleased/53966-hashed-storage-read-only.yml deleted file mode 100644 index 2b6c9c49c85..00000000000 --- a/changelogs/unreleased/53966-hashed-storage-read-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Hashed Storage: Only set as `read_only` when starting the per-project migration' -merge_request: 24128 -author: -type: changed diff --git a/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml b/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml deleted file mode 100644 index b45ebaa1a02..00000000000 --- a/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make the Pages permission setting more clear -merge_request: 23146 -author: -type: changed diff --git a/changelogs/unreleased/54146-fix-calendar-query.yml b/changelogs/unreleased/54146-fix-calendar-query.yml deleted file mode 100644 index dcac343108a..00000000000 --- a/changelogs/unreleased/54146-fix-calendar-query.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project calendar feed when sorted by priority -merge_request: 23870 -author: -type: fixed diff --git a/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml b/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml deleted file mode 100644 index e29987b0935..00000000000 --- a/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Discussion filter only displayed in discussions tab for merge requests -merge_request: 24082 -author: -type: changed diff --git a/changelogs/unreleased/54311-fix-board-add-label.yml b/changelogs/unreleased/54311-fix-board-add-label.yml deleted file mode 100644 index 8fd8f7a0381..00000000000 --- a/changelogs/unreleased/54311-fix-board-add-label.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error when creating labels in a new issue in the boards page -merge_request: 24039 -author: Ruben Moya -type: fixed diff --git a/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml b/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml deleted file mode 100644 index e446d2a2781..00000000000 --- a/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove framework/mobile.scss -merge_request: 23301 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/54427-label-xss.yml b/changelogs/unreleased/54427-label-xss.yml deleted file mode 100644 index 090d1832af2..00000000000 --- a/changelogs/unreleased/54427-label-xss.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Escape html entities in LabelReferenceFilter when no label found -merge_request: -author: -type: security diff --git a/changelogs/unreleased/54736-sign-in-bottom-margin.yml b/changelogs/unreleased/54736-sign-in-bottom-margin.yml deleted file mode 100644 index 32b5b44fe35..00000000000 --- a/changelogs/unreleased/54736-sign-in-bottom-margin.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix login box bottom margins on signin page -merge_request: 23739 -author: '@gear54' -type: fixed diff --git a/changelogs/unreleased/54786-mr-empty-file-display.yml b/changelogs/unreleased/54786-mr-empty-file-display.yml deleted file mode 100644 index 5adf5744755..00000000000 --- a/changelogs/unreleased/54786-mr-empty-file-display.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display empty files properly on MR diffs -merge_request: 23671 -author: Sean Nichols -type: fixed diff --git a/changelogs/unreleased/54814-sidebar-styling-updates.yml b/changelogs/unreleased/54814-sidebar-styling-updates.yml deleted file mode 100644 index 98e3836ee14..00000000000 --- a/changelogs/unreleased/54814-sidebar-styling-updates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix label and header styles in the job details sidebar. -merge_request: 23816 -author: Nathan Friend -type: changed diff --git a/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml b/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml deleted file mode 100644 index 95fc5cb804d..00000000000 --- a/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use reports syntax for Dependency scanning in Auto DevOps -merge_request: 24081 -author: -type: added diff --git a/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml b/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml deleted file mode 100644 index 8fd127acf2b..00000000000 --- a/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Return an ApplicationSetting in CurrentSettings -merge_request: 23766 -author: -type: fixed diff --git a/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml b/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml deleted file mode 100644 index 25ae6d88428..00000000000 --- a/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: User Popovers for Commit Infos, Member Lists and Snippets -merge_request: 24132 -author: -type: added diff --git a/changelogs/unreleased/55191-update-workhorse.yml b/changelogs/unreleased/55191-update-workhorse.yml deleted file mode 100644 index d16518e673a..00000000000 --- a/changelogs/unreleased/55191-update-workhorse.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Workhorse to v8.0.0 -merge_request: 23740 -author: -type: other diff --git a/changelogs/unreleased/55192-about-link-in-new-window.yml b/changelogs/unreleased/55192-about-link-in-new-window.yml deleted file mode 100644 index b686150942b..00000000000 --- a/changelogs/unreleased/55192-about-link-in-new-window.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve About this feature link should open in new window -merge_request: 24149 -author: -type: fixed diff --git a/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml b/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml deleted file mode 100644 index 62a57085192..00000000000 --- a/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use 'parsePikadayDate' to parse due date string -merge_request: 24045 -author: -type: fixed diff --git a/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml b/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml deleted file mode 100644 index c6ff52b0fa1..00000000000 --- a/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Split bio into individual line in extended user tooltips -merge_request: 23940 -author: -type: other diff --git a/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml b/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml deleted file mode 100644 index 9c4d73c5323..00000000000 --- a/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only prompt user once when navigating away from file editor -merge_request: 23820 -author: Sam Bigelow -type: fixed diff --git a/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml b/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml deleted file mode 100644 index 7476b9caa93..00000000000 --- a/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Renames Milestone sort into Milestone due date -merge_request: 24080 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/55484-fix-edit-button.yml b/changelogs/unreleased/55484-fix-edit-button.yml deleted file mode 100644 index c8998cba248..00000000000 --- a/changelogs/unreleased/55484-fix-edit-button.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Fix edit button disappearing in issue title -merge_request: 23948 -author: Ruben Moya -type: fixed diff --git a/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml b/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml deleted file mode 100644 index a51a08c892a..00000000000 --- a/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: UI improvements for redesigned project lists -merge_request: 24011 -author: -type: other diff --git a/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml b/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml deleted file mode 100644 index 9d37f798250..00000000000 --- a/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove app/views/shared/issuable/_filter.html.haml -merge_request: 24008 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml b/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml deleted file mode 100644 index a25ace9d76d..00000000000 --- a/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update cert-manager chart from v0.5.0 to v0.5.2 -merge_request: 24025 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml b/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml deleted file mode 100644 index 4062300e73f..00000000000 --- a/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Correctly externalize pipeline tags -merge_request: 24028 -author: -type: fixed diff --git a/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml b/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml deleted file mode 100644 index 5362a781281..00000000000 --- a/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide spinner on empty activites list on user profile overview -merge_request: 24063 -author: -type: other diff --git a/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml b/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml deleted file mode 100644 index 2ac3599175b..00000000000 --- a/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix navigation style in docs -merge_request: 24090 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml b/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml deleted file mode 100644 index 08f60d205df..00000000000 --- a/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove gem install bundler from Docker-based Ruby environments -merge_request: 24093 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml b/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml deleted file mode 100644 index 7dc783cc2b8..00000000000 --- a/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove top margin in modal header titles -merge_request: 24108 -author: -type: fixed diff --git a/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml b/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml deleted file mode 100644 index 765398cda84..00000000000 --- a/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix spacing on discussions -merge_request: !24197 -author: -type: fixed diff --git a/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml b/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml new file mode 100644 index 00000000000..01a162944d3 --- /dev/null +++ b/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml @@ -0,0 +1,5 @@ +--- +title: Prevent checking protected_ref? for ambiguous refs. +merge_request: 24437 +author: +type: fixed diff --git a/changelogs/unreleased/56076-releases-margin.yml b/changelogs/unreleased/56076-releases-margin.yml deleted file mode 100644 index a3cae1e035f..00000000000 --- a/changelogs/unreleased/56076-releases-margin.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes missing margin in releases block -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml b/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml new file mode 100644 index 00000000000..fcfa29977d1 --- /dev/null +++ b/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml @@ -0,0 +1,5 @@ +--- +title: Do not run spam checks on confidential issues +merge_request: 24453 +author: +type: fixed diff --git a/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml b/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml new file mode 100644 index 00000000000..9ef274f3b49 --- /dev/null +++ b/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml @@ -0,0 +1,5 @@ +--- +title: Prevent Sidekiq arguments over 10 KB in size from being logged to JSON +merge_request: 24493 +author: +type: changed diff --git a/changelogs/unreleased/ab-50763-persist-index.yml b/changelogs/unreleased/ab-50763-persist-index.yml deleted file mode 100644 index 0cf11923c5a..00000000000 --- a/changelogs/unreleased/ab-50763-persist-index.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add indexes to speed up CI query. -merge_request: 23188 -author: -type: performance diff --git a/changelogs/unreleased/ac-releases-api-with-assets.yml b/changelogs/unreleased/ac-releases-api-with-assets.yml deleted file mode 100644 index b29319ae683..00000000000 --- a/changelogs/unreleased/ac-releases-api-with-assets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support CURD operation for Links as one of the Release assets -merge_request: 24056 -author: -type: changed diff --git a/changelogs/unreleased/ac-releases-api.yml b/changelogs/unreleased/ac-releases-api.yml deleted file mode 100644 index 87217cce371..00000000000 --- a/changelogs/unreleased/ac-releases-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Releases API -merge_request: 23795 -author: -type: added diff --git a/changelogs/unreleased/ac-releases-name-sha-author.yml b/changelogs/unreleased/ac-releases-name-sha-author.yml deleted file mode 100644 index e84b82847eb..00000000000 --- a/changelogs/unreleased/ac-releases-name-sha-author.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add name, author_id, and sha to releases table -merge_request: 23763 -author: -type: added diff --git a/changelogs/unreleased/add-new-nginx-metrics.yml b/changelogs/unreleased/add-new-nginx-metrics.yml deleted file mode 100644 index 57221056d6e..00000000000 --- a/changelogs/unreleased/add-new-nginx-metrics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add NGINX 0.16.0 and above metrics -merge_request: 22133 -author: -type: added diff --git a/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml b/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml deleted file mode 100644 index fda3fdc28cf..00000000000 --- a/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow basic authentication on go get middleware -merge_request: 23497 -author: Morty Choi @mortyccp -type: changed diff --git a/changelogs/unreleased/allow_collaboration_status_work.yml b/changelogs/unreleased/allow_collaboration_status_work.yml deleted file mode 100644 index 3cf8f13ffea..00000000000 --- a/changelogs/unreleased/allow_collaboration_status_work.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update a condition to visibility a merge request collaboration message -merge_request: 23104 -author: Harry Kiselev -type: other diff --git a/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml b/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml deleted file mode 100644 index dfa94c69ce0..00000000000 --- a/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump Ruby on Rails to 5.0.7.1 -merge_request: 23396 -author: "@blackst0ne" -type: security diff --git a/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml b/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml deleted file mode 100644 index c29cfec075c..00000000000 --- a/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "[Rails5.1] Update functional specs to use new keyword format" -merge_request: 23095 -author: "@blackst0ne" -type: other diff --git a/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml b/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml deleted file mode 100644 index 09480499b87..00000000000 --- a/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update specs to exclude possible false positive pass -merge_request: 23893 -author: "@blackst0ne" -type: other diff --git a/changelogs/unreleased/bvl-hide-confidential-events-take2.yml b/changelogs/unreleased/bvl-hide-confidential-events-take2.yml deleted file mode 100644 index a5abd496a9d..00000000000 --- a/changelogs/unreleased/bvl-hide-confidential-events-take2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide confidential events in the API -merge_request: 23746 -author: -type: other diff --git a/changelogs/unreleased/ccr-49289_milestone_link.yml b/changelogs/unreleased/ccr-49289_milestone_link.yml deleted file mode 100644 index 14c09752a24..00000000000 --- a/changelogs/unreleased/ccr-49289_milestone_link.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add project milestone link -merge_request: 22552 -author: -type: added diff --git a/changelogs/unreleased/ci-dropdown-hidden-bug.yml b/changelogs/unreleased/ci-dropdown-hidden-bug.yml deleted file mode 100644 index 6910f04a6d5..00000000000 --- a/changelogs/unreleased/ci-dropdown-hidden-bug.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't hide CI dropdown behind diff summary -merge_request: -author: gfyoung -type: fixed diff --git a/changelogs/unreleased/depracated-migration-inheritance.yml b/changelogs/unreleased/depracated-migration-inheritance.yml deleted file mode 100644 index 1ea9b2df59c..00000000000 --- a/changelogs/unreleased/depracated-migration-inheritance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: ActiveRecord::Migration -> ActiveRecord::Migration[5.0] -merge_request: 23910 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml b/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml deleted file mode 100644 index 9cfb00a9544..00000000000 --- a/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove deprecated ActionDispatch::ParamsParser -merge_request: 23848 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-alias-method-chain.yml b/changelogs/unreleased/deprecated-alias-method-chain.yml deleted file mode 100644 index 76dd016e4cc..00000000000 --- a/changelogs/unreleased/deprecated-alias-method-chain.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Fix deprecation: alias_method_chain is deprecated. Please, use Module#prepend - instead' -merge_request: 23887 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-callback-false.yml b/changelogs/unreleased/deprecated-callback-false.yml deleted file mode 100644 index 6ba01a75ab9..00000000000 --- a/changelogs/unreleased/deprecated-callback-false.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Fix deprecation: returning false in Active Record and Active Model callbacks - will not implicitly halt a callback chain' -merge_request: 24134 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml b/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml deleted file mode 100644 index a7b9d054a4c..00000000000 --- a/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Fix deprecation: Comparing equality between ActionController::Parameters and - a Hash is deprecated' -merge_request: 23855 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-delete-all-params.yml b/changelogs/unreleased/deprecated-delete-all-params.yml deleted file mode 100644 index e23fe92a738..00000000000 --- a/changelogs/unreleased/deprecated-delete-all-params.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: Passing conditions to delete_all is deprecated' -merge_request: 23817 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-directly-inheriting-migration.yml b/changelogs/unreleased/deprecated-directly-inheriting-migration.yml deleted file mode 100644 index 2793cc0d44f..00000000000 --- a/changelogs/unreleased/deprecated-directly-inheriting-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: Directly inheriting from ActiveRecord::Migration is deprecated.' -merge_request: 23884 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-insert-sql.yml b/changelogs/unreleased/deprecated-insert-sql.yml deleted file mode 100644 index ad21fbd9dde..00000000000 --- a/changelogs/unreleased/deprecated-insert-sql.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: insert_sql is deprecated and will be removed' -merge_request: 23944 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-migration-inheritance-2.yml b/changelogs/unreleased/deprecated-migration-inheritance-2.yml deleted file mode 100644 index 467a521dbd4..00000000000 --- a/changelogs/unreleased/deprecated-migration-inheritance-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddIndexesToCiBuildsAndPipelines -merge_request: 24167 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-passing-activerecord-objects.yml b/changelogs/unreleased/deprecated-passing-activerecord-objects.yml deleted file mode 100644 index e58647186b8..00000000000 --- a/changelogs/unreleased/deprecated-passing-activerecord-objects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: Passing ActiveRecord::Base objects to sanitize_sql_hash_for_assignment' -merge_request: 23818 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-positional-seperator-parameter.yml b/changelogs/unreleased/deprecated-positional-seperator-parameter.yml deleted file mode 100644 index 0d952e0d5eb..00000000000 --- a/changelogs/unreleased/deprecated-positional-seperator-parameter.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Passing the separator argument as a positional parameter is deprecated -merge_request: 23334 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-positional-spec-arguments.yml b/changelogs/unreleased/deprecated-positional-spec-arguments.yml deleted file mode 100644 index 8e541df1ad4..00000000000 --- a/changelogs/unreleased/deprecated-positional-spec-arguments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: Using positional arguments in integration tests' -merge_request: 24110 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/deprecated-redirect-back.yml b/changelogs/unreleased/deprecated-redirect-back.yml deleted file mode 100644 index 7fc567fbdb5..00000000000 --- a/changelogs/unreleased/deprecated-redirect-back.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: redirect_to :back is deprecated' -merge_request: 23943 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/diff-empty-state-fixes.yml b/changelogs/unreleased/diff-empty-state-fixes.yml deleted file mode 100644 index 0d347dd17e4..00000000000 --- a/changelogs/unreleased/diff-empty-state-fixes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed merge request diffs empty states -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/dm-note-email-image-diff-discussion.yml b/changelogs/unreleased/dm-note-email-image-diff-discussion.yml deleted file mode 100644 index 6532052e132..00000000000 --- a/changelogs/unreleased/dm-note-email-image-diff-discussion.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix notification email for image diff notes -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/docs-releases-api.yml b/changelogs/unreleased/docs-releases-api.yml deleted file mode 100644 index fba70c0006d..00000000000 --- a/changelogs/unreleased/docs-releases-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds API documentation for releases -merge_request: 23901 -author: -type: added diff --git a/changelogs/unreleased/error_tracking_feature_flag_fe.yml b/changelogs/unreleased/error_tracking_feature_flag_fe.yml deleted file mode 100644 index 607929eb6b8..00000000000 --- a/changelogs/unreleased/error_tracking_feature_flag_fe.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display a list of Sentry Issues in GitLab -merge_request: 23770 -author: -type: added diff --git a/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml b/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml deleted file mode 100644 index 19dc615c5f8..00000000000 --- a/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose CI/CD predefined variable `CI_API_V4_URL` -merge_request: 23936 -author: -type: added diff --git a/changelogs/unreleased/feature-option-to-make-variables-protected.yml b/changelogs/unreleased/feature-option-to-make-variables-protected.yml deleted file mode 100644 index c99c0481c35..00000000000 --- a/changelogs/unreleased/feature-option-to-make-variables-protected.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add option to make ci variables protected by default -merge_request: 22744 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/fix-55448.yml b/changelogs/unreleased/fix-55448.yml deleted file mode 100644 index e0bdbb6eda4..00000000000 --- a/changelogs/unreleased/fix-55448.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove deprecated xhr from specs -merge_request: 23949 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/fix-calendar-events-fetching-error.yml b/changelogs/unreleased/fix-calendar-events-fetching-error.yml deleted file mode 100644 index ad4a40cd9a0..00000000000 --- a/changelogs/unreleased/fix-calendar-events-fetching-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix calendar events fetching error on private profile page -merge_request: 23718 -author: Harry Kiselev -type: other diff --git a/changelogs/unreleased/fix-n-plus-1-queries-projects.yml b/changelogs/unreleased/fix-n-plus-1-queries-projects.yml deleted file mode 100644 index cb625784267..00000000000 --- a/changelogs/unreleased/fix-n-plus-1-queries-projects.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix some N+1 queries related to Admin Dashboard, User Dashboards and Activity - Stream -merge_request: 23034 -author: -type: performance diff --git a/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml b/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml deleted file mode 100644 index 5a6c36e6f5f..00000000000 --- a/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix runner eternal loop when update job result -merge_request: 24481 -author: -type: fixed diff --git a/changelogs/unreleased/fix-udpate-head-pipeline-method.yml b/changelogs/unreleased/fix-udpate-head-pipeline-method.yml deleted file mode 100644 index 8dbb9f8e42b..00000000000 --- a/changelogs/unreleased/fix-udpate-head-pipeline-method.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix unexpected exception by failure of finding an actual head pipeline -merge_request: 24257 -author: -type: fixed diff --git a/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml b/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml deleted file mode 100644 index 3f9754409df..00000000000 --- a/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Skip per-commit validations already evaluated -merge_request: 23984 -author: -type: performance diff --git a/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml b/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml deleted file mode 100644 index dc1fe5d7417..00000000000 --- a/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug commenting on LFS images -merge_request: 23812 -author: -type: fixed diff --git a/changelogs/unreleased/force-redeploy-on-updated-secrets.yml b/changelogs/unreleased/force-redeploy-on-updated-secrets.yml new file mode 100644 index 00000000000..3b727c99dd5 --- /dev/null +++ b/changelogs/unreleased/force-redeploy-on-updated-secrets.yml @@ -0,0 +1,5 @@ +--- +title: Redeploy Auto DevOps deployment on variable updates +merge_request: 24498 +author: walkafwalka +type: added diff --git a/changelogs/unreleased/force-reload-arguments-2.yml b/changelogs/unreleased/force-reload-arguments-2.yml deleted file mode 100644 index 23ab9433b3d..00000000000 --- a/changelogs/unreleased/force-reload-arguments-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Passing an argument to force an association to reload is now deprecated -merge_request: 23894 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml b/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml deleted file mode 100644 index 39ca6b67a54..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/shared/notes` -merge_request: 23696 -author: Tao Wang -type: other diff --git a/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml b/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml deleted file mode 100644 index 142a9c1f2cc..00000000000 --- a/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unnecessary line before reply holder -merge_request: 23092 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml b/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml deleted file mode 100644 index b1ecf2bb1ed..00000000000 --- a/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Reorder sidebar menu item for group clusters -merge_request: 24001 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-update-environment-breadcrumb.yml b/changelogs/unreleased/gt-update-environment-breadcrumb.yml deleted file mode 100644 index 53b9673a96c..00000000000 --- a/changelogs/unreleased/gt-update-environment-breadcrumb.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update environments breadcrumb -merge_request: 23751 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/gt-update-navigation-theme-colors.yml b/changelogs/unreleased/gt-update-navigation-theme-colors.yml deleted file mode 100644 index 749587a6343..00000000000 --- a/changelogs/unreleased/gt-update-navigation-theme-colors.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update header navigation theme colors -merge_request: 23734 -author: George Tsiolis -type: fixed diff --git a/changelogs/unreleased/include-project.yml b/changelogs/unreleased/include-project.yml deleted file mode 100644 index c63ac490d21..00000000000 --- a/changelogs/unreleased/include-project.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow to include files from another projects in gitlab-ci.yml -merge_request: 24101 -author: -type: added diff --git a/changelogs/unreleased/include-templates.yml b/changelogs/unreleased/include-templates.yml deleted file mode 100644 index 5601cd185e9..00000000000 --- a/changelogs/unreleased/include-templates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow to include templates in gitlab-ci.yml -merge_request: 23495 -author: -type: added diff --git a/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml b/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml deleted file mode 100644 index eb860fd3905..00000000000 --- a/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update url placeholder for the sentry configuration page -merge_request: 24338 -author: -type: other diff --git a/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml b/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml deleted file mode 100644 index abece81a20d..00000000000 --- a/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add new pipeline variable CI_COMMIT_SHORT_SHA -merge_request: 23822 -author: -type: added diff --git a/changelogs/unreleased/knative-prometheus.yml b/changelogs/unreleased/knative-prometheus.yml deleted file mode 100644 index 606c5332474..00000000000 --- a/changelogs/unreleased/knative-prometheus.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Knative metrics to Prometheus -merge_request: 23972 -author: Chris Baumbauer -type: added diff --git a/changelogs/unreleased/knative-rbac-check.yml b/changelogs/unreleased/knative-rbac-check.yml deleted file mode 100644 index 0c40bb46e7f..00000000000 --- a/changelogs/unreleased/knative-rbac-check.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Require Knative to be installed only on an RBAC kubernetes cluster -merge_request: 23807 -author: Chris Baumbauer -type: changed diff --git a/changelogs/unreleased/mk-avoid-read-only-error.yml b/changelogs/unreleased/mk-avoid-read-only-error.yml deleted file mode 100644 index 8641f5db9f0..00000000000 --- a/changelogs/unreleased/mk-avoid-read-only-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent admins from attempting hashed storage migration on read only DB -merge_request: 23597 -author: -type: fixed diff --git a/changelogs/unreleased/none-syntax-highlighting.yml b/changelogs/unreleased/none-syntax-highlighting.yml deleted file mode 100644 index b373aac7c02..00000000000 --- a/changelogs/unreleased/none-syntax-highlighting.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add no-color theme for syntax highlighting. -merge_request: !20170 -author: khm -type: added diff --git a/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml b/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml deleted file mode 100644 index 7abc7d85794..00000000000 --- a/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Improve the loading time on merge request's discussion page by caching diff - highlight -merge_request: 23857 -author: -type: performance diff --git a/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml b/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml deleted file mode 100644 index 1f80d7535a5..00000000000 --- a/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust applied suggestion reverting previous changes -merge_request: 24250 -author: -type: fixed diff --git a/changelogs/unreleased/pl-reactive-caching-primary_key.yml b/changelogs/unreleased/pl-reactive-caching-primary_key.yml deleted file mode 100644 index a72933c19b1..00000000000 --- a/changelogs/unreleased/pl-reactive-caching-primary_key.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable caching for records which primary key is not `id` -merge_request: 24245 -author: -type: fixed diff --git a/changelogs/unreleased/remote-mirror-update-failed-notification.yml b/changelogs/unreleased/remote-mirror-update-failed-notification.yml deleted file mode 100644 index 50ec8624ae5..00000000000 --- a/changelogs/unreleased/remote-mirror-update-failed-notification.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Send a notification email to project maintainers when a mirror update fails -merge_request: 23595 -author: -type: added diff --git a/changelogs/unreleased/remove-rails4-specific-code.yml b/changelogs/unreleased/remove-rails4-specific-code.yml deleted file mode 100644 index c6c4c0a5d5b..00000000000 --- a/changelogs/unreleased/remove-rails4-specific-code.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove rails4 specific code -merge_request: 23847 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/remove-rails4-support.yml b/changelogs/unreleased/remove-rails4-support.yml deleted file mode 100644 index a05c913a70c..00000000000 --- a/changelogs/unreleased/remove-rails4-support.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove rails 4 support in CI, Gemfiles, bin/ and config/ -merge_request: 23717 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/s3-directories-get.yml b/changelogs/unreleased/s3-directories-get.yml deleted file mode 100644 index 9f76af2bb09..00000000000 --- a/changelogs/unreleased/s3-directories-get.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Allow 'rake gitlab:cleanup:remote_upload_files' to read bucket files without - having permissions to see all buckets. -merge_request: 23981 -author: -type: fixed diff --git a/changelogs/unreleased/security-48259-private-snippet.yml b/changelogs/unreleased/security-48259-private-snippet.yml deleted file mode 100644 index 6cf1e5dc694..00000000000 --- a/changelogs/unreleased/security-48259-private-snippet.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent private snippets from being embeddable -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml b/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml deleted file mode 100644 index ab12ba539c1..00000000000 --- a/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Issuable no longer is visible to users when project can't be viewed -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-54377-label-milestone-name-xss.yml b/changelogs/unreleased/security-54377-label-milestone-name-xss.yml deleted file mode 100644 index 76589b2eb4f..00000000000 --- a/changelogs/unreleased/security-54377-label-milestone-name-xss.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Escape label and milestone titles to prevent XSS in GFM autocomplete -merge_request: 2693 -author: -type: security diff --git a/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml b/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml deleted file mode 100644 index 11aae4428fb..00000000000 --- a/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't expose cross project repositories through diffs when creating merge reqeusts -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml b/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml deleted file mode 100644 index 7ba7aa21090..00000000000 --- a/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix SSRF with import_url and remote mirror url -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml b/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml deleted file mode 100644 index 5586fa6cd8e..00000000000 --- a/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow changing group CI/CD settings only for owners. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-master-guests-jobs-api.yml b/changelogs/unreleased/security-master-guests-jobs-api.yml deleted file mode 100644 index 83022e91aca..00000000000 --- a/changelogs/unreleased/security-master-guests-jobs-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Authorize before reading job information via API. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml b/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml deleted file mode 100644 index 702181065f5..00000000000 --- a/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent leaking protected variables for ambiguous refs. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-master-url-rel.yml b/changelogs/unreleased/security-master-url-rel.yml deleted file mode 100644 index 75f599f6bcd..00000000000 --- a/changelogs/unreleased/security-master-url-rel.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Set URL rel attribute for broken URLs. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-refs-available-to-project-guest.yml b/changelogs/unreleased/security-refs-available-to-project-guest.yml deleted file mode 100644 index eb6804c52d3..00000000000 --- a/changelogs/unreleased/security-refs-available-to-project-guest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Project guests no longer are able to see refs page -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-todos_not_redacted_for_guests.yml b/changelogs/unreleased/security-todos_not_redacted_for_guests.yml deleted file mode 100644 index be0ae9a7193..00000000000 --- a/changelogs/unreleased/security-todos_not_redacted_for_guests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Delete confidential todos for user when downgraded to Guest -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-bump-omniauth-google-gem.yml b/changelogs/unreleased/sh-bump-omniauth-google-gem.yml deleted file mode 100644 index 2b31a55f8b2..00000000000 --- a/changelogs/unreleased/sh-bump-omniauth-google-gem.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade Omniauth and JWT gems to switch away from Google+ API -merge_request: 24068 -author: -type: changed diff --git a/changelogs/unreleased/sh-cache-avatar-paths.yml b/changelogs/unreleased/sh-cache-avatar-paths.yml deleted file mode 100644 index b59a4db413d..00000000000 --- a/changelogs/unreleased/sh-cache-avatar-paths.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cache avatar URLs and paths within a request -merge_request: 23950 -author: -type: performance diff --git a/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml b/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml deleted file mode 100644 index 206253a100c..00000000000 --- a/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix object storage not working properly with Google S3 compatibility -merge_request: 23858 -author: -type: fixed diff --git a/changelogs/unreleased/sh-drop-webhooks-project-export.yml b/changelogs/unreleased/sh-drop-webhooks-project-export.yml deleted file mode 100644 index 217373bce66..00000000000 --- a/changelogs/unreleased/sh-drop-webhooks-project-export.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Drop Webhooks from project import/export config -merge_request: 24121 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-branches-api-timeout.yml b/changelogs/unreleased/sh-fix-branches-api-timeout.yml deleted file mode 100644 index 8cd29a7269d..00000000000 --- a/changelogs/unreleased/sh-fix-branches-api-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix timeout issues retrieving branches via API -merge_request: 24034 -author: -type: performance diff --git a/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml b/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml deleted file mode 100644 index ad548a6ff35..00000000000 --- a/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow GitHub imports via token even if OAuth2 provider not configured -merge_request: 23703 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-55822.yml b/changelogs/unreleased/sh-fix-issue-55822.yml deleted file mode 100644 index 1267b2ace2f..00000000000 --- a/changelogs/unreleased/sh-fix-issue-55822.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix commit SHA not showing in merge request compare dropdown -merge_request: 24084 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-55914.yml b/changelogs/unreleased/sh-fix-issue-55914.yml deleted file mode 100644 index f6f372f59c7..00000000000 --- a/changelogs/unreleased/sh-fix-issue-55914.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Bitbucket Server import only including first 25 pull requests -merge_request: 24178 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml b/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml new file mode 100644 index 00000000000..414c8663049 --- /dev/null +++ b/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml @@ -0,0 +1,5 @@ +--- +title: Fix 404s with snippet uploads in object storage +merge_request: 24550 +author: +type: fixed diff --git a/changelogs/unreleased/sh-skip-validation-visibility-changed.yml b/changelogs/unreleased/sh-skip-validation-visibility-changed.yml deleted file mode 100644 index 405be698b2b..00000000000 --- a/changelogs/unreleased/sh-skip-validation-visibility-changed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only validate project visibility when it has changed -merge_request: 24142 -author: -type: fixed diff --git a/changelogs/unreleased/spec-positional-arguments.yml b/changelogs/unreleased/spec-positional-arguments.yml deleted file mode 100644 index 9dc114e5595..00000000000 --- a/changelogs/unreleased/spec-positional-arguments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fix deprecation: Using positional arguments in integration tests' -merge_request: 24009 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/specs-positional-arguments.yml b/changelogs/unreleased/specs-positional-arguments.yml deleted file mode 100644 index 38b831bd72c..00000000000 --- a/changelogs/unreleased/specs-positional-arguments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: convert specs in javascripts/ and support/ to new syntax -merge_request: 23947 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/support-gitaly-tls.yml b/changelogs/unreleased/support-gitaly-tls.yml deleted file mode 100644 index 2a15500d6da..00000000000 --- a/changelogs/unreleased/support-gitaly-tls.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support tls communication in gitaly -merge_request: 22602 -author: -type: added diff --git a/changelogs/unreleased/tc-remove-20181218192239-migration.yml b/changelogs/unreleased/tc-remove-20181218192239-migration.yml deleted file mode 100644 index 81e06a99c1f..00000000000 --- a/changelogs/unreleased/tc-remove-20181218192239-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove migration to backfill project_repositories for legacy storage projects -merge_request: 24299 -author: -type: removed diff --git a/changelogs/unreleased/triggermesh-knative-version.yml b/changelogs/unreleased/triggermesh-knative-version.yml deleted file mode 100644 index 27f400962da..00000000000 --- a/changelogs/unreleased/triggermesh-knative-version.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Knative version bump 0.1.3 -> 0.2.2 -merge_request: -author: Chris Baumbauer -type: changed diff --git a/changelogs/unreleased/tz-user-popover-follow-up.yml b/changelogs/unreleased/tz-user-popover-follow-up.yml deleted file mode 100644 index d8f004beaa0..00000000000 --- a/changelogs/unreleased/tz-user-popover-follow-up.yml +++ /dev/null @@ -1,4 +0,0 @@ -title: Changed Userpopover Fixtures and shadow color -merge_request: 23768 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml deleted file mode 100644 index 24471b028b1..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.1.43 -merge_request: 24083 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml new file mode 100644 index 00000000000..7d92929221f --- /dev/null +++ b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml @@ -0,0 +1,5 @@ +--- +title: Update GitLab Runner Helm Chart to 0.1.45 +merge_request: 24564 +author: +type: other diff --git a/changelogs/unreleased/user-update-head-pipeline-worker.yml b/changelogs/unreleased/user-update-head-pipeline-worker.yml deleted file mode 100644 index fd88697f239..00000000000 --- a/changelogs/unreleased/user-update-head-pipeline-worker.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refactor the logic of updating head pipelines for merge requests -merge_request: 23502 -author: -type: other diff --git a/changelogs/unreleased/winh-dropdown-title-padding.yml b/changelogs/unreleased/winh-dropdown-title-padding.yml deleted file mode 100644 index 9d65175b536..00000000000 --- a/changelogs/unreleased/winh-dropdown-title-padding.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust padding of .dropdown-title to comply with design specs -merge_request: 23546 -author: -type: changed diff --git a/changelogs/unreleased/winh-merge-request-commit-context.yml b/changelogs/unreleased/winh-merge-request-commit-context.yml deleted file mode 100644 index 9e12a926af4..00000000000 --- a/changelogs/unreleased/winh-merge-request-commit-context.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display commit ID for discussions made on merge request commits -merge_request: 23837 -author: -type: fixed diff --git a/changelogs/unreleased/winh-princess-mononospace.yml b/changelogs/unreleased/winh-princess-mononospace.yml deleted file mode 100644 index e2d33de375e..00000000000 --- a/changelogs/unreleased/winh-princess-mononospace.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make commit IDs in merge request discussion header monospace -merge_request: 23562 -author: -type: changed diff --git a/changelogs/unreleased/winh-upgrade-gitlab-ui.yml b/changelogs/unreleased/winh-upgrade-gitlab-ui.yml deleted file mode 100644 index b312a329f5d..00000000000 --- a/changelogs/unreleased/winh-upgrade-gitlab-ui.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade @gitlab/ui to 1.16.2 -merge_request: 23946 -author: -type: other diff --git a/changelogs/unreleased/zj-backup-restore-object-pools.yml b/changelogs/unreleased/zj-backup-restore-object-pools.yml deleted file mode 100644 index 26e1d49aa04..00000000000 --- a/changelogs/unreleased/zj-backup-restore-object-pools.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Restore Object Pools when restoring an object pool -merge_request: 23682 -author: -type: added diff --git a/config/routes/project.rb b/config/routes/project.rb index d9afb4e7bc8..21793e7756a 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -2,6 +2,8 @@ resources :projects, only: [:index, :new, :create] draw :git_http +get '/projects/:id' => 'projects#resolve' + constraints(::Constraints::ProjectUrlConstrainer.new) do # If the route has a wildcard segment, the segment has a regex constraint, # the segment is potentially followed by _another_ wildcard segment, and diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile index 52af837c261..188331cc87c 100644 --- a/danger/documentation/Dangerfile +++ b/danger/documentation/Dangerfile @@ -32,7 +32,7 @@ to be reviewed. | Tech writer | Stage(s) | | ------------ | ------------------------------------------------------------ | | `@marcia` | ~Create ~Release + ~"development guidelines" | -| `@axil` | ~Distribution ~Gitaly ~Gitter ~Monitoring ~Package ~Secure | +| `@axil` | ~Distribution ~Gitaly ~Gitter ~Monitor ~Package ~Secure | | `@eread` | ~Manage ~Configure ~Geo ~Verify | | `@mikelewis` | ~Plan | diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md index 05c1923f0cb..abef7a6cd33 100644 --- a/doc/administration/gitaly/index.md +++ b/doc/administration/gitaly/index.md @@ -49,6 +49,25 @@ Starting with GitLab 11.4, Gitaly is a replacement for NFS except when the [Elastic Search indexer](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer) is used. +### Network architecture + +- gitlab-rails shards repositories into "repository storages" +- gitlab-rails/config/gitlab.yml contains a map from storage names to + (Gitaly address, Gitaly token) pairs +- the `storage name` -\> `(Gitaly address, Gitaly token)` map in + gitlab.yml is the single source of truth for the Gitaly network + topology +- a (Gitaly address, Gitaly token) corresponds to a Gitaly server +- a Gitaly server hosts one or more storages +- Gitaly addresses must be specified in such a way that they resolve + correctly for ALL Gitaly clients +- Gitaly clients are: unicorn, sidekiq, gitlab-workhorse, + gitlab-shell, and Gitaly itself +- special case: a Gitaly server must be able to make RPC calls **to + itself** via its own (Gitaly address, Gitaly token) pair as + specified in gitlab-rails/config/gitlab.yml +- Gitaly servers must not be exposed to the public internet + Gitaly network traffic is unencrypted so you should use a firewall to restrict access to your Gitaly server. diff --git a/doc/ci/environments.md b/doc/ci/environments.md index 010c579b83e..b9b5ceab7fb 100644 --- a/doc/ci/environments.md +++ b/doc/ci/environments.md @@ -416,81 +416,15 @@ and/or `production`) you can see this information in the merge request itself. ### Go directly from source files to public pages on the environment -> Introduced in GitLab 8.17. In GitLab 11.5 the file links -are surfaced to the merge request widget. - -You can specify a Route Map to get GitLab to show **View on ...** -buttons to go directly from a file to that file's representation on the -[deployed website via Review Apps](review_apps/index.md). - -To get this to work, you need to tell GitLab how the paths of files in your repository map to paths of pages on your website, using a Route Map. - -A Route Map is a file inside the repository at `.gitlab/route-map.yml`, which contains a YAML array that maps `source` paths (in the repository) to `public` paths (on the website). -Below is an example of a route map for [Middleman](https://middlemanapp.com) static websites -like <https://gitlab.com/gitlab-com/www-gitlab-com>: - -```yaml -# Team data -- source: 'data/team.yml' # data/team.yml - public: 'team/' # team/ - -# Blogposts -- source: /source\/posts\/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.+?)\..*/ # source/posts/2017-01-30-around-the-world-in-6-releases.html.md.erb - public: '\1/\2/\3/\4/' # 2017/01/30/around-the-world-in-6-releases/ - -# HTML files -- source: /source\/(.+?\.html).*/ # source/index.html.haml - public: '\1' # index.html - -# Other files -- source: /source\/(.*)/ # source/images/blogimages/around-the-world-in-6-releases-cover.png - public: '\1' # images/blogimages/around-the-world-in-6-releases-cover.png -``` - -Mappings are defined as entries in the root YAML array, and are identified by a `-` prefix. Within an entry, we have a hash map with two keys: - -- `source` - - a string, starting and ending with `'`, for an exact match - - a regular expression, starting and ending with `/`, for a pattern match - - The regular expression needs to match the entire source path - `^` and `$` anchors are implied. - - Can include capture groups denoted by `()` that can be referred to in the `public` path. - - Slashes (`/`) can, but don't have to, be escaped as `\/`. - - Literal periods (`.`) should be escaped as `\.`. -- `public` - - a string, starting and ending with `'`. - - Can include `\N` expressions to refer to capture groups in the `source` regular expression in order of their occurrence, starting with `\1`. - -The public path for a source path is determined by finding the first `source` expression that matches it, and returning the corresponding `public` path, replacing the `\N` expressions with the values of the `()` capture groups if appropriate. - -In the example above, the fact that mappings are evaluated in order of their definition is used to ensure that `source/index.html.haml` will match `/source\/(.+?\.html).*/` instead of `/source\/(.*)/`, and will result in a public path of `index.html`, instead of `index.html.haml`. - ---- - -Once you have the route mapping set up, it will be exposed in a few places: - -- In the merge request widget. The **View app** button will take you to the - environment URL you have set up in `.gitlab-ci.yml`. The dropdown will render - the first 5 matched items from the route map, but you can filter them if more - than 5 are available. - - ![View app file list in merge request widget](img/view_on_mr_widget.png) - -- In the diff for a merge request, comparison, or commit. - - !["View on env" button in merge request diff](img/view_on_env_mr.png) - -- In the blob file view. - - !["View on env" button in file view](img/view_on_env_blob.png) | - ---- - -We now have a full development cycle, where our app is tested, built, deployed -as a Review app, deployed to a staging server once the merge request is merged, -and finally manually deployed to the production server. What we just described -is a single workflow, but imagine tens of developers working on a project -at the same time. They each push to their branches, and dynamic environments are -created all the time. In that case, we probably need to do some clean up. Read +With GitLab's [Route Maps](review_apps/index.md#route-maps) you can go directly +from source files to public pages on the environment set for Review Apps. + +From then on, you have a full development cycle, where your app is tested, built, deployed +as a Review App, deployed to a staging server once the merge request is merged, +and finally manually deployed to the production server. This is a simple workflow, +but when you have multiple developers working on a project +at the same time, each of them pushing to their own branches, dynamic environments are +created all the time. In which case, you probably want to do some clean up. Read next how environments can be stopped. ## Stopping an environment diff --git a/doc/ci/img/view_on_env_blob.png b/doc/ci/review_apps/img/view_on_env_blob.png Binary files differindex acc457fbb38..acc457fbb38 100644 --- a/doc/ci/img/view_on_env_blob.png +++ b/doc/ci/review_apps/img/view_on_env_blob.png diff --git a/doc/ci/img/view_on_env_mr.png b/doc/ci/review_apps/img/view_on_env_mr.png Binary files differindex 2c0bd25a4f2..2c0bd25a4f2 100644 --- a/doc/ci/img/view_on_env_mr.png +++ b/doc/ci/review_apps/img/view_on_env_mr.png diff --git a/doc/ci/img/view_on_mr_widget.png b/doc/ci/review_apps/img/view_on_mr_widget.png Binary files differindex efe023b07b5..efe023b07b5 100644 --- a/doc/ci/img/view_on_mr_widget.png +++ b/doc/ci/review_apps/img/view_on_mr_widget.png diff --git a/doc/ci/review_apps/index.md b/doc/ci/review_apps/index.md index 64be011008e..8b3a7b63e62 100644 --- a/doc/ci/review_apps/index.md +++ b/doc/ci/review_apps/index.md @@ -102,3 +102,88 @@ The following are example projects that use Review Apps with: - [OpenShift](https://gitlab.com/gitlab-examples/review-apps-openshift). See also the video [Demo: Cloud Native Development with GitLab](https://www.youtube.com/watch?v=jfIyQEwrocw), which includes a Review Apps example. + +## Route Maps + +> Introduced in GitLab 8.17. In GitLab 11.5 the file links +are surfaced to the merge request widget. + +Route Maps allows you to go directly from source files +to public pages on the [environment](../environments.md) defined for +Review Apps. Once set up, the review app link in the merge request +widget can take you directly to the pages changed, making it easier +and faster to preview proposed modifications. + +All you need to do is to tell GitLab how the paths of files +in your repository map to paths of pages on your website using a Route Map. +Once set, GitLab will display **View on ...** buttons, which will take you +to the pages changed directly from merge requests. + +To set up a route map, add a a file inside the repository at `.gitlab/route-map.yml`, +which contains a YAML array that maps `source` paths (in the repository) to `public` +paths (on the website). + +### Route Maps example + +Below there's an example of a route map for [Middleman](https://middlemanapp.com), +a static site generator (SSG) used to build [GitLab's website](https://about.gitlab.com), +deployed from its [project on GitLab.com](https://gitlab.com/gitlab-com/www-gitlab-com): + +```yaml +# Team data +- source: 'data/team.yml' # data/team.yml + public: 'team/' # team/ + +# Blogposts +- source: /source\/posts\/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.+?)\..*/ # source/posts/2017-01-30-around-the-world-in-6-releases.html.md.erb + public: '\1/\2/\3/\4/' # 2017/01/30/around-the-world-in-6-releases/ + +# HTML files +- source: /source\/(.+?\.html).*/ # source/index.html.haml + public: '\1' # index.html + +# Other files +- source: /source\/(.*)/ # source/images/blogimages/around-the-world-in-6-releases-cover.png + public: '\1' # images/blogimages/around-the-world-in-6-releases-cover.png +``` + +Mappings are defined as entries in the root YAML array, and are identified by a `-` prefix. Within an entry, we have a hash map with two keys: + +- `source` + - a string, starting and ending with `'`, for an exact match + - a regular expression, starting and ending with `/`, for a pattern match + - The regular expression needs to match the entire source path - `^` and `$` anchors are implied. + - Can include capture groups denoted by `()` that can be referred to in the `public` path. + - Slashes (`/`) can, but don't have to, be escaped as `\/`. + - Literal periods (`.`) should be escaped as `\.`. +- `public` + - a string, starting and ending with `'`. + - Can include `\N` expressions to refer to capture groups in the `source` regular expression in order of their occurrence, starting with `\1`. + +The public path for a source path is determined by finding the first +`source` expression that matches it, and returning the corresponding +`public` path, replacing the `\N` expressions with the values of the +`()` capture groups if appropriate. + +In the example above, the fact that mappings are evaluated in order +of their definition is used to ensure that `source/index.html.haml` +will match `/source\/(.+?\.html).*/` instead of `/source\/(.*)/`, +and will result in a public path of `index.html`, instead of +`index.html.haml`. + +Once you have the route mapping set up, it will be exposed in a few places: + +- In the merge request widget. The **View app** button will take you to the + environment URL you have set up in `.gitlab-ci.yml`. The dropdown will render + the first 5 matched items from the route map, but you can filter them if more + than 5 are available. + + ![View app file list in merge request widget](img/view_on_mr_widget.png) + +- In the diff for a merge request, comparison, or commit. + + !["View on env" button in merge request diff](img/view_on_env_mr.png) + +- In the blob file view. + + !["View on env" button in file view](img/view_on_env_blob.png) diff --git a/doc/development/automatic_ce_ee_merge.md b/doc/development/automatic_ce_ee_merge.md index 0cc083cefc0..fed772b9240 100644 --- a/doc/development/automatic_ce_ee_merge.md +++ b/doc/development/automatic_ce_ee_merge.md @@ -148,7 +148,7 @@ merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`: - To cherry-pick multiple commits, such as B and D in a range [A > B > C > D], use: ```shell - git cherry-pick commmit-B-SHA commit-D-SHA + git cherry-pick commit-B-SHA commit-D-SHA ``` For example, suppose commit B SHA = `4f5e4018c09ed797fdf446b3752f82e46f5af502`, @@ -213,7 +213,7 @@ being able to deploy. No, not if there is an EE merge request for every CE merge request that causes conflicts _and_ that EE merge request is merged first. In the past we may have been a bit more relaxed when it comes to enforcing EE merge requests, but to -enable automatic merging have to start requiring such merge requests even for +enable automatic merging we have to start requiring such merge requests even for the smallest conflicts. ### Some files I work with often conflict, how can I best deal with this? diff --git a/doc/development/sidekiq_debugging.md b/doc/development/sidekiq_debugging.md index 84b61bd7e61..2b3a9481b93 100644 --- a/doc/development/sidekiq_debugging.md +++ b/doc/development/sidekiq_debugging.md @@ -11,6 +11,11 @@ Example: gitlab_rails['env'] = {"SIDEKIQ_LOG_ARGUMENTS" => "1"} ``` -Please note: It is not recommend to enable this setting in production because some +Please note: It is not recommend to enable this setting in production because some Sidekiq jobs (such as sending a password reset email) take secret arguments (for -example the password reset token).
\ No newline at end of file +example the password reset token). + +When using [Sidekiq JSON logging](../administration/logs.md#sidekiqlog), +arguments logs are limited to a maximum size of 10 kilobytes of text; +any arguments after this limit will be discarded and replaced with a +single argument containing the string `"..."`. diff --git a/doc/development/testing_guide/flaky_tests.md b/doc/development/testing_guide/flaky_tests.md index f6bc9fb0979..58a2e53b486 100644 --- a/doc/development/testing_guide/flaky_tests.md +++ b/doc/development/testing_guide/flaky_tests.md @@ -7,16 +7,37 @@ eventually. ## Quarantined tests -Tests can be put in quarantine by assigning `:quarantine` metadata. This means -they will be skipped unless run with `--tag quarantine`. This can be used for -tests that are expected to fail while a fix is in progress (similar to how -[`skip` or `pending`](https://relishapp.com/rspec/rspec-core/v/3-8/docs/pending-and-skipped-examples) - can be used). +When a test frequently fails in `master`, +[a ~"broken master" issue](https://about.gitlab.com/handbook/engineering/workflow/#broken-master) +should be created. +If the test cannot be fixed in a timely fashion, there is an impact on the +productivity of all the developers, so it should be placed in quarantine by +assigning the `:quarantine` metadata. -``` +This means it will be skipped unless run with `--tag quarantine`: + +```shell bin/rspec --tag quarantine ``` +**Before putting a test in quarantine, you should make sure that a +~"broken master" issue exists for it so it won't stay in quarantine forever.** + +Once a test is in quarantine, there are 3 choices: + +- Should the test be fixed (i.e. get rid of its flakiness)? +- Should the test be moved to a lower level of testing? +- Should the test be removed entirely (e.g. because there's already a + lower-level test, or it's duplicating another same-level test, or it's testing + too much etc.)? + +### Quarantine tests on the CI + +Quarantined tests are run on the CI in dedicated jobs that are allowed to fail: + +- `rspec-pg-quarantine` and `rspec-mysql-quarantine` (CE & EE) +- `rspec-pg-quarantine-ee` and `rspec-mysql-quarantine-ee` (EE only) + ## Automatic retries and flaky tests detection On our CI, we use [rspec-retry] to automatically retry a failing example a few diff --git a/doc/update/11.5-to-11.6.md b/doc/update/11.5-to-11.6.md index 2e9ec5d71de..33e09e1915b 100644 --- a/doc/update/11.5-to-11.6.md +++ b/doc/update/11.5-to-11.6.md @@ -317,11 +317,11 @@ sudo systemctl daemon-reload ```bash cd /home/git/gitlab -# MySQL installations (note: the line below states '--without postgres') -sudo -u git -H bundle install --without postgres development test --deployment - # PostgreSQL installations (note: the line below states '--without mysql') -sudo -u git -H bundle install --without mysql development test --deployment +sudo -u git -H bundle install --deployment --without development test mysql aws kerberos + +# MySQL installations (note: the line below states '--without postgres') +sudo -u git -H bundle install --deployment --without development test postgres aws kerberos # Optional: clean up old gems sudo -u git -H bundle clean diff --git a/doc/update/11.6-to-11.7.md b/doc/update/11.6-to-11.7.md index f9e3f565e0b..9e61d978631 100644 --- a/doc/update/11.6-to-11.7.md +++ b/doc/update/11.6-to-11.7.md @@ -317,11 +317,11 @@ sudo systemctl daemon-reload ```bash cd /home/git/gitlab -# MySQL installations (note: the line below states '--without postgres') -sudo -u git -H bundle install --without postgres development test --deployment - # PostgreSQL installations (note: the line below states '--without mysql') -sudo -u git -H bundle install --without mysql development test --deployment +sudo -u git -H bundle install --deployment --without development test mysql aws kerberos + +# MySQL installations (note: the line below states '--without postgres') +sudo -u git -H bundle install --deployment --without development test postgres aws kerberos # Optional: clean up old gems sudo -u git -H bundle clean diff --git a/doc/update/11.7-to-11.8.md b/doc/update/11.7-to-11.8.md index 1587c310876..7ab98d80eb9 100644 --- a/doc/update/11.7-to-11.8.md +++ b/doc/update/11.7-to-11.8.md @@ -320,11 +320,12 @@ sudo systemctl daemon-reload ```bash cd /home/git/gitlab +# PostgreSQL installations (note: the line below states '--without mysql') +sudo -u git -H bundle install --deployment --without development test mysql aws kerberos + # MySQL installations (note: the line below states '--without postgres') -sudo -u git -H bundle install --without postgres development test --deployment +sudo -u git -H bundle install --deployment --without development test postgres aws kerberos -# PostgreSQL installations (note: the line below states '--without mysql') -sudo -u git -H bundle install --without mysql development test --deployment # Optional: clean up old gems sudo -u git -H bundle clean diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md index 6f334af4fb7..bb815695cb1 100644 --- a/doc/user/project/clusters/index.md +++ b/doc/user/project/clusters/index.md @@ -178,8 +178,11 @@ When creating a cluster in GitLab, you will be asked if you would like to create [Attribute-based access control (ABAC)](https://kubernetes.io/docs/admin/authorization/abac/) cluster, or a [Role-based access control (RBAC)](https://kubernetes.io/docs/admin/authorization/rbac/) one. -Whether ABAC or RBAC is enabled, GitLab will create the necessary -service accounts and privileges in order to install and run +NOTE: **Note:** +[RBAC](#role-based-access-control-rbac) is recommended and the GitLab default. + +Whether [ABAC](#attribute-based-access-control-abac) or [RBAC](#role-based-access-control-rbac) is enabled, +GitLab will create the necessary service accounts and privileges in order to install and run [GitLab managed applications](#installing-applications): - If GitLab is creating the cluster, a `gitlab` service account with diff --git a/doc/user/project/index.md b/doc/user/project/index.md index ce8bd2de61f..6a1aadf058e 100644 --- a/doc/user/project/index.md +++ b/doc/user/project/index.md @@ -149,3 +149,24 @@ When [renaming a user](../profile/index.md#changing-your-username), work after a rename, making any transition a lot smoother. - The redirects will be available as long as the original path is not claimed by another group, user or project. + +## Use your project as a Go package + +Any project can be used as a Go package including private projects in subgroups. To use packages +hosted in private projects with the `go get` command, use a [`.netrc` file](https://ec.haxx.se/usingcurl-netrc.html) +and a [personal access token](../profile/personal_access_tokens.md) in the password field. + +For example: + +```text +machine example.gitlab.com +login <gitlab_user_name> +password <personal_access_token> +``` + +## Access project page with project ID + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/53671) in GitLab 11.8. + +To quickly access a project from the GitLab UI using the project ID, +visit the `/projects/:id` URL in your browser or other tool accessing the project. diff --git a/doc/user/project/issues/csv_import.md b/doc/user/project/issues/csv_import.md index 001e0d303e9..032e3a73ad0 100644 --- a/doc/user/project/issues/csv_import.md +++ b/doc/user/project/issues/csv_import.md @@ -2,16 +2,30 @@ > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23532) in GitLab 11.7. -Issues can be imported by uploading a CSV file. The file will be processed in the background and a notification email -will be sent to you once the import is completed. +Issues can be imported to a project by uploading a CSV file. Supported fields are +`title` and `description`. + +The user uploading the CSV file will be set as the author of the imported issues. > **Note:** A permission level of `Developer` or higher is required to import issues. +To import issues: + +1. Ensure your CSV file meets the [file format](#csv-file-format) requirements. +1. Navigate to a project's Issues list page. +1. If existing issues are present, click the import icon at the top right, next to the **Edit issues** button. +1. For a project without any issues, click the button labeled **Import CSV** in the middle of the page. +1. Select the file and click the **Import issues** button. + +The file is processed in the background and a notification email is sent +to you once the import is completed. + ## CSV File Format ### Header row -CSV files must contain a header row with at least two columns: `title` and `description`, in that order. +CSV files must contain a header row beginning with at least two columns, `title` and `description`, in that order. +If additional columns are present, they will be ignored. ### Column separator @@ -33,7 +47,11 @@ a double-quote (`"`) within a quoted field, use two double-quote characters in s After the header row, succeeding rows must follow the same column order. The issue title is required while the description is optional. -The user uploading the CSV file will be set as the author of the imported issues. +### File size + +The limit depends on the configuration value of Max Attachment Size for the GitLab instance. + +For GitLab.com, it is set to 10 MB. ## Sample Data diff --git a/doc/user/project/issues/img/import_csv_button.png b/doc/user/project/issues/img/import_csv_button.png Binary files differdeleted file mode 100644 index ab100a95750..00000000000 --- a/doc/user/project/issues/img/import_csv_button.png +++ /dev/null diff --git a/doc/user/project/issues/index.md b/doc/user/project/issues/index.md index 40a1f60c4ab..5a3ac9c175b 100644 --- a/doc/user/project/issues/index.md +++ b/doc/user/project/issues/index.md @@ -144,12 +144,12 @@ create various boards per project with [Multiple Issue Boards](https://docs.gitl ### Import Issues from CSV -From the project-level issues list, you can find the import button near the "Edit issues" button in the upper-right -side. +You can import a CSV file containing issue titles and descriptions to create +a batch of issues simultaneously. -![Import CSV button](img/import_csv_button.png) +When you navigate to the Issues list page, an import button is displayed. -Learn more about [importing issues from CSV](csv_import.md) +For further details, see [Importing issues from CSV](csv_import.md) ### External Issue Tracker @@ -157,14 +157,14 @@ Alternatively to GitLab's built-in Issue Tracker, you can also use an [external tracker](../../../integration/external-issue-tracker.md) such as Jira, Redmine, or Bugzilla. -### Issue's API +### Issue API -Read through the [API documentation](../../../api/issues.md). +See the [API documentation](../../../api/issues.md). ### Bulk editing issues -Find out about [bulk editing issues](../../project/bulk_editing.md). +See the [bulk editing issues](../../project/bulk_editing.md) page. ### Similar issues -Find out about [similar issues](similar_issues.md). +See the [similar issues](similar_issues.md) page. diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md index 9015a964781..2c8a590fc45 100644 --- a/doc/user/project/merge_requests/index.md +++ b/doc/user/project/merge_requests/index.md @@ -284,7 +284,11 @@ you can preview the changes submitted to a feature-branch through a merge reques in a per-branch basis. No need to checkout the branch, install and preview locally; all your changes will be available to preview by anyone with the Review Apps link. -[Read more about Review Apps.](../../../ci/review_apps/index.md) +With GitLab's [Route Maps](../../../ci/review_apps/index.md#route-maps) set, the +merge request widget takes you directly to the pages changed, making it easier and +faster to preview proposed modifications. + +[Read more about Review Apps](../../../ci/review_apps/index.md). ## Pipelines for merge requests diff --git a/doc/user/project/operations/error_tracking.md b/doc/user/project/operations/error_tracking.md index 2b5abc7233f..c79fbad5765 100644 --- a/doc/user/project/operations/error_tracking.md +++ b/doc/user/project/operations/error_tracking.md @@ -1,6 +1,6 @@ # Error Tracking -> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/169) in GitLab 11.7. +> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/169) in GitLab 11.8. Error tracking allows developers to easily discover and view the errors that their application may be generating. By surfacing error information where the code is being developed, efficiency and awareness can be increased. diff --git a/doc/user/project/pipelines/settings.md b/doc/user/project/pipelines/settings.md index 5aa26af5265..bb9b4238ee9 100644 --- a/doc/user/project/pipelines/settings.md +++ b/doc/user/project/pipelines/settings.md @@ -1,7 +1,7 @@ # Pipelines settings To reach the pipelines settings navigate to your project's -**Settings âž” CI/CD**. +**Settings > CI/CD**. The following settings can be configured per project. @@ -10,14 +10,14 @@ The following settings can be configured per project. With Git strategy, you can choose the default way your repository is fetched from GitLab in a job. -There are two options: +There are two options. Using: -- Using `git clone` which is slower since it clones the repository from scratch +- `git clone`, which is slower since it clones the repository from scratch for every job, ensuring that the project workspace is always pristine. -- Using `git fetch` which is faster as it re-uses the project workspace (falling +- `git fetch`, which is faster as it re-uses the project workspace (falling back to clone if it doesn't exist). -The default Git strategy can be overridden by the [GIT_STRATEGY variable][var] +The default Git strategy can be overridden by the [GIT_STRATEGY variable](../../../ci/yaml/README.md#git-strategy) in `.gitlab-ci.yml`. ## Timeout @@ -29,14 +29,14 @@ if the job surpasses the threshold, it is marked as failed. ### Timeout overriding on Runner level -> - [Introduced][ce-17221] in GitLab 10.7. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17221) in GitLab 10.7. Project defined timeout (either specific timeout set by user or the default -60 minutes timeout) may be [overridden on Runner level][timeout overriding]. +60 minutes timeout) may be [overridden on Runner level](../../../ci/runners/README.html#setting-maximum-job-timeout-for-a-runner). ## Custom CI config path -> - [Introduced][ce-12509] in GitLab 9.4. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12509) in GitLab 9.4. By default we look for the `.gitlab-ci.yml` file in the project's root directory. If you require a different location **within** the repository, @@ -59,7 +59,7 @@ job log using a regular expression. In the pipelines settings, search for the ![Pipelines settings test coverage](img/pipelines_settings_test_coverage.png) Leave blank if you want to disable it or enter a ruby regular expression. You -can use http://rubular.com to test your regex. +can use <http://rubular.com> to test your regex. If the pipeline succeeds, the coverage is shown in the merge request widget and in the jobs table. @@ -79,28 +79,28 @@ project setting under your project's **Settings > CI/CD > General pipelines sett If **Public pipelines** is enabled (default): -- for **public** projects, anyone can view the pipelines and access the job details - (output logs and artifacts) -- for **internal** projects, any logged in user can view the pipelines +- For **public** projects, anyone can view the pipelines and access the job details + (output logs and artifacts). +- For **internal** projects, any logged in user can view the pipelines and access the job details - (output logs and artifacts) -- for **private** projects, any member (guest or higher) can view the pipelines + (output logs and artifacts). +- For **private** projects, any member (guest or higher) can view the pipelines and access the job details - (output logs and artifacts) + (output logs and artifacts). If **Public pipelines** is disabled: -- for **public** projects, anyone can view the pipelines, but only members - (reporter or higher) can access the job details (output logs and artifacts) -- for **internal** projects, any logged in user can view the pipelines, - but only members (reporter or higher) can access the job details (output logs - and artifacts) -- for **private** projects, only members (reporter or higher) - can view the pipelines and access the job details (output logs and artifacts) +- For **public** projects, anyone can view the pipelines, but only members + (reporter or higher) can access the job details (output logs and artifacts). +- For **internal** projects, any logged in user can view the pipelines. + However, only members (reporter or higher) can access the job details (output logs + and artifacts). +- For **private** projects, only members (reporter or higher) + can view the pipelines and access the job details (output logs and artifacts). ## Auto-cancel pending pipelines -> [Introduced][ce-9362] in GitLab 9.1. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9362) in GitLab 9.1. If you want to auto-cancel all pending non-HEAD pipelines on branch, when new pipeline will be created (after your git push or manually from UI), @@ -132,19 +132,19 @@ Depending on the status of your job, a badge can have the following values: You can access a pipeline status badge image using the following link: -``` +```text https://example.gitlab.com/<namespace>/<project>/badges/<branch>/build.svg ``` ### Test coverage report badge -GitLab makes it possible to define the regular expression for [coverage report], +GitLab makes it possible to define the regular expression for [coverage report](#test-coverage-parsing), that each job log will be matched against. This means that each job in the pipeline can have the test coverage percentage value defined. The test coverage badge can be accessed using following link: -``` +```text https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg ``` @@ -163,7 +163,7 @@ Pipeline badges can be rendered in different styles by adding the `style=style_n #### Flat (default) -``` +```text https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?style=flat ``` @@ -171,7 +171,9 @@ https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?st #### Flat square -``` +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/30120) in GitLab 11.8. + +```text https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?style=flat-square ``` @@ -180,10 +182,3 @@ https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?st ## Environment Variables [Environment variables](../../../ci/variables/README.html#variables) can be set in an environment to be available to a runner. - -[var]: ../../../ci/yaml/README.md#git-strategy -[coverage report]: #test-coverage-parsing -[timeout overriding]: ../../../ci/runners/README.html#setting-maximum-job-timeout-for-a-runner -[ce-9362]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9362 -[ce-12509]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12509 -[ce-17221]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17221 diff --git a/lib/gitlab/ci/pipeline/chain/build.rb b/lib/gitlab/ci/pipeline/chain/build.rb index d33d1edfe35..41632211374 100644 --- a/lib/gitlab/ci/pipeline/chain/build.rb +++ b/lib/gitlab/ci/pipeline/chain/build.rb @@ -17,7 +17,6 @@ module Gitlab user: @command.current_user, pipeline_schedule: @command.schedule, merge_request: @command.merge_request, - protected: @command.protected_ref?, variables_attributes: Array(@command.variables_attributes) ) diff --git a/lib/gitlab/ci/pipeline/chain/populate.rb b/lib/gitlab/ci/pipeline/chain/populate.rb index 633d3cd4f6b..0405292a25b 100644 --- a/lib/gitlab/ci/pipeline/chain/populate.rb +++ b/lib/gitlab/ci/pipeline/chain/populate.rb @@ -13,6 +13,10 @@ module Gitlab # Allocate next IID. This operation must be outside of transactions of pipeline creations. pipeline.ensure_project_iid! + # Protect the pipeline. This is assigned in Populate instead of + # Build to prevent erroring out on ambiguous refs. + pipeline.protected = @command.protected_ref? + ## # Populate pipeline with block argument of CreatePipelineService#execute. # diff --git a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml index 95160e1432f..9362596eb60 100644 --- a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @@ -611,16 +611,16 @@ rollout 100%: track="${1-stable}" export APPLICATION_SECRET_NAME=$(application_secret_name "$track") - bash -c ' - function k8s_prefixed_variables() { - env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" - } - - kubectl create secret \ - -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ - --from-env-file <(k8s_prefixed_variables) -o yaml --dry-run | - kubectl replace -n "$KUBE_NAMESPACE" --force -f - - ' + env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables + + kubectl create secret \ + -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ + --from-env-file k8s_prefixed_variables -o yaml --dry-run | + kubectl replace -n "$KUBE_NAMESPACE" --force -f - + + export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1) + + rm k8s_prefixed_variables } function deploy_name() { @@ -688,6 +688,7 @@ rollout 100%: --set application.track="$track" \ --set application.database_url="$DATABASE_URL" \ --set application.secretName="$APPLICATION_SECRET_NAME" \ + --set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \ --set service.url="$CI_ENVIRONMENT_URL" \ --set service.additionalHosts="$additional_hosts" \ --set replicaCount="$replicas" \ @@ -722,6 +723,7 @@ rollout 100%: --set application.track="$track" \ --set application.database_url="$DATABASE_URL" \ --set application.secretName="$APPLICATION_SECRET_NAME" \ + --set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \ --set service.url="$CI_ENVIRONMENT_URL" \ --set service.additionalHosts="$additional_hosts" \ --set replicaCount="$replicas" \ diff --git a/lib/gitlab/sidekiq_logging/structured_logger.rb b/lib/gitlab/sidekiq_logging/structured_logger.rb index e86db8db3a1..fdc0d518c59 100644 --- a/lib/gitlab/sidekiq_logging/structured_logger.rb +++ b/lib/gitlab/sidekiq_logging/structured_logger.rb @@ -5,6 +5,7 @@ module Gitlab class StructuredLogger START_TIMESTAMP_FIELDS = %w[created_at enqueued_at].freeze DONE_TIMESTAMP_FIELDS = %w[started_at retried_at failed_at completed_at].freeze + MAXIMUM_JOB_ARGUMENTS_LENGTH = 10.kilobytes def call(job, queue) started_at = current_time @@ -64,6 +65,7 @@ module Gitlab job['pid'] = ::Process.pid job.delete('args') unless ENV['SIDEKIQ_LOG_ARGUMENTS'] + job['args'] = limited_job_args(job['args']) if job['args'] convert_to_iso8601(job, START_TIMESTAMP_FIELDS) @@ -93,6 +95,21 @@ module Gitlab Time.at(timestamp).utc.iso8601(3) end + + def limited_job_args(args) + return unless args.is_a?(Array) + + total_length = 0 + limited_args = args.take_while do |arg| + total_length += arg.to_json.length + + total_length <= MAXIMUM_JOB_ARGUMENTS_LENGTH + end + + limited_args.push('...') if total_length > MAXIMUM_JOB_ARGUMENTS_LENGTH + + limited_args + end end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 795a46382a7..55e2e82e13e 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3574,6 +3574,9 @@ msgstr "" msgid "Here is the public SSH key that needs to be added to the remote server. For more information, please refer to the documentation." msgstr "" +msgid "Hide file browser" +msgstr "" + msgid "Hide host keys manual input" msgstr "" @@ -6345,6 +6348,9 @@ msgstr "" msgid "Show complete raw log" msgstr "" +msgid "Show file browser" +msgstr "" + msgid "Show latest version" msgstr "" @@ -7431,9 +7437,6 @@ msgstr "" msgid "Toggle discussion" msgstr "" -msgid "Toggle file browser" -msgstr "" - msgid "Toggle navigation" msgstr "" diff --git a/package.json b/package.json index 1fd7e53d62c..21431b210cd 100644 --- a/package.json +++ b/package.json @@ -161,6 +161,7 @@ "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^4.0.0-beta.0", "nodemon": "^1.18.4", + "pixelmatch": "^4.0.2", "prettier": "1.15.3", "vue-jest": "^3.0.2", "webpack-dev-server": "^3.1.14", diff --git a/qa/qa/git/repository.rb b/qa/qa/git/repository.rb index 86e00cdbb9c..ac8dcbf0d83 100644 --- a/qa/qa/git/repository.rb +++ b/qa/qa/git/repository.rb @@ -11,14 +11,15 @@ module QA class Repository include Scenario::Actable - attr_writer :password + attr_writer :password, :use_lfs attr_accessor :env_vars def initialize # We set HOME to the current working directory (which is a # temporary directory created in .perform()) so the temporarily dropped # .netrc can be utilised - self.env_vars = [%Q{HOME="#{File.dirname(netrc_file_path)}"}] + self.env_vars = [%Q{HOME="#{tmp_home_dir}"}] + @use_lfs = false end def self.perform(*args) @@ -33,17 +34,22 @@ module QA def username=(username) @username = username - @uri.user = username + # Only include the user in the URI if we're using HTTP as this breaks + # SSH authentication. + @uri.user = username unless ssh_key_set? end def use_default_credentials self.username, self.password = default_credentials - - add_credentials_to_netrc unless ssh_key_set? end def clone(opts = '') - run("git clone #{opts} #{uri} ./") + clone_result = run("git clone #{opts} #{uri} ./") + return clone_result.response unless clone_result.success + + enable_lfs_result = enable_lfs if use_lfs? + + clone_result.to_s + enable_lfs_result.to_s end def checkout(branch_name, new_branch: false) @@ -58,8 +64,6 @@ module QA def configure_identity(name, email) run(%Q{git config user.name #{name}}) run(%Q{git config user.email #{email}}) - - add_credentials_to_netrc end def commit_file(name, contents, message) @@ -70,15 +74,22 @@ module QA def add_file(name, contents) ::File.write(name, contents) - run(%Q{git add #{name}}) + if use_lfs? + git_lfs_track_result = run(%Q{git lfs track #{name} --lockable}) + return git_lfs_track_result.response unless git_lfs_track_result.success + end + + git_add_result = run(%Q{git add #{name}}) + + git_lfs_track_result.to_s + git_add_result.to_s end def commit(message) - run(%Q{git commit -m "#{message}"}) + run(%Q{git commit -m "#{message}"}).to_s end def push_changes(branch = 'master') - run("git push #{uri} #{branch}") + run("git push #{uri} #{branch}").to_s end def merge(branch) @@ -86,7 +97,7 @@ module QA end def commits - run('git log --oneline').split("\n") + run('git log --oneline').to_s.split("\n") end def use_ssh_key(key) @@ -98,7 +109,8 @@ module QA keyscan_params = ['-H'] keyscan_params << "-p #{uri.port}" if uri.port keyscan_params << uri.host - run("ssh-keyscan #{keyscan_params.join(' ')} >> #{known_hosts_file.path}") + res = run("ssh-keyscan #{keyscan_params.join(' ')} >> #{known_hosts_file.path}") + return res.response unless res.success? self.env_vars << %Q{GIT_SSH_COMMAND="ssh -i #{private_key_file.path} -o UserKnownHostsFile=#{known_hosts_file.path}"} end @@ -132,23 +144,66 @@ module QA output[/git< version (\d+)/, 1] || 'unknown' end + def try_add_credentials_to_netrc + return unless add_credentials? + return if netrc_already_contains_content? + + # Despite libcurl supporting a custom .netrc location through the + # CURLOPT_NETRC_FILE environment variable, git does not support it :( + # Info: https://curl.haxx.se/libcurl/c/CURLOPT_NETRC_FILE.html + # + # This will create a .netrc in the correct working directory, which is + # a temporary directory created in .perform() + # + FileUtils.mkdir_p(tmp_home_dir) + File.open(netrc_file_path, 'a') { |file| file.puts(netrc_content) } + File.chmod(0600, netrc_file_path) + end + private - attr_reader :uri, :username, :password, :known_hosts_file, :private_key_file + attr_reader :uri, :username, :password, :known_hosts_file, + :private_key_file, :use_lfs + + alias_method :use_lfs?, :use_lfs + + Result = Struct.new(:success, :response) do + alias_method :success?, :success + alias_method :to_s, :response + end + + def add_credentials? + return false if !username || !password + return true unless ssh_key_set? + return true if ssh_key_set? && use_lfs? + + false + end def ssh_key_set? !private_key_file.nil? end + def enable_lfs + # git lfs install *needs* a .gitconfig defined at ${HOME}/.gitconfig + FileUtils.mkdir_p(tmp_home_dir) + touch_gitconfig_result = run("touch #{tmp_home_dir}/.gitconfig") + return touch_gitconfig_result.response unless touch_gitconfig_result.success? + + git_lfs_install_result = run('git lfs install') + + touch_gitconfig_result.to_s + git_lfs_install_result.to_s + end + def run(command_str, *extra_env) command = [env_vars, *extra_env, command_str, '2>&1'].compact.join(' ') - Runtime::Logger.debug "Git: command=[#{command}]" + Runtime::Logger.debug "Git: pwd=[#{Dir.pwd}], command=[#{command}]" - output, _ = Open3.capture2(command) - output = output.chomp.gsub(/\s+$/, '') - Runtime::Logger.debug "Git: output=[#{output}]" + output, status = Open3.capture2e(command) + output.chomp! + Runtime::Logger.debug "Git: output=[#{output}], exitstatus=[#{status.exitstatus}]" - output + Result.new(status.exitstatus == 0, output) end def default_credentials @@ -159,12 +214,12 @@ module QA end end - def tmp_netrc_directory - @tmp_netrc_directory ||= File.join(Dir.tmpdir, "qa-netrc-credentials", $$.to_s) + def tmp_home_dir + @tmp_home_dir ||= File.join(Dir.tmpdir, "qa-netrc-credentials", $$.to_s) end def netrc_file_path - @netrc_file_path ||= File.join(tmp_netrc_directory, '.netrc') + @netrc_file_path ||= File.join(tmp_home_dir, '.netrc') end def netrc_content @@ -175,21 +230,6 @@ module QA File.exist?(netrc_file_path) && File.readlines(netrc_file_path).grep(/^#{netrc_content}$/).any? end - - def add_credentials_to_netrc - # Despite libcurl supporting a custom .netrc location through the - # CURLOPT_NETRC_FILE environment variable, git does not support it :( - # Info: https://curl.haxx.se/libcurl/c/CURLOPT_NETRC_FILE.html - # - # This will create a .netrc in the correct working directory, which is - # a temporary directory created in .perform() - # - return if netrc_already_contains_content? - - FileUtils.mkdir_p(tmp_netrc_directory) - File.open(netrc_file_path, 'a') { |file| file.puts(netrc_content) } - File.chmod(0600, netrc_file_path) - end end end end diff --git a/qa/qa/resource/repository/push.rb b/qa/qa/resource/repository/push.rb index f33aa0acef0..32f15547da2 100644 --- a/qa/qa/resource/repository/push.rb +++ b/qa/qa/resource/repository/push.rb @@ -8,7 +8,7 @@ module QA class Push < Base attr_accessor :file_name, :file_content, :commit_message, :branch_name, :new_branch, :output, :repository_http_uri, - :repository_ssh_uri, :ssh_key, :user + :repository_ssh_uri, :ssh_key, :user, :use_lfs attr_writer :remote_branch @@ -20,6 +20,7 @@ module QA @new_branch = true @repository_http_uri = "" @ssh_key = nil + @use_lfs = false end def remote_branch @@ -33,7 +34,9 @@ module QA end def files=(files) - if !files.is_a?(Array) || files.empty? + if !files.is_a?(Array) || + files.empty? || + files.any? { |file| !file.has_key?(:name) || !file.has_key?(:content) } raise ArgumentError, "Please provide an array of hashes e.g.: [{name: 'file1', content: 'foo'}]" end @@ -42,6 +45,8 @@ module QA def fabricate! Git::Repository.perform do |repository| + @output = '' + if ssh_key repository.uri = repository_ssh_uri repository.use_ssh_key(ssh_key) @@ -50,6 +55,8 @@ module QA repository.use_default_credentials unless user end + repository.use_lfs = use_lfs + username = 'GitLab QA' email = 'root@gitlab.com' @@ -60,29 +67,27 @@ module QA email = user.email end - repository.clone + repository.try_add_credentials_to_netrc + + @output += repository.clone repository.configure_identity(username, email) - if new_branch - repository.checkout(branch_name, new_branch: true) - else - repository.checkout(branch_name) - end + @output += repository.checkout(branch_name, new_branch: new_branch) if @directory @directory.each_child do |f| - repository.add_file(f.basename, f.read) if f.file? + @output += repository.add_file(f.basename, f.read) if f.file? end elsif @files @files.each do |f| repository.add_file(f[:name], f[:content]) end else - repository.add_file(file_name, file_content) + @output += repository.add_file(file_name, file_content) end - repository.commit(commit_message) - @output = repository.push_changes("#{branch_name}:#{remote_branch}") + @output += repository.commit(commit_message) + @output += repository.push_changes("#{branch_name}:#{remote_branch}") repository.delete_ssh_key end diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index f84f069f4db..9801ed19957 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -955,6 +955,59 @@ describe ProjectsController do end end + describe 'GET resolve' do + shared_examples 'resolvable endpoint' do + it 'redirects to the project page' do + get :resolve, params: { id: project.id } + + expect(response).to have_gitlab_http_status(302) + expect(response).to redirect_to(project_path(project)) + end + end + + context 'with an authenticated user' do + before do + sign_in(user) + end + + context 'when user has access to the project' do + before do + project.add_developer(user) + end + + it_behaves_like 'resolvable endpoint' + end + + context 'when user has no access to the project' do + it 'gives 404 for existing project' do + get :resolve, params: { id: project.id } + + expect(response).to have_gitlab_http_status(404) + end + end + + it 'gives 404 for non-existing project' do + get :resolve, params: { id: '0' } + + expect(response).to have_gitlab_http_status(404) + end + end + + context 'non authenticated user' do + context 'with a public project' do + let(:project) { public_project } + + it_behaves_like 'resolvable endpoint' + end + + it 'gives 404 for private project' do + get :resolve, params: { id: project.id } + + expect(response).to have_gitlab_http_status(404) + end + end + end + def project_moved_message(redirect_route, project) "Project '#{redirect_route.path}' was moved to '#{project.full_path}'. Please update any links and bookmarks that may still have the old path." end diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb index 19142aa1272..5fbb71eca96 100644 --- a/spec/controllers/uploads_controller_spec.rb +++ b/spec/controllers/uploads_controller_spec.rb @@ -12,6 +12,12 @@ shared_examples 'content not cached without revalidation and no-store' do end end +shared_examples 'content publicly cached' do + it 'ensures content is publicly cached' do + expect(subject['Cache-Control']).to eq('max-age=300, public') + end +end + describe UploadsController do let!(:user) { create(:user, avatar: fixture_file_upload("spec/fixtures/dk.png", "image/png")) } @@ -184,7 +190,7 @@ describe UploadsController do expect(response).to have_gitlab_http_status(200) end - it_behaves_like 'content not cached without revalidation and no-store' do + it_behaves_like 'content publicly cached' do subject do get :show, params: { model: 'user', mounted_as: 'avatar', id: user.id, filename: 'dk.png' } @@ -201,7 +207,7 @@ describe UploadsController do expect(response).to have_gitlab_http_status(200) end - it_behaves_like 'content not cached without revalidation' do + it_behaves_like 'content publicly cached' do subject do get :show, params: { model: 'user', mounted_as: 'avatar', id: user.id, filename: 'dk.png' } @@ -537,7 +543,7 @@ describe UploadsController do expect(response).to have_gitlab_http_status(200) end - it_behaves_like 'content not cached without revalidation' do + it_behaves_like 'content publicly cached' do subject do get :show, params: { model: 'appearance', mounted_as: 'header_logo', id: appearance.id, filename: 'dk.png' } @@ -557,7 +563,7 @@ describe UploadsController do expect(response).to have_gitlab_http_status(200) end - it_behaves_like 'content not cached without revalidation' do + it_behaves_like 'content publicly cached' do subject do get :show, params: { model: 'appearance', mounted_as: 'logo', id: appearance.id, filename: 'dk.png' } diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb index d01fc04311a..00d81b26ce2 100644 --- a/spec/features/groups_spec.rb +++ b/spec/features/groups_spec.rb @@ -154,7 +154,7 @@ describe 'Group' do end describe 'group edit', :js do - let(:group) { create(:group) } + let(:group) { create(:group, :public) } let(:path) { edit_group_path(group) } let(:new_name) { 'new-name' } @@ -163,6 +163,8 @@ describe 'Group' do end it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="group[name]"]' }, + { form: '.js-general-settings-form', input: '#group_visibility_level_0' }, + { form: '.js-general-permissions-form', input: '#group_request_access_enabled' }, { form: '.js-general-permissions-form', input: 'input[name="group[two_factor_grace_period]"]' }] it 'saves new settings' do diff --git a/spec/features/issuables/markdown_references/internal_references_spec.rb b/spec/features/issuables/markdown_references/internal_references_spec.rb index 9613e22bf24..23385ba65fc 100644 --- a/spec/features/issuables/markdown_references/internal_references_spec.rb +++ b/spec/features/issuables/markdown_references/internal_references_spec.rb @@ -64,11 +64,13 @@ describe "Internal references", :js do it "shows references" do page.within("#merge-requests .merge-requests-title") do - expect(page).to have_content("1 Related Merge Request") + expect(page).to have_content("Related merge requests") + expect(page).to have_css(".mr-count-badge") end page.within("#merge-requests ul") do expect(page).to have_content(private_project_merge_request.title) + expect(page).to have_css(".merge-request-status") end expect(page).to have_content("mentioned in merge request #{private_project_merge_request.to_reference(public_project)}") 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 32bc851f00f..693ad89069c 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 @@ -141,7 +141,7 @@ describe 'User creates branch and merge request on issue page', :js do it 'disables the create branch button' do expect(page).to have_css('.create-mr-dropdown-wrap .unavailable:not(.hidden)') expect(page).to have_css('.create-mr-dropdown-wrap .available.hidden', visible: false) - expect(page).to have_content /1 Related Merge Request/ + expect(page).to have_content /Related merge requests/ end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 4135f31e051..b81249a1e29 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -168,6 +168,21 @@ describe ApplicationHelper do end end + describe '#client_class_list' do + it 'returns string containing CSS classes representing client browser and platform' do + class_list = helper.client_class_list + expect(class_list).to eq('gl-browser-generic gl-platform-other') + end + end + + describe '#client_js_flags' do + it 'returns map containing JS flags representing client browser and platform' do + flags_list = helper.client_js_flags + expect(flags_list[:isGeneric]).to eq(true) + expect(flags_list[:isOther]).to eq(true) + end + end + describe '#autocomplete_data_sources' do let(:project) { create(:project) } let(:noteable_type) { Issue } diff --git a/spec/javascripts/diffs/components/compare_versions_spec.js b/spec/javascripts/diffs/components/compare_versions_spec.js index 50135b0cf86..a976c6b837f 100644 --- a/spec/javascripts/diffs/components/compare_versions_spec.js +++ b/spec/javascripts/diffs/components/compare_versions_spec.js @@ -22,10 +22,10 @@ describe('CompareVersions', () => { const treeListBtn = vm.$el.querySelector('.js-toggle-tree-list'); expect(treeListBtn).not.toBeNull(); - expect(treeListBtn.dataset.originalTitle).toBe('Toggle file browser'); + expect(treeListBtn.dataset.originalTitle).toBe('Hide file browser'); expect(treeListBtn.querySelectorAll('svg use').length).not.toBe(0); expect(treeListBtn.querySelector('svg use').getAttribute('xlink:href')).toContain( - '#hamburger', + '#collapse-left', ); }); diff --git a/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js b/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js index 08ffc44605f..47be0b3ce9d 100644 --- a/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js +++ b/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js @@ -1,5 +1,5 @@ import DirtySubmitCollection from '~/dirty_submit/dirty_submit_collection'; -import { setInput, createForm } from './helper'; +import { setInputValue, createForm } from './helper'; describe('DirtySubmitCollection', () => { it('disables submits until there are changes', done => { @@ -14,11 +14,11 @@ describe('DirtySubmitCollection', () => { expect(submit.disabled).toBe(true); - return setInput(input, `${originalValue} changes`) + return setInputValue(input, `${originalValue} changes`) .then(() => { expect(submit.disabled).toBe(false); }) - .then(() => setInput(input, originalValue)) + .then(() => setInputValue(input, originalValue)) .then(() => { expect(submit.disabled).toBe(true); }) diff --git a/spec/javascripts/dirty_submit/dirty_submit_form_spec.js b/spec/javascripts/dirty_submit/dirty_submit_form_spec.js index 093fec97951..ae2a785de52 100644 --- a/spec/javascripts/dirty_submit/dirty_submit_form_spec.js +++ b/spec/javascripts/dirty_submit/dirty_submit_form_spec.js @@ -1,14 +1,14 @@ import DirtySubmitForm from '~/dirty_submit/dirty_submit_form'; -import { setInput, createForm } from './helper'; +import { getInputValue, setInputValue, createForm } from './helper'; function expectToToggleDisableOnDirtyUpdate(submit, input) { - const originalValue = input.value; + const originalValue = getInputValue(input); expect(submit.disabled).toBe(true); - return setInput(input, `${originalValue} changes`) + return setInputValue(input, `${originalValue} changes`) .then(() => expect(submit.disabled).toBe(false)) - .then(() => setInput(input, originalValue)) + .then(() => setInputValue(input, originalValue)) .then(() => expect(submit.disabled).toBe(true)); } @@ -33,4 +33,24 @@ describe('DirtySubmitForm', () => { .then(done) .catch(done.fail); }); + + it('disables submit until there are changes for radio inputs', done => { + const { form, input, submit } = createForm('radio'); + + new DirtySubmitForm(form); // eslint-disable-line no-new + + return expectToToggleDisableOnDirtyUpdate(submit, input) + .then(done) + .catch(done.fail); + }); + + it('disables submit until there are changes for checkbox inputs', done => { + const { form, input, submit } = createForm('checkbox'); + + new DirtySubmitForm(form); // eslint-disable-line no-new + + return expectToToggleDisableOnDirtyUpdate(submit, input) + .then(done) + .catch(done.fail); + }); }); diff --git a/spec/javascripts/dirty_submit/helper.js b/spec/javascripts/dirty_submit/helper.js index 6d1e643553c..b51783cb915 100644 --- a/spec/javascripts/dirty_submit/helper.js +++ b/spec/javascripts/dirty_submit/helper.js @@ -1,25 +1,42 @@ import DirtySubmitForm from '~/dirty_submit/dirty_submit_form'; import setTimeoutPromiseHelper from '../helpers/set_timeout_promise_helper'; -export function setInput(element, value) { - element.value = value; +function isCheckableType(type) { + return /^(radio|checkbox)$/.test(type); +} + +export function setInputValue(element, value) { + const { type } = element; + let eventType; + + if (isCheckableType(type)) { + element.checked = !element.checked; + eventType = 'change'; + } else { + element.value = value; + eventType = 'input'; + } element.dispatchEvent( - new Event('input', { + new Event(eventType, { bubbles: true, - cancelable: true, }), ); return setTimeoutPromiseHelper(DirtySubmitForm.THROTTLE_DURATION); } -export function createForm() { +export function getInputValue(input) { + return isCheckableType(input.type) ? input.checked : input.value; +} + +export function createForm(type = 'text') { const form = document.createElement('form'); form.innerHTML = ` - <input type="text" value="original" class="js-input" name="input" /> + <input type="${type}" name="${type}" class="js-input"/> <button type="submit" class="js-dirty-submit"></button> `; + const input = form.querySelector('.js-input'); const submit = form.querySelector('.js-dirty-submit'); diff --git a/spec/javascripts/lib/utils/common_utils_spec.js b/spec/javascripts/lib/utils/common_utils_spec.js index 0dc7e93539a..121c4040212 100644 --- a/spec/javascripts/lib/utils/common_utils_spec.js +++ b/spec/javascripts/lib/utils/common_utils_spec.js @@ -3,6 +3,25 @@ import * as commonUtils from '~/lib/utils/common_utils'; import MockAdapter from 'axios-mock-adapter'; import { faviconDataUrl, overlayDataUrl, faviconWithOverlayDataUrl } from './mock_data'; +const PIXEL_TOLERANCE = 0.2; + +/** + * Loads a data URL as the src of an + * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image|Image} + * and resolves to that Image once loaded. + * + * @param url + * @returns {Promise} + */ +const urlToImage = url => + new Promise(resolve => { + const img = new Image(); + img.onload = function() { + resolve(img); + }; + img.src = url; + }); + describe('common_utils', () => { describe('parseUrl', () => { it('returns an anchor tag with url', () => { @@ -513,8 +532,9 @@ describe('common_utils', () => { it('should return the favicon with the overlay', done => { commonUtils .createOverlayIcon(faviconDataUrl, overlayDataUrl) - .then(url => { - expect(url).toEqual(faviconWithOverlayDataUrl); + .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)])) + .then(([actual, expected]) => { + expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE); done(); }) .catch(done.fail); @@ -536,10 +556,10 @@ describe('common_utils', () => { it('should set page favicon to provided favicon overlay', done => { commonUtils .setFaviconOverlay(overlayDataUrl) - .then(() => { - expect(document.getElementById('favicon').getAttribute('href')).toEqual( - faviconWithOverlayDataUrl, - ); + .then(() => document.getElementById('favicon').getAttribute('href')) + .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)])) + .then(([actual, expected]) => { + expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE); done(); }) .catch(done.fail); @@ -582,10 +602,10 @@ describe('common_utils', () => { commonUtils .setCiStatusFavicon(BUILD_URL) - .then(() => { - const favicon = document.getElementById('favicon'); - - expect(favicon.getAttribute('href')).toEqual(faviconWithOverlayDataUrl); + .then(() => document.getElementById('favicon').getAttribute('href')) + .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)])) + .then(([actual, expected]) => { + expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE); done(); }) .catch(done.fail); diff --git a/spec/javascripts/matchers.js b/spec/javascripts/matchers.js index 0d465510fd3..406527b08a3 100644 --- a/spec/javascripts/matchers.js +++ b/spec/javascripts/matchers.js @@ -1,3 +1,5 @@ +import pixelmatch from 'pixelmatch'; + export default { toContainText: () => ({ compare(vm, text) { @@ -54,4 +56,41 @@ export default { return result; }, }), + toImageDiffEqual: () => { + const getImageData = img => { + const canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + canvas.getContext('2d').drawImage(img, 0, 0); + return canvas.getContext('2d').getImageData(0, 0, img.width, img.height).data; + }; + + return { + compare(actual, expected, threshold = 0.1) { + if (actual.height !== expected.height || actual.width !== expected.width) { + return { + pass: false, + message: `Expected image dimensions (h x w) of ${expected.height}x${expected.width}. + Received an image with ${actual.height}x${actual.width}`, + }; + } + + const { width, height } = actual; + const differentPixels = pixelmatch( + getImageData(actual), + getImageData(expected), + null, + width, + height, + { threshold }, + ); + + return { + pass: differentPixels < 20, + message: `${differentPixels} pixels differ more than ${threshold * + 100} percent between input and output.`, + }; + }, + }; + }, }; diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb index 1b014ecfaa4..3459939267a 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb @@ -79,6 +79,31 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do end end + describe 'pipeline protect' do + subject { step.perform! } + + context 'when ref is protected' do + before do + allow(project).to receive(:protected_for?).with('master').and_return(true) + allow(project).to receive(:protected_for?).with('refs/heads/master').and_return(true) + end + + it 'does not protect the pipeline' do + subject + + expect(pipeline.protected).to eq(true) + end + end + + context 'when ref is not protected' do + it 'does not protect the pipeline' do + subject + + expect(pipeline.protected).to eq(false) + end + end + end + context 'when pipeline has validation errors' do let(:pipeline) do build(:ci_pipeline, project: project, ref: nil) diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb index f773f370ee2..a9d15f1d522 100644 --- a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb +++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb @@ -82,15 +82,36 @@ describe Gitlab::SidekiqLogging::StructuredLogger do end.to raise_error(ArgumentError) end end + + context 'when the job args are bigger than the maximum allowed' do + it 'keeps args from the front until they exceed the limit' do + Timecop.freeze(timestamp) do + job['args'] = [ + 1, + 2, + 'a' * (described_class::MAXIMUM_JOB_ARGUMENTS_LENGTH / 2), + 'b' * (described_class::MAXIMUM_JOB_ARGUMENTS_LENGTH / 2), + 3 + ] + + expected_args = job['args'].take(3) + ['...'] + + expect(logger).to receive(:info).with(start_payload.merge('args' => expected_args)).ordered + expect(logger).to receive(:info).with(end_payload.merge('args' => expected_args)).ordered + expect(subject).to receive(:log_job_start).and_call_original + expect(subject).to receive(:log_job_done).and_call_original + + subject.call(job, 'test_queue') { } + end + end + end end context 'with SIDEKIQ_LOG_ARGUMENTS disabled' do - it 'logs start and end of job' do + it 'logs start and end of job without args' do Timecop.freeze(timestamp) do - start_payload.delete('args') - - expect(logger).to receive(:info).with(start_payload).ordered - expect(logger).to receive(:info).with(end_payload).ordered + expect(logger).to receive(:info).with(start_payload.except('args')).ordered + expect(logger).to receive(:info).with(end_payload.except('args')).ordered expect(subject).to receive(:log_job_start).and_call_original expect(subject).to receive(:log_job_done).and_call_original diff --git a/spec/models/clusters/applications/runner_spec.rb b/spec/models/clusters/applications/runner_spec.rb index 3d0735c6d0b..8ad41e997c2 100644 --- a/spec/models/clusters/applications/runner_spec.rb +++ b/spec/models/clusters/applications/runner_spec.rb @@ -18,7 +18,7 @@ describe Clusters::Applications::Runner do let(:application) { create(:clusters_applications_runner, :scheduled, version: '0.1.30') } it 'updates the application version' do - expect(application.reload.version).to eq('0.1.43') + expect(application.reload.version).to eq('0.1.45') end end end @@ -46,7 +46,7 @@ describe Clusters::Applications::Runner do it 'should be initialized with 4 arguments' do expect(subject.name).to eq('runner') expect(subject.chart).to eq('runner/gitlab-runner') - expect(subject.version).to eq('0.1.43') + expect(subject.version).to eq('0.1.45') expect(subject).to be_rbac expect(subject.repository).to eq('https://charts.gitlab.io') expect(subject.files).to eq(gitlab_runner.files) @@ -64,7 +64,7 @@ describe Clusters::Applications::Runner do let(:gitlab_runner) { create(:clusters_applications_runner, :errored, runner: ci_runner, version: '0.1.13') } it 'should be initialized with the locked version' do - expect(subject.version).to eq('0.1.43') + expect(subject.version).to eq('0.1.45') end end end diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 6f900a60213..5d18e085a6f 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -721,39 +721,28 @@ describe Issue do end end - describe '#check_for_spam' do - let(:project) { create :project, visibility_level: visibility_level } - let(:issue) { create :issue, project: project } + describe '#check_for_spam?' do + using RSpec::Parameterized::TableSyntax - subject do - issue.assign_attributes(description: description) - issue.check_for_spam? + where(:visibility_level, :confidential, :new_attributes, :check_for_spam?) do + Gitlab::VisibilityLevel::PUBLIC | false | { description: 'woo' } | true + Gitlab::VisibilityLevel::PUBLIC | false | { title: 'woo' } | true + Gitlab::VisibilityLevel::PUBLIC | true | { confidential: false } | true + Gitlab::VisibilityLevel::PUBLIC | true | { description: 'woo' } | false + Gitlab::VisibilityLevel::PUBLIC | false | { title: 'woo', confidential: true } | false + Gitlab::VisibilityLevel::PUBLIC | false | { description: 'original description' } | false + Gitlab::VisibilityLevel::INTERNAL | false | { description: 'woo' } | false + Gitlab::VisibilityLevel::PRIVATE | false | { description: 'woo' } | false end - context 'when project is public and spammable attributes changed' do - let(:visibility_level) { Gitlab::VisibilityLevel::PUBLIC } - let(:description) { 'woo' } + with_them do + it 'checks for spam on issues that can be seen anonymously' do + project = create(:project, visibility_level: visibility_level) + issue = create(:issue, project: project, confidential: confidential, description: 'original description') - it 'returns true' do - is_expected.to be_truthy - end - end - - context 'when project is private' do - let(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE } - let(:description) { issue.description } - - it 'returns false' do - is_expected.to be_falsey - end - end - - context 'when spammable attributes have not changed' do - let(:visibility_level) { Gitlab::VisibilityLevel::PUBLIC } - let(:description) { issue.description } + issue.assign_attributes(new_attributes) - it 'returns false' do - is_expected.to be_falsey + expect(issue.check_for_spam?).to eq(check_for_spam?) end end end diff --git a/spec/requests/api/submodules_spec.rb b/spec/requests/api/submodules_spec.rb index c482a85c68f..064392fb185 100644 --- a/spec/requests/api/submodules_spec.rb +++ b/spec/requests/api/submodules_spec.rb @@ -64,7 +64,7 @@ describe API::Submodules do expect(response).to have_gitlab_http_status(400) end - it 'returns the commmit' do + it 'returns the commit' do head_commit = project.repository.commit.id put api(route(submodule), user), params: params @@ -81,7 +81,7 @@ describe API::Submodules do let(:branch) { 'submodule_inside_folder' } let(:encoded_submodule) { CGI.escape(submodule) } - it 'returns the commmit' do + it 'returns the commit' do expect(Submodules::UpdateService) .to receive(:new) .with(any_args, hash_including(submodule: submodule)) diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index 5c3b37ef11c..a0d01fc8263 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -122,6 +122,10 @@ describe 'project routing' do route_to('projects#preview_markdown', namespace_id: 'gitlab', id: 'gitlabhq') ) end + + it 'to #resolve' do + expect(get('/projects/1')).to route_to('projects#resolve', id: '1') + end end # members_namespace_project_autocomplete_sources_path GET /:project_id/autocomplete_sources/members(.:format) projects/autocomplete_sources#members diff --git a/spec/support/shared_examples/dirty_submit_form_shared_examples.rb b/spec/support/shared_examples/dirty_submit_form_shared_examples.rb index ba363593120..52a2ee49495 100644 --- a/spec/support/shared_examples/dirty_submit_form_shared_examples.rb +++ b/spec/support/shared_examples/dirty_submit_form_shared_examples.rb @@ -1,24 +1,36 @@ shared_examples 'dirty submit form' do |selector_args| selectors = selector_args.is_a?(Array) ? selector_args : [selector_args] + def expect_disabled_state(form, submit, is_disabled = true) + disabled_selector = is_disabled == true ? '[disabled]' : ':not([disabled])' + + form.find(".js-dirty-submit#{disabled_selector}", match: :first) + + expect(submit.disabled?).to be is_disabled + end + selectors.each do |selector| - it "disables #{selector[:form]} submit until there are changes", :js do + it "disables #{selector[:form]} submit until there are changes on #{selector[:input]}", :js do form = find(selector[:form]) submit = form.first('.js-dirty-submit') input = form.first(selector[:input]) + is_radio = input[:type] == 'radio' + is_checkbox = input[:type] == 'checkbox' + is_checkable = is_radio || is_checkbox original_value = input.value + original_checkable = form.find("input[name='#{input[:name]}'][checked]") if is_radio + original_checkable = input if is_checkbox expect(submit.disabled?).to be true + expect(input.checked?).to be false - input.set("#{original_value} changes") + is_checkable ? input.click : input.set("#{original_value} changes") - form.find('.js-dirty-submit:not([disabled])', match: :first) - expect(submit.disabled?).to be false + expect_disabled_state(form, submit, false) - input.set(original_value) + is_checkable ? original_checkable.click : input.set(original_value) - form.find('.js-dirty-submit[disabled]', match: :first) - expect(submit.disabled?).to be true + expect_disabled_state(form, submit) end end end diff --git a/spec/uploaders/personal_file_uploader_spec.rb b/spec/uploaders/personal_file_uploader_spec.rb index 2896e9a112d..97758f0243e 100644 --- a/spec/uploaders/personal_file_uploader_spec.rb +++ b/spec/uploaders/personal_file_uploader_spec.rb @@ -4,19 +4,13 @@ describe PersonalFileUploader do let(:model) { create(:personal_snippet) } let(:uploader) { described_class.new(model) } let(:upload) { create(:upload, :personal_snippet_upload) } - let(:identifier) { %r{\h+/\S+} } subject { uploader } - it_behaves_like 'builds correct paths' do - let(:patterns) do - { - store_dir: %r[uploads/-/system/personal_snippet/\d+], - upload_path: identifier, - absolute_path: %r[#{CarrierWave.root}/uploads/-/system/personal_snippet/\d+/#{identifier}] - } - end - end + it_behaves_like 'builds correct paths', + store_dir: %r[uploads/-/system/personal_snippet/\d+], + upload_path: %r[\h+/\S+], + absolute_path: %r[#{CarrierWave.root}/uploads/-/system/personal_snippet\/\d+\/\h+\/\S+$] context "object_store is REMOTE" do before do @@ -25,13 +19,17 @@ describe PersonalFileUploader do include_context 'with storage', described_class::Store::REMOTE - it_behaves_like 'builds correct paths' do - let(:patterns) do - { - store_dir: %r[\d+/\h+], - upload_path: identifier - } - end + it_behaves_like 'builds correct paths', + store_dir: %r[\d+/\h+], + upload_path: %r[^personal_snippet\/\d+\/\h+\/<filename>] + end + + describe '#upload_paths' do + it 'builds correct paths for both local and remote storage' do + paths = uploader.upload_paths('test.jpg') + + expect(paths.first).to match(%r[\h+\/test.jpg]) + expect(paths.second).to match(%r[^personal_snippet\/\d+\/\h+\/test.jpg]) end end diff --git a/yarn.lock b/yarn.lock index 7b3144fca16..1486f6f8642 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7735,6 +7735,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= + dependencies: + pngjs "^3.0.0" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -7766,6 +7773,11 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +pngjs@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.3.tgz#85173703bde3edac8998757b96e5821d0966a21b" + integrity sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q== + pofile@^1: version "1.0.11" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" |