Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-01-06 12:07:56 +00:00
parent 669c24d927
commit 045c0f9554
29 changed files with 5757 additions and 73 deletions

View file

@ -1,3 +1,7 @@
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-gitlab-schedule: &if-canonical-gitlab-schedule
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_PIPELINE_SOURCE == "schedule"'
.notify:
image: ruby:2.6-alpine
stage: notification
@ -11,13 +15,13 @@
variables:
COMMIT_NOTES_URL: "https://${CI_SERVER_HOST}/${CI_PROJECT_PATH}/commit/${CI_COMMIT_SHA}#notes-list"
schedule:package-and-qa:notify-failure:
extends:
- .only:variables_refs-canonical-dot-com-schedules
- .notify
package-and-qa:notify-failure:
extends: .notify
rules:
- <<: *if-canonical-gitlab-schedule
when: manual # TODO: remove notify job if not necessary
script:
- 'export NOTIFICATION_MESSAGE=":skull_and_crossbones: Scheduled QA against master failed! :skull_and_crossbones: See ${CI_PIPELINE_URL}. For downstream pipelines, see ${COMMIT_NOTES_URL}"'
- 'notify_on_job_failure schedule:package-and-qa qa-master "${NOTIFICATION_MESSAGE}" ci_failing'
needs: ["schedule:package-and-qa"]
- 'notify_on_job_failure package-and-qa qa-master "${NOTIFICATION_MESSAGE}" ci_failing'
needs: ["package-and-qa"]
allow_failure: true
when: manual # TODO: remove notify job if not necessary

View file

@ -1,5 +1,9 @@
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-gitlab-and-merge-request: &if-canonical-gitlab-and-merge-request
.if-canonical-gitlab-schedule: &if-canonical-gitlab-schedule
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_PIPELINE_SOURCE == "schedule"'
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-gitlab-merge-request: &if-canonical-gitlab-merge-request
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_MERGE_REQUEST_IID'
# Make sure to update all the similar patterns in other CI config files if you modify these patterns
@ -68,19 +72,13 @@ qa:selectors-foss:
package-and-qa:
extends: .package-and-qa-base
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *qa-patterns
when: on_success
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-patterns
when: manual
needs: ["build-qa-image", "gitlab:assets:compile pull-cache"]
allow_failure: true
schedule:package-and-qa:
extends:
- .package-and-qa-base
- .default-only
- .only:variables_refs-canonical-dot-com-schedules
- <<: *if-canonical-gitlab-schedule
when: on_success
needs: ["build-qa-image", "gitlab:assets:compile pull-cache"]
allow_failure: true

View file

@ -1,9 +1,9 @@
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-gitlab: &if-canonical-gitlab
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/'
.if-canonical-gitlab-schedule: &if-canonical-gitlab-schedule
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_PIPELINE_SOURCE == "schedule"'
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-gitlab-and-merge-request: &if-canonical-gitlab-and-merge-request
.if-canonical-gitlab-merge-request: &if-canonical-gitlab-merge-request
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_MERGE_REQUEST_IID'
# Make sure to update all the similar patterns in other CI config files if you modify these patterns
@ -44,9 +44,11 @@ build-qa-image:
extends: .review-docker
stage: prepare
rules:
- <<: *if-canonical-gitlab
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: on_success
- <<: *if-canonical-gitlab-schedule
when: on_success
script:
- '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"'
- export QA_MASTER_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:master"
@ -157,7 +159,7 @@ schedule:review-build-cng:
review-deploy:
extends: .review-deploy-base
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: on_success
@ -184,7 +186,7 @@ review-stop-failed-deployment:
extends: .base-review-stop
stage: prepare
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: on_success
script:
@ -194,7 +196,7 @@ review-stop:
extends: .base-review-stop
stage: review
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: manual
allow_failure: true
@ -235,7 +237,7 @@ review-stop:
review-qa-smoke:
extends: .review-qa-base
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: on_success
script:
@ -244,7 +246,7 @@ review-qa-smoke:
review-qa-all:
extends: .review-qa-base
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: manual
parallel: 5
@ -276,7 +278,7 @@ review-qa-all:
review-performance:
extends: .review-performance-base
rules:
- <<: *if-canonical-gitlab-and-merge-request
- <<: *if-canonical-gitlab-merge-request
changes: *code-qa-patterns
when: on_success
needs: ["review-deploy"]

