Commit Graph

260 Commits

Author SHA1 Message Date
GitLab Bot 8957ace315 Add latest changes from gitlab-org/gitlab@master 2020-03-14 00:09:30 +00:00
GitLab Bot 1078b7bf25 Add latest changes from gitlab-org/gitlab@master 2020-02-11 09:08:39 +00:00
GitLab Bot e3e300557f Add latest changes from gitlab-org/gitlab@master 2020-01-08 12:07:59 +00:00
GitLab Bot 6a7cc8c147 Add latest changes from gitlab-org/gitlab@master 2019-12-05 18:07:51 +00:00
GitLab Bot 4c464055fb Add latest changes from gitlab-org/gitlab@master 2019-11-05 15:06:17 +00:00
GitLab Bot e95a97594a Add latest changes from gitlab-org/gitlab@master 2019-10-25 21:06:20 +00:00
GitLab Bot 914ea32e0e Add latest changes from gitlab-org/gitlab@master 2019-10-16 09:07:51 +00:00
GitLab Bot 77a7772c3b Add latest changes from gitlab-org/gitlab@master 2019-10-08 09:06:09 +00:00
GitLab Bot 80f61b4035 Add latest changes from gitlab-org/gitlab@master 2019-09-18 14:02:45 +00:00
GitLab Bot bd860c22f6 Add latest changes from gitlab-org/gitlab@master 2019-09-17 12:06:48 +00:00
GitLab Bot 48c77599ca Add latest changes from gitlab-org/gitlab@master 2019-09-17 00:06:11 +00:00
GitLab Bot b7dfe2ae40 Add latest changes from gitlab-org/gitlab@master 2019-09-13 13:26:31 +00:00
Matija Čupić 21024065c5
Preload tags when loading Ci::Pipeline 2019-08-23 14:49:52 +02:00
Alex Ives 3e2b45870a Issue #39099: Add links for latest pipelines 2019-08-22 08:49:40 -05:00
Krasimir Angelov 85609c117e Implement support for CI variables of type file
Add env_var and file as supported types for CI variables. Variables of
type file expose to users existing gitlab-runner behaviour - save
variable value into a temp file and set the path to this file in an ENV
var named after the variable key.

Resolves https://gitlab.com/gitlab-org/gitlab-ce/issues/46806.
2019-05-06 13:11:42 +00:00
Stan Hu f2fa7c3299 Fix and expand Gitaly FindCommit caching
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/26248 added
support for deduplicating FindCommit requests using Gitaly ref name
caching. However, not all endpoints were covered, and in one case the
Gitaly wrapper wasn't actually surrounding the serialization step. We
can safely cache ref names between FindCommit calls for #index and #show
endpoints for merge requests and pipelines. This can significantly
reduce the number of FindCommit requests.
2019-04-04 13:42:58 -07:00
Stan Hu e37383d453 Cache FindCommit results in pipelines view
For each pipeline, the controller will call `Pipeline#latest?` to
determine if the pipeline's ref is the latest for that branch.
Since it's likely that the same branches are being used in each
pipeline, we can reduce Gitaly overhead by caching the results
of the FindCommit call.
2019-04-02 04:15:32 -07:00
Kamil Trzciński d4c7214799
[master] Pipelines section is available to unauthorized users 2019-01-31 16:52:50 +01:00
Kamil Trzciński c651191d14 Prefer to use overrides on PipelinesController 2019-01-30 12:12:36 +01:00
Francisco Javier López a6778fc647 Rename project's pipelines relation 2018-12-05 14:39:15 +00:00
gfyoung 12ee2753c1 Enable even more frozen string in app/controllers
Enables frozen string for some vestigial files as
well as the following:

* app/controllers/projects/**/*.rb
* app/controllers/sherlock/**/*.rb
* app/controllers/snippets/**/*.rb
* app/controllers/users/**/*.rb

