Skip to content

Optimize factory usage in ci/builds_spec.rb

What does this MR do and why?

Describe in detail what your merge request does and why.

This MR optimizes spec/models/ci/build_spec.rb by removing most cascading creations of projects and CI pipelines.

Before

Screenshot_2023-01-30_at_11.58.03_AM

Finished in 2 minutes 53.2 seconds (files took 22.89 seconds to load)
633 examples, 0 failures

[TEST PROF INFO] Time spent in factories: 01:49.955 (62.28% of total time)
[TEST PROF INFO] Factories usage

 Total: 1667
 Total top-level: 617
 Total time: 01:49.955 (out of 03:08.648)
 Total uniq factories: 35

   total   top-level     total time      time per call      top-level time               name

     371         370       72.5365s            0.1955s            72.5160s           ci_build
     262          21       63.5028s            0.2424s            10.3367s        ci_pipeline
     254           2       71.9575s            0.2833s             4.3130s            project
     254           0       18.4050s            0.0725s             0.0000s          namespace
     249           0        1.0707s            0.0043s             0.0000s           ci_stage
     125          84        1.6946s            0.0136s             1.0391s    ci_job_artifact
      31          28        8.6564s            0.2792s             2.4218s        environment
      24          23        0.6055s            0.0252s             0.5940s          ci_runner
      15          15        0.1143s            0.0076s             0.1143s    ci_job_variable
      12           9       17.6342s            1.4695s             8.5912s      merge_request
       9           9        0.0564s            0.0063s             0.0564s        ci_variable
       9           9        0.0420s            0.0047s             0.0420s      ci_build_need
       8           8        7.6398s            0.9550s             7.6398s         deployment
       6           4        0.5695s            0.0949s             0.4974s               user
       6           6        0.0443s            0.0074s             0.0443s  ci_group_variable
       3           3        0.7974s            0.2658s             0.7974s merge_request_diff
       3           3        0.0153s            0.0051s             0.0153s merge_request_diff_commit
       3           3        0.0197s            0.0066s             0.0197s ci_pipeline_variable
       3           3        0.0144s            0.0048s             0.0144s   ci_pending_build
       2           2        0.0280s            0.0140s             0.0280s        integration
       2           2        0.0473s            0.0237s             0.0473s ci_instance_variable
       2           2        0.0142s            0.0071s             0.0142s       deploy_token
       2           2        0.1034s            0.0517s             0.1034s       project_hook
       1           1        0.0076s            0.0076s             0.0076s ci_trigger_request
       1           1        0.0254s            0.0254s             0.0254s               todo
       1           1        0.0329s            0.0329s             0.0329s ci_pipeline_schedule
       1           1        0.0126s            0.0126s             0.0126s ci_pipeline_schedule_variable
       1           1        0.2954s            0.2954s             0.2954s harbor_integration
       1           1        0.1574s            0.1574s             0.1574s apple_app_store_integration
       1           0        0.0032s            0.0032s             0.0000s namespace_ci_cd_settings
       1           1        0.0923s            0.0923s             0.0923s              group
       1           0        0.0030s            0.0030s             0.0000s namespace_settings
       1           1        0.0067s            0.0067s             0.0067s            license
       1           1        0.0795s            0.0795s             0.0795s         ci_trigger
       1           0        0.0582s            0.0582s             0.0000s              owner

After

Screenshot_2023-01-30_at_12.05.37_PM

Finished in 1 minute 58.78 seconds (files took 24.21 seconds to load)
633 examples, 0 failures

[TEST PROF INFO] Time spent in factories: 00:50.931 (41.53% of total time)
[TEST PROF INFO] Factories usage

 Total: 709
 Total top-level: 609
 Total time: 00:50.931 (out of 02:14.758)
 Total uniq factories: 35

   total   top-level     total time      time per call      top-level time               name

     371         370       19.0565s            0.0514s            19.0367s           ci_build
     125          84        2.3509s            0.0188s             1.6642s    ci_job_artifact
      31          28        8.5970s            0.2773s             1.9394s        environment
      26          22        4.5177s            0.1738s             4.0742s        ci_pipeline
      22           0        0.0968s            0.0044s             0.0000s           ci_stage
      15          14        0.5020s            0.0335s             0.4930s          ci_runner
      15          15        0.0730s            0.0049s             0.0730s    ci_job_variable
      12           9       10.8759s            0.9063s             8.9287s      merge_request
      11           0        0.8603s            0.0782s             0.0000s          namespace
      11           2       15.3546s            1.3959s             4.0586s            project
       9           9        0.0562s            0.0062s             0.0562s        ci_variable
       9           9        0.0278s            0.0031s             0.0278s      ci_build_need
       8           8        8.2309s            1.0289s             8.2309s         deployment
       6           4        0.6138s            0.1023s             0.5084s               user
       6           6        0.0460s            0.0077s             0.0460s  ci_group_variable
       3           3        0.8383s            0.2794s             0.8383s merge_request_diff
       3           3        0.0138s            0.0046s             0.0138s merge_request_diff_commit
       3           3        0.0203s            0.0068s             0.0203s ci_pipeline_variable
       3           3        0.0537s            0.0179s             0.0537s   ci_pending_build
       2           2        0.0122s            0.0061s             0.0122s        integration
       2           2        0.0352s            0.0176s             0.0352s ci_instance_variable
       2           2        0.0137s            0.0069s             0.0137s       deploy_token
       2           2        0.1069s            0.0534s             0.1069s       project_hook
       1           1        0.0083s            0.0083s             0.0083s ci_trigger_request
       1           1        0.0229s            0.0229s             0.0229s               todo
       1           1        0.0331s            0.0331s             0.0331s ci_pipeline_schedule
       1           1        0.0122s            0.0122s             0.0122s ci_pipeline_schedule_variable
       1           1        0.2871s            0.2871s             0.2871s harbor_integration
       1           1        0.1522s            0.1522s             0.1522s apple_app_store_integration
       1           0        0.0033s            0.0033s             0.0000s namespace_ci_cd_settings
       1           1        0.0885s            0.0885s             0.0885s              group
       1           0        0.0031s            0.0031s             0.0000s namespace_settings
       1           1        0.0068s            0.0068s             0.0068s            license
       1           1        0.0890s            0.0890s             0.0890s         ci_trigger
       1           0        0.0605s            0.0605s             0.0000s              owner

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Brian Williams

Merge request reports