View file

@ -24,7 +24,7 @@ const EMPTY_STAGE_TEXTS = {
'The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.',
),
production: __(
'The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.',
'The total stage shows the time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.',
),
};

View file

@ -55,9 +55,18 @@ jQuery.ajaxSetup({
},
});
function disableJQueryAnimations() {
$.fx.off = true;
}
// Disable jQuery animations
if (gon && gon.disable_animations) {
disableJQueryAnimations();
}
// inject test utilities if necessary
if (process.env.NODE_ENV !== 'production' && gon && gon.test_env) {
$.fx.off = true;
disableJQueryAnimations();
import(/* webpackMode: "eager" */ './test_utils/');
}

View file

@ -46,6 +46,8 @@ class Projects::IssuesController < Projects::ApplicationController
push_frontend_feature_flag(:vue_issuable_sidebar, project.group)
end
around_action :allow_gitaly_ref_name_caching, only: [:discussions]
respond_to :html
alias_method :designs, :show

View file

@ -46,7 +46,7 @@
= stylesheet_link_tag "application", media: "all"
= stylesheet_link_tag "print", media: "print"
= stylesheet_link_tag "test", media: "all" if Rails.env.test?
= stylesheet_link_tag "disable_animations", media: "all" if Rails.env.test? || Gitlab.config.gitlab['disable_animations']
= stylesheet_link_tag 'performance_bar' if performance_bar_enabled?
= stylesheet_link_tag "highlight/themes/#{user_color_scheme}", media: "all"

View file

@ -50,7 +50,7 @@
%i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: _("The collection of events added to the data gathered for that stage."), "aria-hidden" => "true" }
%li.total-time-header.pr-5.text-right
%span.stage-name.font-weight-bold
{{ __('Total Time') }}
{{ __('Time') }}
%i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: _("The time taken by each data entry gathered by that stage."), "aria-hidden" => "true" }
.stage-panel-body
%nav.stage-nav

View file

@ -0,0 +1,5 @@
---
title: Fix for 500 when error stack trace is empty
merge_request: 119205
author:
type: fixed

View file

@ -0,0 +1,5 @@
---
title: Reduce Gitaly calls needed for issue discussions
merge_request:
author:
type: performance

View file

@ -0,0 +1,5 @@
---
title: Add a config for disabling CSS and jQuery animations
merge_request: 22217
author:
type: added

View file

@ -166,7 +166,7 @@ module Gitlab
config.assets.precompile << "page_bundles/xterm.css"
config.assets.precompile << "performance_bar.css"
config.assets.precompile << "lib/ace.js"
config.assets.precompile << "test.css"
config.assets.precompile << "disable_animations.css"
config.assets.precompile << "snippets.css"
config.assets.precompile << "locale/**/app.js"
config.assets.precompile << "emoji_sprites.css"

View file

@ -150,6 +150,9 @@ production: &base
## Impersonation settings
impersonation_enabled: true
## Disable jQuery and CSS animations
# disable_animations: true
## Reply by email
# Allow users to comment on issues and merge requests by replying to notification emails.
# For documentation on how to set this up, see http://doc.gitlab.com/ce/administration/reply_by_email.html

View file

@ -77,8 +77,8 @@ end
Some start/end event pairs are not "compatible" with each other. For example:
- "Issue created" to "Merge Request created": The event classes are defined on different domain models, the `object_type` method is different.
- "Issue closed" to "Issue created": Issue must be created first before it can be closed.
- "Issue created" to "Merge Request created": The event classes are defined on different domain models, the `object_type` method is different.
- "Issue closed" to "Issue created": Issue must be created first before it can be closed.
- "Issue closed" to "Issue closed": Duration is always 0.
The `StageEvents` module describes the allowed `start_event` and `end_event` pairings (`PAIRING_RULES` constant). If a new event is added, it needs to be registered in this module.