Partially addresses #47424.
2018-09-25 22:43:49 -07:00
Steve Azzopardi c80abb40fc
Add retried jobs to pipeline stages
closes https://gitlab.com/gitlab-org/gitlab-ce/issues/50461
2018-09-13 17:31:52 +02:00
Yorick Peterse 2039c8280d
Disable existing offenses for the CodeReuse cops
This whitelists all existing offenses for the various CodeReuse cops, of
which most are triggered by the CodeReuse/ActiveRecord cop.
2018-09-11 17:32:00 +02:00
Lukas Eipert 8cd80da8bb
remove unneeded `before_action` 2018-08-02 13:49:39 +02:00
Bob Van Landuyt f1d3ea63cf Show the status of a user in interactions
The status is shown for
- The author of a commit when viewing a commit
- Notes on a commit (regular/diff)
- The user that triggered a pipeline when viewing a pipeline
- The author of a merge request when viewing a merge request
- The author of notes on a merge request (regular/diff)
- The author of an issue when viewing an issue
- The author of notes on an issue
- The author of a snippet when viewing a snippet
- The author of notes on a snippet
- A user's profile page
- The list of members of a group/user
2018-07-30 15:01:26 +02:00
Bob Van Landuyt 04b046587f Add pipeline lists to GraphQL
This adds Keyset pagination to GraphQL lists. PoC for that is
pipelines on merge requests and projects.