View file

@ -156,7 +156,7 @@ This is similar to the `.only:variables-canonical-dot-com` + `.except:refs-maste
CI definitions:
```yaml
.if-canonical-gitlab-and-merge-request: &if-canonical-gitlab-and-merge-request
.if-canonical-gitlab-merge-request: &if-canonical-gitlab-merge-request
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_MERGE_REQUEST_IID'
```
@ -210,9 +210,7 @@ graph RL;
M[coverage];
N[pages];
O[static-analysis];
P["schedule:package-and-qa<br/>(master schedule only)"];
Q[package-and-qa];
R[package-and-qa-manual];
S["RSpec<br/>(e.g. rspec unit pg9)"]
T[retrieve-tests-metadata];
@ -259,10 +257,6 @@ subgraph "`review` stage"
subgraph "`qa` stage"
Q --> |needs| C;
Q --> |needs| F;
R --> |needs| C;
R --> |needs| F;
P --> |needs| C;
P --> |needs| F;
review-qa-smoke -.-> |needs and depends on| G;
review-qa-all -.-> |needs and depends on| G;
review-performance -.-> |needs and depends on| G;
@ -271,8 +265,7 @@ subgraph "`qa` stage"
end
subgraph "`notification` stage"
NOTIFICATION1["schedule:package-and-qa:notify-success<br>(on_success)"] -.-> |needs| P;
NOTIFICATION2["schedule:package-and-qa:notify-failure<br>(on_failure)"] -.-> |needs| P;
NOTIFICATION2["package-and-qa:notify-failure<br>(manual)"] -.-> |needs| Q;
end
subgraph "`post-test` stage"

View file

@ -27,11 +27,11 @@ You can find these nightly pipelines at `https://gitlab.com/gitlab-org/quality/s
### Testing code in merge requests
#### Using the `package-and-qa-manual` job
#### Using the `package-and-qa` job
It is possible to run end-to-end tests for a merge request, eventually being run in
a pipeline in the [`gitlab-qa`](https://gitlab.com/gitlab-org/gitlab-qa/) project,
by triggering the `package-and-qa-manual` manual action in the `test` stage (not
by triggering the `package-and-qa` manual action in the `test` stage (not
available for forks).
**This runs end-to-end tests against a custom Omnibus package built from your
@ -53,7 +53,7 @@ graph LR
B2[`Trigger-qa` stage<br>`Trigger:qa-test` job] -.->|2. Triggers a gitlab-qa pipeline and wait for it to be done| A3
subgraph "gitlab-foss/gitlab pipeline"
A1[`test` stage<br>`package-and-qa-manual` job]
A1[`test` stage<br>`package-and-qa` job]
end
subgraph "omnibus-gitlab pipeline"
@ -61,7 +61,7 @@ subgraph "omnibus-gitlab pipeline"
end
subgraph "gitlab-qa pipeline"
A3>QA jobs run] -.->|3. Reports back the pipeline result to the `package-and-qa-manual` job<br>and post the result on the original commit tested| A1
A3>QA jobs run] -.->|3. Reports back the pipeline result to the `package-and-qa` job<br>and post the result on the original commit tested| A1
end
```

View file

@ -40,7 +40,7 @@ the time it would take to build packages and test everything.
That is why when someone changes `t.text_field :login` to
`t.text_field :username` in the _new session_ view we won't know about this
change until our GitLab QA nightly pipeline fails, or until someone triggers
`package-and-qa-manual` action in their merge request.
`package-and-qa` action in their merge request.
Obviously such a change would break all tests. We call this problem a _fragile
tests problem_.

View file

@ -44,8 +44,8 @@ There are seven stages that are tracked as part of the Cycle Analytics calculati
- Time spent on code review
- **Staging** (Continuous Deployment)
- Time between merging and deploying to production
- **Production** (Total)
- Total lifecycle time; i.e. the velocity of the project or team
- **Total** (Total)
- Total lifecycle time. That is, the velocity of the project or team. [Previously known](https://gitlab.com/gitlab-org/gitlab/issues/38317) as **Production**.
## Date ranges
@ -60,12 +60,12 @@ GitLab provides the ability to filter analytics based on a date range. To filter
## How the data is measured
Cycle Analytics records cycle time and data based on the project issues with the
exception of the staging and production stages, where only data deployed to
exception of the staging and total stages, where only data deployed to
production are measured.
Specifically, if your CI is not set up and you have not defined a `production`
or `production/*` [environment](../../ci/yaml/README.md#environment), then you will not have any
data for those stages.
data for this stage.
Each stage of Cycle Analytics is further described in the table below.
@ -77,7 +77,7 @@ Each stage of Cycle Analytics is further described in the table below.
| Test | Measures the median time to run the entire pipeline for that project. It's related to the time GitLab CI takes to run every job for the commits pushed to that merge request defined in the previous stage. It is basically the start->finish time for all pipelines. |
| Review | Measures the median time taken to review the merge request that has closing issue pattern, between its creation and until it's merged. |
| Staging | Measures the median time between merging the merge request with closing issue pattern until the very first deployment to production. It's tracked by the environment set to `production` or matching `production/*` (case-sensitive, `Production` won't work) in your GitLab CI configuration. If there isn't a production environment, this is not tracked. |
| Production| The sum of all time (medians) taken to run the entire process, from issue creation to deploying the code to production. |
| Total | The sum of all time (medians) taken to run the entire process, from issue creation to deploying the code to production. [Previously known](https://gitlab.com/gitlab-org/gitlab/issues/38317) as **Production**. |
How this works, behind the scenes:
@ -124,7 +124,7 @@ environments is configured.
1. Now that the merge request is merged, a deployment to the `production`
environment starts and finishes at 19:30 (stop of **Staging** stage).
1. The cycle completes and the sum of the median times of the previous stages
is recorded to the **Production** stage. That is the time between creating an
is recorded to the **Total** stage. That is the time between creating an
issue and deploying its relevant merge request to production.
From the above example you can conclude the time it took each stage to complete
@ -136,10 +136,10 @@ as long as their total time:
- **Test**: 5min
- **Review**: 5h (19:00 - 14:00)
- **Staging**: 30min (19:30 - 19:00)
- **Production**: Since this stage measures the sum of median time off all
- **Total**: Since this stage measures the sum of median time of all
previous stages, we cannot calculate it if we don't know the status of the
stages before. In case this is the very first cycle that is run in the project,
then the **Production** time is 10h 30min (19:30 - 09:00)
then the **Total** time is 10h 30min (19:30 - 09:00)
A few notes:

View file

@ -18,7 +18,7 @@ module Gitlab
end
def title
s_('CycleAnalyticsStage|Production')
s_('CycleAnalyticsStage|Total')
end
def legend

View file

@ -28,6 +28,7 @@ module Gitlab
gon.sprite_file_icons = IconsHelper.sprite_file_icons_path
gon.emoji_sprites_css_path = ActionController::Base.helpers.stylesheet_path('emoji_sprites')
gon.test_env = Rails.env.test?
gon.disable_animations = Gitlab.config.gitlab['disable_animations']
gon.suggested_label_colors = LabelsHelper.suggested_colors
gon.first_day_of_week = current_user&.first_day_of_week || Gitlab::CurrentSettings.first_day_of_week
gon.ee = Gitlab.ee?

View file

@ -187,13 +187,13 @@ module Sentry
def parse_stack_trace(event)
exception_entry = event.dig('entries')&.detect { |h| h['type'] == 'exception' }
return unless exception_entry
return [] unless exception_entry
exception_values = exception_entry.dig('data', 'values')
stack_trace_entry = exception_values&.detect { |h| h['stacktrace'].present? }
return unless stack_trace_entry
return [] unless stack_trace_entry
stack_trace_entry.dig('stacktrace', 'frames')
stack_trace_entry.dig('stacktrace', 'frames') || []
end
def map_to_error(issue)

View file

@ -5508,9 +5508,6 @@ msgstr ""
msgid "CycleAnalyticsStage|Plan"
msgstr ""
msgid "CycleAnalyticsStage|Production"
msgstr ""
msgid "CycleAnalyticsStage|Review"
msgstr ""
@ -5520,6 +5517,9 @@ msgstr ""
msgid "CycleAnalyticsStage|Test"
msgstr ""
msgid "CycleAnalyticsStage|Total"
msgstr ""
msgid "CycleAnalyticsStage|is not available for the selected group"
msgstr ""
@ -18158,6 +18158,9 @@ msgstr ""
msgid "The time taken by each data entry gathered by that stage."
msgstr ""
msgid "The total stage shows the time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle."
msgstr ""
msgid "The unique identifier for the Geo node. Must match `geo_node_name` if it is set in gitlab.rb, otherwise it must match `external_url` with a trailing slash"
msgstr ""
@ -19146,9 +19149,6 @@ msgstr ""
msgid "Total Contributions"
msgstr ""
msgid "Total Time"
msgstr ""
msgid "Total artifacts size: %{total_size}"
msgstr ""

View file

@ -30,7 +30,7 @@ and corresponding views / partials / selectors in CE / EE.
Whenever `qa:selectors` job fails in your merge request, you are supposed to
fix [page objects](../doc/development/testing_guide/end_to_end/page_objects.md). You should also trigger end-to-end tests
using `package-and-qa-manual` manual action, to test if everything works fine.
using `package-and-qa` manual action, to test if everything works fine.
## How can I use it?

View file

@ -76,7 +76,7 @@ describe 'Cycle Analytics', :js do
click_stage('Staging')
expect_build_to_be_present
click_stage('Production')
click_stage('Total')
expect_issue_to_be_present
end

View file

@ -0,0 +1,300 @@
{
"eventID": "333b98e3b91341d8a6247edff171d8cf",
"dist": null,
"userReport": null,
"projectID": "1788822",
"previousEventID": "d32f1ce60de14911beec5109d9b5bdbd",
"message": null,
"id": "333b98e3b91341d8a6247edff171d8cf",
"size": 77202,
"errors": [
{
"data": {
"reason": "the cookie is missing a name/value pair",
"name": "request.cookies",
"value": "********"
},
"message": "Discarded invalid value",
"type": "invalid_data"
},
{
"data": {
"reason": "the cookie is missing a name/value pair",
"name": "request.cookies",
"value": "********"
},
"message": "Discarded invalid value",
"type": "invalid_data"
}
],
"culprit": "/",
"title": "ActiveRecord::NoDatabaseError: FATAL: database \"test_development\" does not exist",
"sdkUpdates": [],
"platform": "ruby",
"location": "active_record/connection_adapters/postgresql_adapter.rb",
"nextEventID": null,
"type": "error",
"metadata": {
"function": "rescue in connect",
"type": "ActiveRecord::NoDatabaseError",
"value": "FATAL: database \"test_development\" does not exist\n",
"filename": "active_record/connection_adapters/postgresql_adapter.rb"
},
"groupingConfig": {
"enhancements": "eJybzDhxY3J-bm5-npWRgaGlroGxrpHxBABcTQcY",
"id": "newstyle:2019-05-08"
},
"crashFile": null,
"tags": [
{
"value": "Chrome 78.0.3904",
"key": "browser",
"_meta": null
},
{
"value": "Chrome",
"key": "browser.name",
"_meta": null
},
{
"value": "Mac OS X 10.15.1",
"key": "client_os",
"_meta": null
},
{
"value": "Mac OS X",
"key": "client_os.name",
"_meta": null
},
{
"value": "development",
"key": "environment",
"_meta": null
},
{
"value": "error",
"key": "level",
"_meta": null
},
{
"value": "ruby",
"key": "logger",
"_meta": null
},
{
"value": "b56ae26",
"key": "release",
"_meta": null
},
{
"value": "Seans-MBP.fritz.box",
"key": "server_name",
"_meta": null
},
{
"value": "/",
"key": "transaction",
"_meta": null
},
{
"value": "http://localhost:3001/",
"key": "url",
"_meta": null
},
{
"query": "user.ip:\"::1\"",
"value": "ip:::1",
"key": "user",
"_meta": null
}
],
"dateCreated": "2019-12-08T21:48:07Z",
"dateReceived": "2019-12-08T21:48:08.579417Z",
"user": {
"username": null,
"name": null,
"ip_address": "::1",
"email": null,
"data": null,
"id": null
},
"entries": [],
"packages": {
"coffee-script": "2.4.1",
"uglifier": "4.1.20",
"ffi": "1.11.1",
"actioncable": "5.2.3",
"io-like": "0.3.0",
"rb-inotify": "0.10.0",
"spring": "2.1.0",
"loofah": "2.2.3",
"selenium-webdriver": "3.142.3",
"marcel": "0.3.3",
"sass-listen": "4.0.0",
"nokogiri": "1.10.4",
"activestorage": "5.2.3",
"activejob": "5.2.3",
"mimemagic": "0.3.3",
"faraday": "0.17.1",
"execjs": "2.7.0",
"activesupport": "5.2.3",
"rails-html-sanitizer": "1.2.0",
"byebug": "11.0.1",
"xpath": "3.2.0",
"msgpack": "1.3.1",
"childprocess": "1.0.1",
"rails-dom-testing": "2.0.3",
"public_suffix": "3.1.1",
"mini_mime": "1.0.2",
"arel": "9.0.0",
"coffee-rails": "4.2.2",
"bundler": "1.17.3",
"rails": "5.2.3",
"globalid": "0.4.2",
"sentry-raven": "2.12.3",
"concurrent-ruby": "1.1.5",
"capybara": "3.28.0",
"regexp_parser": "1.6.0",
"sprockets-rails": "3.2.1",
"tzinfo": "1.2.5",
"mail": "2.7.1",
"actionview": "5.2.3",
"rubyzip": "1.2.3",
"coffee-script-source": "1.12.2",
"listen": "3.1.5",
"i18n": "1.6.0",
"erubi": "1.8.0",
"rake": "12.3.3",
"nio4r": "2.4.0",
"activemodel": "5.2.3",
"web-console": "3.7.0",
"ruby_dep": "1.5.0",
"turbolinks": "5.2.0",
"archive-zip": "0.12.0",
"method_source": "0.9.2",
"minitest": "5.11.3",
"puma": "3.12.1",
"sass-rails": "5.1.0",
"chromedriver-helper": "2.1.1",
"sprockets": "3.7.2",
"bindex": "0.8.1",
"actionmailer": "5.2.3",
"rack-test": "1.1.0",
"bootsnap": "1.4.4",
"railties": "5.2.3",
"mini_portile2": "2.4.0",
"crass": "1.0.4",
"websocket-extensions": "0.1.4",
"multipart-post": "2.1.1",
"rb-fsevent": "0.10.3",
"jbuilder": "2.9.1",
"pg": "1.1.4",
"sass": "3.7.4",
"activerecord": "5.2.3",
"builder": "3.2.3",
"spring-watcher-listen": "2.0.1",
"websocket-driver": "0.7.1",
"thor": "0.20.3",
"thread_safe": "0.3.6",
"addressable": "2.6.0",
"prometheus-client-mmap": "0.9.8",
"tilt": "2.0.9",
"actionpack": "5.2.3",
"rack": "2.0.7",
"turbolinks-source": "5.2.0"
},
"sdk": {
"version": "2.12.3",
"name": "raven-ruby"
},
"_meta": {
"user": null,
"context": null,
"entries": {
"1": {
"data": {
"": null,
"cookies": {
"": {
"err": [
[
"invalid_data",
{
"reason": "the cookie is missing a name/value pair"
}
]
],
"val": "********"
}
},
"url": null,
"headers": null,
"env": null,
"query": null,
"data": null,
"method": null
}
}
},
"contexts": null,
"message": null,
"packages": null,
"tags": {},
"sdk": null
},
"contexts": {
"browser": {
"version": "78.0.3904",
"type": "browser",
"name": "Chrome"
},
"client_os": {
"version": "10.15.1",
"type": "os",
"name": "Mac OS X"
}
},
"fingerprints": [
"6aa133ea51857634f2d113de52b5cc61",
"e1613eeb169241eab95b76ab52a80c68"
],
"context": {
"server": {
"runtime": {
"version": "ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]",
"name": "ruby"
},
"os": {
"kernel_version": "Darwin Seans-MBP.fritz.box 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64",
"version": "Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64",
"build": "19.0.0",
"name": "Darwin"
}
}
},
"release": {
"dateReleased": null,
"commitCount": 0,
"url": null,
"data": {},
"lastDeploy": null,
"deployCount": 0,
"dateCreated": "2019-12-08T21:47:47Z",
"lastEvent": "2019-12-09T21:52:05Z",
"version": "b56ae26",
"firstEvent": "2019-12-08T21:47:47Z",
"lastCommit": null,
"shortVersion": "b56ae26",
"authors": [],
"owner": null,
"newGroups": 26,
"ref": null,
"projects": [
{
"slug": "gitlab-03",
"name": "gitlab-03"
}
]
},
"groupID": "1378364652"
}

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@ require 'spec_helper'
require 'lib/gitlab/cycle_analytics/shared_stage_spec'
describe Gitlab::CycleAnalytics::ProductionStage do
let(:stage_name) { :production }
let(:stage_name) { 'Total' }
it_behaves_like 'base stage'
end

View file

@ -218,4 +218,62 @@ describe Sentry::Client do
it_behaves_like 'issues has correct length', 1
end
end
describe '#issue_latest_event' do
let(:sample_response) do
Gitlab::Utils.deep_indifferent_access(
JSON.parse(fixture_file('sentry/issue_latest_event_sample_response.json'))
)
end
let(:issue_id) { '1234' }
let(:sentry_api_response) { sample_response }
let(:sentry_url) { 'https://sentrytest.gitlab.com/api/0' }
let(:sentry_request_url) { sentry_url + "/issues/#{issue_id}/events/latest/" }
let!(:sentry_api_request) { stub_sentry_request(sentry_request_url, body: sentry_api_response) }
subject { client.issue_latest_event(issue_id: issue_id) }
it_behaves_like 'calls sentry api'
it 'has correct return type' do
expect(subject).to be_a(Gitlab::ErrorTracking::ErrorEvent)
end
shared_examples 'assigns error tracking event correctly' do
using RSpec::Parameterized::TableSyntax
where(:event_object, :sentry_response) do
:issue_id | :groupID
:date_received | :dateReceived
end
with_them do
it { expect(subject.public_send(event_object)).to eq(sentry_api_response.dig(*sentry_response)) }
end
end
context 'error object created from sentry response' do
it_behaves_like 'assigns error tracking event correctly'
it 'parses the stack trace' do
expect(subject.stack_trace_entries).to be_a Array
expect(subject.stack_trace_entries).not_to be_empty
end
context 'error without stack trace' do
before do
sample_response['entries'] = []
stub_sentry_request(sentry_request_url, body: sample_response)
end
it_behaves_like 'assigns error tracking event correctly'
it 'returns an empty array for stack_trace_entries' do
expect(subject.stack_trace_entries).to eq []
end
end
end
end
end