When paginating a list, the base-64 encoded id of the ordering
field (in most cases the primary key) can be passed in the `before` or
`after` GraphQL argument.
2018-07-04 10:53:39 +02:00
Grzegorz Bizon dab3ae39a2 Do not paginate pipelines active relation twice 2018-05-23 13:29:21 +02:00
Grzegorz Bizon f89f232d19 Simplify pipelines preloader implementation 2018-05-23 10:22:28 +02:00
Grzegorz Bizon 0b3cca568d Fix rubocop offense in pipeline controller specs 👮 2018-05-22 14:38:25 +02:00
Grzegorz Bizon ea35fd05bb Refactor pipeline preloader to split reponsibilities better 2018-05-22 13:55:05 +02:00
Grzegorz Bizon 76a7157c76 Abstract persisted/legacy stages in pipeline model 2018-05-22 13:04:07 +02:00
Grzegorz Bizon 6c63f96e0a Preload number of warnings in every stage in a pipeline
This makes it possible to avoid N+1 queries when loading pipelines
table.
2018-05-22 12:30:45 +02:00
Grzegorz Bizon 631bd9bf08 Use persisted stages to load pipelines index table 2018-05-21 15:13:32 +02:00
Yorick Peterse 878ca2e69b
Exclude coverage data from the pipelines page
When displaying a project's pipelines
(Projects::PipelinesController#index) we now exclude the coverage data.
This data was not used by the frontend, yet getting it would require one
SQL query per pipeline. These queries in turn could be quite expensive
on GitLab.com.
2018-05-17 13:53:00 +02:00
Yorick Peterse 19428e8008
Preload pipeline data for project pipelines
When displaying the pipelines of a project we now preload the following
data:

1. Authors of the commits that belong to these pipelines
2. The number of warnings per pipeline, which is used by
   Ci::Pipeline#has_warnings?

== Commit Authors

Previously this data was queried for every Commit separately, leading to
20 SQL queries being executed in the worst case. With an average of 3 to
5 milliseconds per SQL query this could result in 100 milliseconds being
spent in _just_ getting Commit authors.

To preload this data Commit#author now uses BatchLoader (through
Commit#lazy_author), and a separate module
Gitlab::Ci::Pipeline::Preloader is used to ensure all authors are loaded
before they are used.

== Number of warnings

This changes Ci::Pipeline#has_warnings? so it supports preloading of the
number of warnings per pipeline. This removes the need for executing a
COUNT(*) query for every pipeline just to see if it has any warnings or
not.
2018-05-17 13:53:00 +02:00
Yorick Peterse 70985aa19b
Limit the number of pipelines to count
When displaying the project pipelines dashboard we display a few tabs
for different pipeline states. For every such tab we count the number of
pipelines that belong to it. For large projects such as GitLab CE this
means having to count over 80 000 rows, which can easily take between 70
and 100 milliseconds per query.

To improve this we apply a technique we already use for search results:
we limit the number of rows to count. The current limit is 1000, which
means that if more than 1000 rows are present for a state we will show
"1000+" instead of the exact number. The SQL queries used for this
perform much better than a regular COUNT, even when a project has a lot
of pipelines.

Prior to these changes we would end up running a query like this:

    SELECT COUNT(*)
    FROM ci_pipelines
    WHERE project_id = 13083
    AND status IN ('success', 'failed', 'canceled')

This would produce a plan along the lines of the following:

    Aggregate  (cost=3147.55..3147.56 rows=1 width=8) (actual time=501.413..501.413 rows=1 loops=1)
      Buffers: shared hit=17116 read=861 dirtied=2
      ->  Index Only Scan using index_ci_pipelines_on_project_id_and_ref_and_status_and_id on ci_pipelines  (cost=0.56..2984.14 rows=65364 width=0) (actual time=0.095..490.263 rows=80388 loops=1)
            Index Cond: (project_id = 13083)
            Filter: ((status)::text = ANY ('{success,failed,canceled}'::text[]))
            Rows Removed by Filter: 2894
            Heap Fetches: 353
            Buffers: shared hit=17116 read=861 dirtied=2
    Planning time: 1.409 ms
    Execution time: 501.519 ms

Using the LIMIT count technique we instead run the following query:

    SELECT COUNT(*)
    FROM (
        SELECT 1
        FROM ci_pipelines
        WHERE project_id = 13083
        AND status IN ('success', 'failed', 'canceled')
        LIMIT 1001
    ) for_count

This query produces the following plan:

    Aggregate  (cost=58.77..58.78 rows=1 width=8) (actual time=1.726..1.727 rows=1 loops=1)
      Buffers: shared hit=169 read=15
      ->  Limit  (cost=0.56..46.25 rows=1001 width=4) (actual time=0.164..1.570 rows=1001 loops=1)
            Buffers: shared hit=169 read=15
            ->  Index Only Scan using index_ci_pipelines_on_project_id_and_ref_and_status_and_id on ci_pipelines  (cost=0.56..2984.14 rows=65364 width=4) (actual time=0.162..1.426 rows=1001 loops=1)
                  Index Cond: (project_id = 13083)
                  Filter: ((status)::text = ANY ('{success,failed,canceled}'::text[]))
                  Rows Removed by Filter: 9
                  Heap Fetches: 10
                  Buffers: shared hit=169 read=15
    Planning time: 1.832 ms
    Execution time: 1.821 ms

While this query still uses a Filter for the "status" field the number
of rows that it may end up filtering (at most 1001) is small enough that
an additional index does not appear to be necessary at this time.

See https://gitlab.com/gitlab-org/gitlab-ce/issues/43132#note_68659234
for more information.
2018-05-17 13:52:59 +02:00
Jan Provaznik 21588f180c Enable update_(build|pipeline) for maintainers 2018-05-15 08:18:22 +00:00
Grzegorz Bizon 3aa5317d93 Merge branch 'fix-failed-jobs-tab' into 'master'
Fix failed jobs tab

See merge request gitlab-org/gitlab-ce!18520
2018-05-08 06:52:50 +00:00
Kamil Trzciński d840535c33 Merge branch '33697-pipelines-json-endpoint' into 'master'
Resolve "CI retry/cancel job or pipeline redirect the user and can't be open in a new tab"

Closes #33697

See merge request gitlab-org/gitlab-ce!18451
2018-05-07 08:32:45 +00:00
Kamil Trzciński 6776fac622 Respect permissions when showing Failed Jobs 2018-05-06 18:46:00 +02:00
Kamil Trzciński f2dda0bd29 Fix syntax error 2018-05-02 14:15:24 +02:00
Kamil Trzciński 6ea31cb7cd Add stages_ajax endpoint to serve old HTML 2018-05-02 00:05:03 +02:00
Kamil Trzciński 2178bd5ff4 Fix stage.json endpoint 2018-04-23 16:20:21 +02:00
Kamil Trzciński 551f8c4b1a Add proper stage.json data 2018-04-23 15:58:59 +02:00
Matija Čupić 3a5773ce07
Accept variable params in create_params 2018-04-18 14:18:27 +02:00
Yorick Peterse cca61980d5
Track and act upon the number of executed queries
This ensures that we have more visibility in the number of SQL queries
that are executed in web requests. The current threshold is hardcoded to
100 as we will rarely (maybe once or twice) change it.

In production and development we use Sentry if enabled, in the test
environment we raise an error. This feature is also only enabled in
production/staging when running on GitLab.com as it's not very useful to
other users.
2018-02-01 17:00:46 +01:00
Zeger-Jan van de Weg c6edae3887
Load commit in batches for pipelines#index
Uses `list_commits_by_oid` on the CommitService, to request the needed
commits for pipelines. These commits are needed to display the user that
created the commit and the commit title.

This includes fixes for tests failing that depended on the commit
being `nil`. However, now these are batch loaded, this doesn't happen
anymore and the commits are an instance of BatchLoader.
2017-12-19 10:05:40 +01:00
Maxim Rydkin f364cc34ea
move `lib/ci/charts.rb` into `lib/gitlab/ci/charts.rb` 2017-09-12 22:32:01 +03:00
Douwe Maan fe13f11041 Create and use project path helpers that only need a project, no namespace 2017-07-05 11:11:59 -05:00
Z.J. van de Weg 9b2ae90d2c Remove references to build in pipeline charts
Being the good boyscouts, but mainly because of [the comment in the
review](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12378#note_33302115)
the words used for classes and variables are changed to not use builds
anymore.
2017-06-23 14:50:03 +02:00
Z.J. van de Weg 13d39971f3 Improve performance for pipeline charts
Achieved by using another table, which both has better indexes and
is smaller. Now the data provided for the user is more valueable too.
2017-06-23 11:46:55 +02:00
Kamil Trzcinski a4a3da764a Allow to access pipelines even if they are disabled, but only present jobs and commit statuses without giving ability to access them 2017-06-13 09:52:48 +02:00
Grzegorz Bizon 79380fe5fb Merge branch 'master' into feature/gb/persist-pipeline-stages
* master: (524 commits)
  Improve user experience around slash commands in instant comments
  Fix LFS timeouts when trying to save large files
  retryable? is now available for CommitStatus
  Resolve "Documentation of `.gitlab-ci.yml` states incorrect example for variables"
  Fix test failures
  Add slugify project path to CI enviroment variables
  Fixed typo: craeted -> created
  32118 Make New environment empty state btn lowercase
  Expose import_status in Projects API
  32832 Remove overflow from comment form for confidential issues and vertically aligns confidential issue icon
  Fix test failures
  Allow manual bypass of auto_sign_in_with_provider
  Fix keys seed
  Allow users to be hard-deleted from the API
  fixup some classnames and media queries
  Enable the Style/PreferredHashMethods cop
  Lint our factories creation in addition to their build
  Don’t schedule workers from inside transactions
  Allow scheduling from after_commit hooks
  Forbid Sidekiq scheduling in transactions
  ...

Conflicts:
	app/serializers/pipeline_entity.rb
	db/schema.rb
	spec/factories/ci/stages.rb
	spec/lib/gitlab/import_export/safe_model_attributes.yml
	spec/services/ci/create_pipeline_service_spec.rb
	spec/spec_helper.rb
2017-06-05 12:51:59 +02:00
Grzegorz Bizon c00d72b6f3 Rename pipeline methods related to legacy stages 2017-06-01 11:55:18 +02:00
Kamil Trzcinski 161af17c1b Introduce source to pipeline entity 2017-05-31 14:17:49 +02:00
Rémy Coutable d40e1f547e Enable the Style/TrailingCommaInLiteral cop
Use the EnforcedStyleForMultiline: no_comma option.

Signed-off-by: Rémy Coutable <remy@rymai.me>
2017-05-10 18:25:45 +02:00
Fatih Acet 0151325dac Merge request widget redesign 2017-05-09 04:15:34 +00:00
Zeger-Jan van de Weg c17e6a6c68 Real time pipeline show action 2017-05-06 16:45:46 +00:00
Phil Hughes 9caa7e7a54 Merge branch '24883-build-failure-summary-page' into 'master'
Build failures summary page for pipelines

Closes #24883

See merge request !10719
2017-05-05 18:58:01 +00:00
James Edwards-Jones acd9cd0906 Hides pipeline ‘Failed Jobs’ tab when no jobs have failed 2017-05-05 15:41:36 +01:00
James Edwards-Jones 4c0adb9ee9 Build failures summary page for pipelines 2017-05-05 15:01:50 +01:00
Grzegorz Bizon c68bf4327b Use wrap_parameters in pipelines controller
This makes it possible to workaround a bug in `safe_constantize` which
caused a `LoadError` exception when doing

```
"Pipeline".safe_constantize
LoadError: Unable to autoload constant Pipeline, expected
/home/grzesiek/gdk/gitlab/app/models/ci/pipeline.rb to define it
```

See https://github.com/rails/rails/issues/28854 for more details.
2017-05-05 09:32:13 +02:00
Grzegorz Bizon b8960354fe Respond with no content for pipeline JSON actions 2017-05-05 09:32:13 +02:00
Filipa Lacerda a1debf5cf0 Retry and cancel endpoints send 204 json response. Request is made with type json 2017-05-05 09:32:13 +02:00
Shinya Maeda e9d9445195 - Add new parameters for Pipeline API
- Expand PipelinesFinder functions
2017-05-03 02:11:50 +09:00
Kamil Trzciński 15e87cea3a Merge branch '8998_skip_pending_commits_if_not_head' into 'master'
Add auto-cancel for pending pipelines on branch, if they are not HEAD

See merge request !9362
2017-04-07 08:30:32 +00:00
Toon Claes 26e24bbe53
Set the Etag cache polling interval 2017-04-06 23:50:36 +02:00
Rydkin Maxim 2d4fd769a7 replaced one more helper with presenter 2017-04-04 22:21:12 +03:00
Shinya Maeda 38b1ec2cc0 Fix rspec failure 2017-03-23 17:11:49 +09:00
Shinya Maeda 2b33e9eeb6 with_status to only_status 2017-03-23 17:11:49 +09:00
Shinya Maeda ba27f1b954 Expose only status. ci_cd_status to status. Support abstract class. 2017-03-23 17:11:48 +09:00
Shinya Maeda 0e06cfc059 Add api points for ci cd status. Add favicon. 2017-03-23 17:11:48 +09:00
Kushal Pandya 52352be6be Cleaning up navigational order - Project 2017-03-02 17:57:01 +00:00
Filipa Lacerda 0f36cfd7f5 Adds Pending and Finished tabs to pipelines page
Fix broken test
2017-02-16 22:25:01 +00:00
Grzegorz Bizon b5dfd03efc Include resources to speed up pipelines serializer 2017-01-05 14:23:49 +01:00
Grzegorz Bizon 3deaf1342e Merge branch 'master' into auto-pipelines-vue
* master: (367 commits)
  Set “Remove branch” button to default size
  remove unused helper method
  reduce common code even further to satisfy rake flay
  remove button class size alteration from revert and cherry pick links
  factor out common code to satisfy rake flay
  homogenize revert and cherry-pick button styles generated by commits_helper
  apply margin on alert banners only when there is one or more alerts
  Rename MattermostNotificationService back to MattermostService
  Rename SlackNotificationService back to SlackService
  Fix stage and pipeline specs and rubocop offenses
  Added QueryRecorder to test N+1 fix on Milestone#show
  Use gitlab-workhorse 1.2.1
  Make 'unmarked as WIP' message more consistent
  Improve specs for Files API
  Allow unauthenticated access to Repositories Files API GET endpoints
  Add isolated view spec for pipeline stage partial
  Move test for HTML stage endpoint to controller specs
  Fix sizing of avatar circles; add border
  Fix broken test
  Fix broken test Changes after review
  ...

Conflicts:
	app/assets/stylesheets/pages/pipelines.scss
	app/controllers/projects/pipelines_controller.rb
	app/views/projects/pipelines/index.html.haml
	spec/features/projects/pipelines/pipelines_spec.rb
2016-12-21 12:09:06 +01:00
Kamil Trzcinski 2b0b53cddd
Add tests for stage API endpoint 2016-12-20 11:00:56 +01:00
Kamil Trzcinski 083e185cda
Render stage dropdown in separate API call as HTML
```
Endpoint: /group/project/pipelines/id/stage.json?stage=name

Call: stage_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline, stage: stage.name)
```
2016-12-19 13:20:17 +01:00
Kamil Trzcinski a85235b824
Remove unused updated_at 2016-12-15 22:06:59 +01:00
Grzegorz Bizon 70c0a76cad Fix rubocop offenses in code related to pipelines 2016-12-15 13:41:46 +01:00
Grzegorz Bizon f55fcef3db Add prototype of pipelines serializer with pagination 2016-12-07 15:23:07 +01:00
Regis 9d1fd16ab1 fix conflict 2016-12-02 11:46:47 -07:00
Grzegorz Bizon 2791226c6b Remove support from incremental pipeline updates 2016-12-01 17:31:49 +01:00
Filipa Lacerda 640062abdb Adds tests for tabs in the rspec for pipelines
Adds tests for the Linked Tabs class

Removes event listener

Adds builds
2016-11-30 17:06:46 +00:00
Filipa Lacerda 43e5009a30 Pipelines tabs 2016-11-30 17:06:46 +00:00
Kamil Trzcinski c07180f379 Fix broken pipeline rendering [ci skip] 2016-11-15 15:20:37 +01:00
Regis 634e92720f Merge branch 'master' into auto-pipelines-vue 2016-11-10 19:36:24 -07:00
Regis ac6b988e86 fix conflict 2016-11-10 13:48:23 -07:00
Regis b49a3f1ef1 fix conflict 2016-11-10 13:48:15 -07:00
Grzegorz Bizon 6b52adc661 Refine incremental pipeline serializer 2016-11-10 21:33:03 +01:00
Grzegorz Bizon b0c6037a3a Refine incremental pipeline serializer 2016-11-10 21:18:39 +01:00
Kamil Trzcinski 6f6119b738 Support pipelines API
Pass `updated_at` to get only incremental changes since last update
2016-11-10 15:32:23 +01:00
Grzegorz Bizon c8e8a1bb77 Improve code readability in pipelines controller 2016-11-07 13:33:04 +01:00
Z.J. van de Weg 3152477114 Use PipelinesFinder in Pipelines API 2016-09-07 15:38:03 +02:00
Kamil Trzcinski 39203f1adf Pre-create all builds for Pipeline when a trigger is received
This change simplifies a Pipeline processing by introducing a special new status: created.
This status is used for all builds that are created for a pipeline.
We are then processing next stages and queueing some of the builds (created -> pending) or skipping them (created -> skipped).
This makes it possible to simplify and solve a few ordering problems with how previously builds were scheduled.
This also allows us to visualise a full pipeline (with created builds).

This also removes an after_touch used for updating a pipeline state parameters.
Right now in various places we explicitly call a reload_status! on pipeline to force it to be updated and saved.
2016-08-11 15:22:35 +02:00
Grzegorz Bizon 92984783db Rename commit_data in Pipeline to commit 2016-06-21 14:43:37 +02:00
Kamil Trzcinski 3656a6edf3 Make retry action on pipeline to save a user 2016-06-14 13:04:10 +02:00
Kamil Trzcinski 021d3810c3 Rename Ci::Commit to Ci::Pipeline and rename some of the ci_commit to pipeline 2016-06-02 16:59:04 +02:00
Kamil Trzcinski 4f1c636831 Create pipeline objects with parameters 2016-05-18 17:01:42 -05:00
Kamil Trzcinski ef60b8e168 Use pipelines.errors when communicating the error 2016-05-18 13:02:10 -05:00
Kamil Trzcinski bf4dc75801 Improve the pipelines design 2016-05-16 16:48:27 -05:00
Kamil Trzcinski 2566c89a32 Remove testing delegate 2016-05-14 15:55:00 -05:00
Kamil Trzcinski a6b8d36ae9 Fix specs 2016-05-14 09:46:38 -05:00
Kamil Trzcinski 0d43b92706 Fix CI tests 2016-05-12 13:08:18 -05:00
Kamil Trzcinski fe2137d871 Improve pipelines design 2016-05-10 02:26:13 +03:00
Kamil Trzcinski cb6f035141 Improve pipeline view 2016-04-13 17:05:17 +02:00
Kamil Trzcinski f5d24e60f8 Pipeline view 2016-04-13 13:01:08 +02:00
Kamil Trzcinski 406a796f76 Make Pipeline view work 2016-04-13 11:03:39 +02:00
Kamil Trzcinski e84c155f09 WIP 2016-04-13 11:03:39 +02:00
Kamil Trzcinski 5d69f5b46d Use Ci::Commit as Pipeline 2016-04-11 23:32:54 +02:00