Compare commits

..

1316 commits

Author SHA1 Message Date
dfe52c6fd0 feat: update to 16.0.8 2023-09-09 12:37:22 +00:00
0a33d97af5 Update upstream source from tag 'upstream/16.0.8+ds1'
Update to upstream version '16.0.8+ds1'
with Debian dir b0ac18f713
2023-09-09 12:35:44 +00:00
e55bb021ed New upstream version 16.0.8+ds1 2023-09-09 12:31:29 +00:00
b58ad5e8c7 feat: update to 16.0.8 2023-09-09 11:40:26 +00:00
3816fce38f Update upstream source from tag 'upstream/16.0.8+ds1'
Update to upstream version '16.0.8+ds1'
with Debian dir 0258e42959
2023-09-09 11:38:58 +00:00
821ed24af7 New upstream version 16.0.8+ds1 2023-09-09 11:38:58 +00:00
Pirate Praveen
1a3bb21202
Stop installing google-api-client in postinst 2023-07-11 23:39:55 +05:30
Pirate Praveen
ca3d438432
Upload to unstable 2023-07-11 20:11:19 +05:30
Pirate Praveen
eb4ef6c667
Revert "Remove ruby-whitequark-parser dependency (no longer used in migrations)"
This reverts commit 1e610613ba.
2023-07-11 20:10:16 +05:30
Pirate Praveen
fa1feddf44
Use ruby-app-store-connect (now packaged) 2023-07-11 20:05:28 +05:30
Pirate Praveen
d0c72806ac
Upload to unstable 2023-07-11 19:23:18 +05:30
Pirate Praveen
1e610613ba
Remove ruby-whitequark-parser dependency (no longer used in migrations) 2023-07-11 19:22:32 +05:30
Pirate Praveen
e41ea75a58
Fix last version in mainstcript 2023-07-11 01:24:18 +05:30
Pirate Praveen
6d1eb34177
Upload to unstable 2023-07-10 21:04:21 +05:30
Pirate Praveen
0618b4b530
Relax gitaly version in Gemfile to allow release candidates 2023-07-10 21:04:20 +05:30
Pirate Praveen
46828887c0
Install gitaly 15.9 in postinst (archive has 16.0 already) 2023-07-10 21:04:20 +05:30
Pirate Praveen
a0947625f3
Update minimum version of ruby-rack to 2.2.7 2023-07-10 20:09:59 +05:30
Pirate Praveen
033a348ddd
Reupload to unstable 2023-07-10 18:58:46 +05:30
Pirate Praveen
97e30b9257
Remove _build directory in clean (for dpkg-buildpackage) 2023-07-10 18:57:45 +05:30
Pirate Praveen
81eef67aeb
Update minimum version of gitlab-common 2023-07-09 18:48:46 +05:30
Pirate Praveen
09a3d48e67
Refactor vendor directory merging with gitaly 2023-07-09 18:47:43 +05:30
Pirate Praveen
6780c9291c
Upload to experimental 2023-07-09 16:17:49 +05:30
Pirate Praveen
c1c742e3b1
Remove obsolete initializer 2023-07-09 12:38:21 +05:30
Pirate Praveen
6bf248749a
Update dependencies in control and postinst 2023-07-09 12:38:21 +05:30
Pirate Praveen
b7748ec830
Update golang-jwt path since we already vendor v4 2023-07-09 10:23:53 +05:30
Pirate Praveen
452f3530e2
Update changelog 2023-07-09 10:05:56 +05:30
Pirate Praveen
3921773f8e
Update gitaly dependencies and vendor symlinks 2023-07-09 10:04:07 +05:30
Pirate Praveen
b0e9689d1b
Refresh patches 2023-07-09 09:48:07 +05:30
Pirate Praveen
0657555170
Remove ruby-benchmark-memory (not in production group of Gemfile) 2023-07-09 09:38:03 +05:30
Pirate Praveen
a01de85be9
debian/control: Drop vendored or removed dependencies 2023-07-09 09:05:21 +05:30
Pirate Praveen
ef771409aa Update upstream source from tag 'upstream/16.0.7+ds1'
Update to upstream version '16.0.7+ds1'
with Debian dir 87b111a225
2023-07-09 08:57:25 +05:30
Pirate Praveen
271ccb9124 New upstream version 16.0.7+ds1 2023-07-09 08:55:56 +05:30
Pirate Praveen
ebf5a229dd
Drop ruby-derailed-benchmarks from dependency (moved to test group) 2023-07-08 16:49:28 +05:30
Pirate Praveen
6b9f29be07
Upload to unstable 2023-07-07 11:08:58 +05:30
Pirate Praveen
9b799e0416 Update upstream source from tag 'upstream/15.11.11+ds1'
Update to upstream version '15.11.11+ds1'
with Debian dir aa157ebbd9
2023-07-07 10:45:01 +05:30
Pirate Praveen
6b3dcb98e5 New upstream version 15.11.11+ds1 2023-07-07 10:43:13 +05:30
Pirate Praveen
4acb22dcf4
Update minimum version of ruby-ruby-parser to 3.20 2023-07-07 10:12:43 +05:30
Pirate Praveen
cd7efbb4bb
Upload to experimental 2023-07-01 20:08:55 +05:30
Pirate Praveen
7d40eb947b
Remove obsolete feature flag 2023-07-01 20:06:44 +05:30
Pirate Praveen
88e89c8dd5
Remove development only gitlab-dangerfiles from Rakefile 2023-07-01 20:04:16 +05:30
Pirate Praveen
42dca7827b
Update minimum versions of dependencies 2023-06-30 02:21:05 +05:30
Pirate Praveen
2b1ff2592a
Refresh patches (redo semver complaint relaxing of stable gems) 2023-06-30 02:20:25 +05:30
Pirate Praveen
23cff2923a
Use more vendored modules from gitaly 2023-06-28 15:38:19 +05:30
Vinay Keshava
1c4a64e886
release v15.11.6+ds1-1 to experimental 2023-06-20 11:36:17 +05:30
Vinay Keshava
943bc47f23
update minimum version of dependencies 2023-06-20 11:35:17 +05:30
Vinay Keshava
373223c649
Refresh Patches 2023-06-20 11:34:45 +05:30
Vinay Keshava
7ff458b718
add .rubocop_revert_ignores.txt to file list 2023-06-20 11:34:26 +05:30
Vinay Keshava
dbd3d92e43 Update upstream source from tag 'upstream/15.11.6+ds1'
Update to upstream version '15.11.6+ds1'
with Debian dir a60c96c41e
2023-06-20 00:51:55 +05:30
Vinay Keshava
169ef31156 New upstream version 15.11.6+ds1 2023-06-20 00:43:36 +05:30
Pirate Praveen
a902e85c8c
Reupload to unstable 2023-06-11 22:24:36 +05:30
Mohammed Bilal
e49157717c
New upstream version 15.10.8+ds1 2023-06-09 12:34:30 +05:30
Mohammed Bilal
6a9971feea
Upload to experimental 2023-06-09 11:20:54 +05:30
Mohammed Bilal
476587688b
Update minimum version of gitaly to 15.10.8 2023-06-09 10:31:46 +05:30
Mohammed Bilal
f87c4d536a Update upstream source from tag 'upstream/15.10.8+ds1'
Update to upstream version '15.10.8+ds1'
with Debian dir d1899e4103
2023-06-09 08:13:14 +05:30
Mohammed Bilal
68c65fd975 New upstream version 15.10.8+ds1 2023-06-09 08:11:10 +05:30
Pirate Praveen
02a284f75c
Relax the immutable option to yarnpkg install 2023-05-30 23:15:32 +05:30
Pirate Praveen
8654aca67e
Switch order of links for package.json 2023-05-30 23:14:59 +05:30
Pirate Praveen
11588340cb
Fix yarn.lock link login (reverse the order in links) 2023-05-30 23:14:49 +05:30
Pirate Praveen
c799085432
Upload to experimental 2023-05-29 11:23:51 +05:30
Pirate Praveen
dcb63cc8d2
Update minimum version of gitaly 2023-05-29 01:25:39 +05:30
Pirate Praveen
7d0597e91e
Set NODE_ENV=production and add immutable for yarnpkg install 2023-05-28 22:38:27 +05:30
Pirate Praveen
1e0ea7acf0
Install yarn.lock 2023-05-28 22:37:26 +05:30
Pirate Praveen
a7870d2fca
Drop all changes to package.json 2023-05-28 22:36:51 +05:30
Pirate Praveen
fde6479d6e
Replace more relative require to lib from config 2023-05-28 19:55:29 +05:30
Pirate Praveen
f6c5ca7d1e
Install more gems from rubygems.org 2023-05-28 19:53:58 +05:30
Pirate Praveen
104b71e19a
Update minimum versions of dependencies 2023-05-28 01:48:29 +05:30
Pirate Praveen
2210f617c6
Update upstream-file-list 2023-05-28 00:40:12 +05:30
Pirate Praveen
03f640df8e
Refresh patches 2023-05-28 00:09:46 +05:30
Pirate Praveen
ce450673bd
Update version in changelog 2023-05-28 00:09:36 +05:30
Pirate Praveen
9e65721c14 Update upstream source from tag 'upstream/15.10.7+ds1'
Update to upstream version '15.10.7+ds1'
with Debian dir 2b63becd34
2023-05-27 22:28:11 +05:30
Pirate Praveen
7885e913d2 New upstream version 15.10.7+ds1 2023-05-27 22:25:52 +05:30
Pirate Praveen
71bc568de3
Upload to experimental 2023-05-24 19:05:52 +05:30
Pirate Praveen
8ed4c9e591
Update minimum version of ruby-zeitwerk to 2.6.1~ 2023-05-24 19:03:53 +05:30
Pirate Praveen
c5ad9b7818
Upload to experimental 2023-05-23 19:47:09 +05:30
Pirate Praveen
eae9439ec7
Remove more obsolete initializers 2023-05-23 19:45:57 +05:30
Pirate Praveen
b80a813e47
Update minimum version of ruby-json to 2.6.3 2023-05-16 01:53:47 +05:30
Pirate Praveen
30051702d9
Update minimum version of ruby-gitlab-markup to 1.9~ 2023-05-16 01:09:03 +05:30
Pirate Praveen
a0854947d6
Add ruby-google-apis-container-v1 as dependency 2023-05-15 22:37:40 +05:30
Pirate Praveen
7f353826fd
Add ruby-digest-crc to dependency 2023-05-15 22:27:56 +05:30
Pirate Praveen
7fb6c85ea6
Update version in changelog 2023-05-12 17:16:46 +05:30
Pirate Praveen
7427361bf9 Update upstream source from tag 'upstream/15.9.8+ds1'
Update to upstream version '15.9.8+ds1'
with Debian dir 072c60aca9
2023-05-12 17:10:28 +05:30
Pirate Praveen
56d29916af New upstream version 15.9.8+ds1 2023-05-12 17:06:39 +05:30
Pirate Praveen
ae701463d0
Upload to experimental 2023-05-12 16:00:08 +05:30
Pirate Praveen
b826767173
Bump minimum version of ruby-sentry-* to 5.9~ 2023-05-12 16:00:08 +05:30
Pirate Praveen
1344d14743
Remove obsolete feature flags and initializers 2023-05-12 16:00:07 +05:30
Pirate Praveen
11aee6014e
Replace more relative require by absolute path 2023-05-12 13:41:30 +05:30
Pirate Praveen
43bec5faae
Relax dependency on ruby-gitlab-labkit 2023-05-11 20:02:58 +05:30
Pirate Praveen
b7e1d0e50e
Relax dependency on terser gem in patch 2023-05-11 19:39:38 +05:30
Pirate Praveen
672c571e6e
Relax dependency on autoprefixer-rails in patch 2023-05-10 20:03:06 +05:30
Pirate Praveen
4184472e05
Relax dependency on deckar01-task_list in patch 2023-05-10 19:49:38 +05:30
Pirate Praveen
f527a44525
Update minimum version of ruby-aws-sdk-s3 to 1.119.1~ 2023-05-10 19:49:37 +05:30
Pirate Praveen
1641eb0644
Relax dependency on elasticsearch-api in Gemfile 2023-05-10 14:31:58 +05:30
Pirate Praveen
a09f1a0b6a
Add ruby-google-apis-* dependencies 2023-05-10 14:31:58 +05:30
Pirate Praveen
28dd175b34
Install older google-apis-core from rubygems.org 2023-05-10 02:00:26 +05:30
Pirate Praveen
64878fdf75
Install google-cloud-storage from rubygems.org 2023-05-10 01:28:06 +05:30
Pirate Praveen
5dcd31ff47
Update minimum version of ruby-gitlab-fog-azure-rm to 1.7~ 2023-05-10 01:28:05 +05:30
Pirate Praveen
502d191909
Add ruby-openid-connect as dependency 2023-05-10 01:28:05 +05:30
Pirate Praveen
4dd821f42a
Install older omniauth_openid_connect from rubygems.org 2023-05-08 23:20:35 +05:30
Pirate Praveen
367b97fd1d
Relax ruby-omniauth-github dependency in patch 2023-05-08 22:52:08 +05:30
Pirate Praveen
c619a98905
Update minimum version of ruby-rails 2023-05-08 22:52:07 +05:30
Pirate Praveen
96fc5d0dcb
Refresh patches 2023-05-08 21:58:47 +05:30
Pirate Praveen
ec5314ff10 Update upstream source from tag 'upstream/15.9.7+ds1'
Update to upstream version '15.9.7+ds1'
with Debian dir 98150fa7d5
2023-05-08 21:49:52 +05:30
Pirate Praveen
fc1cb7f6a6 New upstream version 15.9.7+ds1 2023-05-08 21:46:49 +05:30
Vinay Keshava
f6f51b81ed
release gitlab v15.9.2+ds1 to experimental 2023-05-08 11:29:42 +05:30
Vinay Keshava
763cef3d09
update min versions of dependencies 2023-05-08 11:28:57 +05:30
Vinay Keshava
76217a5aad
.csscomb.json removed upstream 2023-05-08 11:27:24 +05:30
Vinay Keshava
9697cdffc6
Refresh patches 2023-05-08 11:25:58 +05:30
Vinay Keshava
33a6625bdf Update upstream source from tag 'upstream/15.9.2+ds1'
Update to upstream version '15.9.2+ds1'
with Debian dir 0cf2218c3a
2023-04-23 21:25:59 +05:30
Vinay Keshava
081c1a8e73 New upstream version 15.9.2+ds1 2023-04-23 21:23:45 +05:30
Vinay Keshava
01b99a9694
release v15.8.5+ds1 to experimental 2023-04-03 18:46:06 +05:30
Vinay Keshava
32fa698f2d Update upstream source from tag 'upstream/15.8.5+ds1'
Update to upstream version '15.8.5+ds1'
with Debian dir c586c8064b
2023-04-03 14:15:57 +05:30
Vinay Keshava
25a2104fa7 New upstream version 15.8.5+ds1 2023-04-03 14:13:38 +05:30
Vinay Keshava
ec64e23107
use minimum version of ruby-rack(2.2.6~) 2023-04-03 14:13:11 +05:30
Vinay Keshava
ebb1fe9bfc
use ruby-rack package instead of gem install 2023-04-03 14:12:33 +05:30
Vinay Keshava
9020bb1f23
Install rack gem from rubygems.org in postinst 2023-03-24 19:55:46 +05:30
Pirate Praveen
3da29d95d9
Upload to experimental 2023-03-22 21:14:55 +05:30
Pirate Praveen
a7773b9ac0
Drop ruby-omniauth-shibboleth dependency (dropped in 15.9) 2023-03-22 19:26:58 +05:30
Pirate Praveen
4ff5d4bc85
Upload to experimental 2023-03-22 08:53:01 +05:30
Pirate Praveen
5b52dd6f69
Relax dependency on omniauth-auth0 to allow version 3.1 2023-03-22 08:51:00 +05:30
Pirate Praveen
0cbeecd23e
Don't depend on node-mermaid (version in archive is older and not in bookworm) 2023-03-22 08:47:03 +05:30
Pirate Praveen
aa3a133a79
Upload to experimental 2023-03-19 01:40:40 +05:30
Pirate Praveen
502fbf1ee9
Update minimum version of gitaly 2023-03-19 01:21:25 +05:30
Pirate Praveen
72d421c803
Update changelog 2023-03-18 01:19:50 +05:30
Pirate Praveen
b7f3194870
Remove obsolete feature flags 2023-03-18 01:19:50 +05:30
Pirate Praveen
f2d0844df0
Install app_store_connect gem from rubygems.org in postinst 2023-03-18 01:19:50 +05:30
Pirate Praveen
1bad4b743f
Update minimum versions of dependencies 2023-03-18 01:19:50 +05:30
Pirate Praveen
69ac24a3e7
Refresh patches (remove patches no longer relevant) 2023-03-18 01:19:49 +05:30
Pirate Praveen
91b937df7c Update upstream source from tag 'upstream/15.8.4+ds1'
Update to upstream version '15.8.4+ds1'
with Debian dir 9c0767abea
2023-03-17 16:22:49 +05:30
Pirate Praveen
b439698ad0 New upstream version 15.8.4+ds1 2023-03-17 16:20:25 +05:30
Pirate Praveen
ab94f9b678
Update minimum version of ruby-grpc to 1.42~ 2023-03-15 17:59:07 +05:30
Pirate Praveen
c450c5971a
Don't try to remove /etc/gitlab/metrics/aggregates
Upgrade fails with
rm: cannot remove '/etc/gitlab/metrics/aggregates.dpkg-remove': Is a directory
2023-03-14 03:30:10 +05:30
Pirate Praveen
da40a43ad0
Upload to experimental 2023-03-13 23:24:37 +05:30
Pirate Praveen
e8cf06222c
Add comment about google-api-client 2023-03-13 23:24:37 +05:30
Pirate Praveen
3458f0483f
Lock mermaid node module to 9.1.6 version for bullseye nodejs 2023-03-13 23:23:20 +05:30
Pirate Praveen
3f7d936709
Drop obsolete config/feature_flags/development/gitaly_catfile-cache.yml 2023-03-13 23:23:19 +05:30
Pirate Praveen
3fe89fef8b
Upload to experimental 2023-03-13 00:33:04 +05:30
Pirate Praveen
bf09d4c020
Use @rails/actioncable from npmjs.com (not from the archive) 2023-03-13 00:31:33 +05:30
Pirate Praveen
54839806c4
Update minimum version of ruby-grape to 1.7~ 2023-03-11 17:59:15 +05:30
Pirate Praveen
9d621bf2e1
Upload to experimental 2023-03-10 00:44:16 +05:30
Pirate Praveen
7d1be4b01e
Switch to ruby-fog-google from the archive 2023-03-10 00:44:16 +05:30
Pirate Praveen
ecd99207e9
Install fog-core 2.1.0 using gem install in postinst (for fog-google) 2023-03-09 11:29:45 +05:30
Pirate Praveen
b0e263f174
Upload to experimental 2023-03-09 10:55:52 +05:30
Pirate Praveen
0e1b1f286b
Update minimum version of ruby-net-ldap to 0.17 2023-03-09 00:50:23 +05:30
Pirate Praveen
c0f328e759
Upload to experimental 2023-03-08 23:07:05 +05:30
Pirate Praveen
2a7dc528d2
Relax dependency on ruby-net-ldap 2023-03-08 23:06:44 +05:30
Pirate Praveen
9d7691c9e2
Upload to experimental 2023-03-08 18:52:05 +05:30
Pirate Praveen
03530721b4
Start a sidekiq cluster instead of standalone 2023-03-08 18:50:47 +05:30
Pirate Praveen
f36950b341
Upload to experimental 2023-03-07 21:36:28 +05:30
Pirate Praveen
9eacaaceb4
Update minimum versions of ruby-gpgme and ruby-doorkeeper-openid-connect 2023-03-07 21:08:49 +05:30
Pirate Praveen
b608575eda
Upload to experimental 2023-03-06 16:27:10 +05:30
Pirate Praveen
48a7cd8248
Remove rubygems.org version of gitlab-labkit 2023-03-06 16:26:09 +05:30
Pirate Praveen
02edd76c73
Upload to experimental 2023-03-06 15:26:12 +05:30
Pirate Praveen
23fffdce9c
Revert "Use openssl 3.0.2 from rubygems.org as workaround for #1032070"
This reverts commit 08fe0d965d.
2023-03-06 15:24:55 +05:30
Pirate Praveen
2a14c7bd83
Upload to experimental 2023-03-05 19:20:22 +05:30
Pirate Praveen
08fe0d965d
Use openssl 3.0.2 from rubygems.org as workaround for #1032070 2023-03-05 19:20:21 +05:30
Pirate Praveen
7663d385f6
Upload to experimental 2023-03-05 16:45:58 +05:30
Pirate Praveen
e1b23495b8
Use ruby-redis-namespace and ruby-invisble-captcha from archives 2023-03-05 16:45:58 +05:30
Pirate Praveen
18e29cc8d2
Update minimum versions of dependencies 2023-03-05 16:45:57 +05:30
Pirate Praveen
e3a8ab2069
Handle new files added by upstream 2023-03-05 14:24:42 +05:30
Pirate Praveen
2609e0e449
Refresh patches 2023-03-05 14:24:42 +05:30
Pirate Praveen
ec5a9ffc08
Update changelog 2023-03-05 14:24:41 +05:30
Pirate Praveen
296055b4ef
New upstream version 15.7.8+ds1 2023-03-05 14:24:40 +05:30
Pirate Praveen
a444fb1b52 New upstream version 15.7.8+ds1 2023-03-04 22:38:38 +05:30
Pirate Praveen
c5c9fd0a0c
Update minimum version of ruby-gitlab-sidekiq-fetcher to (>= 0.9~) 2023-03-04 20:03:51 +05:30
Pirate Praveen
d2f43cd1d4
Upload to experimental 2023-02-28 17:25:07 +05:30
Pirate Praveen
1c52967185
Use ruby-omniauth-google-oauth2 and ruby-oauth2 from archive 2023-02-28 17:22:51 +05:30
Pirate Praveen
ed397fc514
Use gitlab-fog-azure-rm and gitlab-sidekiq-fetcher from archive 2023-02-28 01:59:42 +05:30
Pirate Praveen
6c5f915b35
Use ruby-browser and ruby-memory-profiler from archive 2023-02-27 23:37:11 +05:30
Pirate Praveen
c4a7db34d2
Use ruby-sidekiq and ruby-asciidoctor-kroki from archive 2023-02-27 21:02:58 +05:30
Pirate Praveen
9005cd8f6d
Add ruby-hashie >= 5.0 to Depends 2023-02-27 16:04:14 +05:30
Pirate Praveen
1f84c73daf
Upload to experimental 2023-02-27 11:54:42 +05:30
Pirate Praveen
0f1a7fde93
Update minimum versions of ruby-rails, ruby-telesign
and ruby-net-http-persistent
2023-02-27 11:54:42 +05:30
Pirate Praveen
2fdaaec856
Stop installing spec directory in binary package (some fixtures breaks build) 2023-02-26 21:10:41 +05:30
Pirate Praveen
e2d10f3f39 Update upstream source from tag 'upstream/15.6.8+ds1'
Update to upstream version '15.6.8+ds1'
with Debian dir 5322174a56
2023-02-26 17:19:50 +05:30
Pirate Praveen
13ea837db1 New upstream version 15.6.8+ds1 2023-02-26 17:17:37 +05:30
Mohammed Bilal
c519eac57f
use matching versions of tiptap core and its extensions 2023-02-09 22:30:41 +05:30
Mohammed Bilal
bc3835294d
relax net-ldap version 2023-02-08 21:46:23 +05:30
Mohammed Bilal
df89b40b06
Add patch to relax oj in ipynbdiff 2023-02-08 15:15:38 +00:00
Mohammed Bilal
dd09b37815
Update min versions
- ruby-oj + oj-introspect [ header file fix]
- ruby-cfpropertylist [ Diff 500 fix ]
2023-02-08 15:15:26 +00:00
Mohammed Bilal
f641ff7cf2
Add patch to check for gitlab-shell-check binary 2023-02-07 21:41:43 +05:30
Mohammed Bilal
a8cfd6de3a
Upload to experimental 2023-01-30 22:10:41 +05:30
Mohammed Bilal
8838c54510
drop relax-gitlab-labkit.patch 2023-01-30 20:54:57 +05:30
Mohammed Bilal
08619a9814
Bump min version of golang-go to 1.18
vendored azure-sdk requires golang 1.18 or later
2023-01-30 20:50:20 +05:30
Mohammed Bilal
4494a1038b
uninstall rack 3.x during postinst 2023-01-30 20:50:20 +05:30
Mohammed Bilal
28638a38a2
install more gems from rubygems.org
gitlab-labkit 0.29.0
ipaddr 1.2.4
deckar01-task_list 2.3.2
google-api-client 0.53.0
2023-01-30 20:50:07 +05:30
Mohammed Bilal
f2daaa1489
Update min versions 2023-01-26 23:11:12 +05:30
Mohammed Bilal
5b97640203
Upload to experimental 2023-01-22 04:32:16 +05:30
Mohammed Bilal
ab8ee2a101
Add new B-Depends
New B-D: (for github.com/AzureAD/microsoft-authentication-library-for-go) [vendored from gitaly]
   - golang-github-kylelemons-godebug-dev,
   - golang-github-cli-browser-dev (fork of github.com/pkg/browser)
2023-01-22 04:32:10 +05:30
Mohammed Bilal
0d63d601ef
New upstream version 15.6.6+ds1 2023-01-22 04:32:09 +05:30
Mohammed Bilal
aef0f23401 New upstream version 15.6.6+ds1 2023-01-22 03:43:09 +05:30
Mohammed Bilal
4b04e7e52c
Update gitaly min version 2023-01-13 23:36:49 +05:30
Mohammed Bilal
33e8868f47
update changelog 2023-01-13 21:47:25 +05:30
Mohammed Bilal
366b53f1d7
symlink more modules from gitaly
some modules which were vendored previously are now vendored along with new gitaly 15.6.4
2023-01-13 21:23:19 +05:30
Mohammed Bilal
168065dc08
Revert "Add patch to use golang-github-cli-browser"
This reverts commit 4cce113ad1.
2023-01-13 21:02:33 +05:30
Mohammed Bilal
615ac8dd1f Update upstream source from tag 'upstream/15.6.4+ds2'
Update to upstream version '15.6.4+ds2'
with Debian dir ca2d232154
2023-01-13 21:01:02 +05:30
Mohammed Bilal
d097d7e96e New upstream version 15.6.4+ds2 2023-01-13 20:58:30 +05:30
Mohammed Bilal
587963225c
Upload to experimental 2023-01-13 16:44:47 +05:30
Mohammed Bilal
4cce113ad1
Add patch to use golang-github-cli-browser 2023-01-13 15:11:14 +05:30
Mohammed Bilal
b6f6675395
symlink cloud.google.com/go from gitaly 2023-01-13 15:11:14 +05:30
Mohammed Bilal
14720a2d90
Remove obsolete config files and update upstream config file list 2023-01-13 15:11:13 +05:30
Mohammed Bilal
7d06182b1d
Add .secretsignore to upstream-file-list 2023-01-13 15:11:13 +05:30
Mohammed Bilal
93c1e6d67d
Refresh patches 2023-01-13 15:11:12 +05:30
Mohammed Bilal
a3377f4ab8
Install unsat gems from rubygems.org 2023-01-13 15:11:11 +05:30
Mohammed Bilal
60a6c94da3
Update min versions and add new deps
New B-D: (for github.com/AzureAD/microsoft-authentication-library-for-go) [vendored]
   - golang-github-kylelemons-godebug-dev,
   - golang-github-cli-browser-dev (fork of github.com/pkg/browser)
2023-01-13 15:02:24 +05:30
Mohammed Bilal
8ec612e4e8
New upstream version 15.6.4+ds1 2023-01-13 15:02:22 +05:30
Mohammed Bilal
6611f650cc New upstream version 15.6.4+ds1 2023-01-12 18:35:48 +00:00
Mohammed Bilal
7a465ecc9b
Upload to experimental 2023-01-10 17:51:14 +05:30
Mohammed Bilal
28ec29caf7
Refresh patch 2023-01-10 11:36:21 +05:30
Mohammed Bilal
f142dbd410 Update upstream source from tag 'upstream/15.5.7+ds1'
Update to upstream version '15.5.7+ds1'
with Debian dir ab44def76f
2023-01-10 11:25:35 +05:30
Mohammed Bilal
0e36c5a8a4 New upstream version 15.5.7+ds1 2023-01-10 11:22:00 +05:30
Mohammed Bilal
903d6fbaf6
Remove abandoned omniauth gems from B-D
The following packages are abandoned upstream and hence removed from the archive.
gitlab currently vendors the following gems

ruby-omniauth-azure-oauth2 - https://bugs.debian.org/1026203
ruby-omniauth-cas3 - https://bugs.debian.org/1026202
ruby-omniauth-crowd - https://bugs.debian.org/1026267
ruby-omniauth-salesforce - https://bugs.debian.org/1026266
2022-12-17 21:45:37 +05:30
Nilesh Patra
b9b24d50c2 Upload to unstable 2022-12-15 21:39:20 +00:00
Nilesh Patra
7ad048086f Remove dead symlink, choking build 2022-12-15 21:38:56 +00:00
Nilesh Patra
5206ed0e13 Set "Rules-Requires-Root: no" to circumvent debhelper bug, see https://lists.debian.org/debian-devel/2022/12/msg00108.html 2022-12-15 21:38:25 +00:00
Pirate Praveen
9f612b364d
Upload to experimental 2022-12-12 21:45:39 +05:30
Pirate Praveen
b6bdeac1c6
Relax dependency on gitlab-labkit (to match gitaly) 2022-12-12 21:25:26 +05:30
Pirate Praveen
d442bfe2ca
Upload to experimental 2022-12-12 15:39:27 +05:30
Pirate Praveen
6f2cf6325f
Update minimum version of gitaly and ruby-gitaly to 15.5~ 2022-12-12 15:38:49 +05:30
Pirate Praveen
5591ed7ee9
Upload to experimental 2022-12-08 16:48:54 +05:30
Pirate Praveen
17b3c4deb7
Use node-katex from system 2022-12-06 02:38:35 +05:30
Pirate Praveen
6463b326f5
Add node-yaml to dependencies 2022-12-06 01:16:56 +05:30
Pirate Praveen
70bcfdd6a0
Remove obsolete initializer 2022-12-05 02:43:34 +05:30
Pirate Praveen
21f29d0ca4
Revert ruby-omniauth-google-oauth2 version bump (installed via gem install) 2022-12-05 00:05:02 +05:30
Pirate Praveen
f8b33a9675
Update dependencies in control and in postinst 2022-12-04 23:42:07 +05:30
Pirate Praveen
831176fbfe
Use openssl from the archive (patch Gemfile) 2022-12-04 21:58:53 +05:30
Pirate Praveen
f6733182cb
Update changelog 2022-12-04 18:51:05 +05:30
Pirate Praveen
0bc3225c6b Update upstream source from tag 'upstream/15.5.4+ds3'
Update to upstream version '15.5.4+ds3'
with Debian dir 42f2bd1a69
2022-12-04 17:33:49 +05:30
Pirate Praveen
fb1e825bdf New upstream version 15.5.4+ds3 2022-12-04 17:31:26 +05:30
Pirate Praveen
805fbd7767
google.golang.org/grpc is now in vendor 2022-12-04 17:24:12 +05:30
Pirate Praveen
60d6134bd9 Update upstream source from tag 'upstream/15.5.4+ds2'
Update to upstream version '15.5.4+ds2'
with Debian dir a1d9cffe53
2022-12-03 16:12:37 +05:30
Pirate Praveen
786b3c7d00 New upstream version 15.5.4+ds2 2022-12-03 16:09:56 +05:30
Pirate Praveen
2fdfb5ba05
Vendor modules conflicting with golang-github-golang-protobuf-1-5-dev 2022-12-03 12:28:14 +05:30
Pirate Praveen
b0e603a14e
Refresh patches 2022-11-26 12:49:44 +05:30
Pirate Praveen
344ab67f83
Update changelog 2022-11-26 12:48:18 +05:30
Pirate Praveen
bd8bdde03f Update upstream source from tag 'upstream/15.5.4+ds1'
Update to upstream version '15.5.4+ds1'
with Debian dir 52ff02a459
2022-11-25 23:57:34 +05:30
Pirate Praveen
54117d12b7 New upstream version 15.5.4+ds1 2022-11-25 23:54:43 +05:30
Pirate Praveen
eae846ab74
Tighten node-lodash version for nodejs:any fix 2022-10-27 22:30:22 +05:30
Pirate Praveen
70b3ddc3c6
Restorre using yaml from system for older nodejs compat 2022-10-27 17:06:37 +05:30
Pirate Praveen
5a60ca8fea
Update minimum version of puma and ruby-omniauth 2022-10-24 17:21:18 +05:30
Pirate Praveen
159620bd77
Upload to experimental 2022-10-18 16:02:26 +05:30
Pirate Praveen
0f8803d9f2
Remove obsolete feature flags 2022-10-18 16:01:21 +05:30
Pirate Praveen
171e897f1b
Update dependencies 2022-10-18 16:00:52 +05:30
Pirate Praveen
61f09c5d0b
Gemfile.checksum is shipped by upstream now 2022-10-18 15:59:59 +05:30
Pirate Praveen
153513f531
Refresh patches 2022-10-18 15:59:10 +05:30
Pirate Praveen
f4b2ebe90e Update upstream source from tag 'upstream/15.4.2+ds1'
Update to upstream version '15.4.2+ds1'
with Debian dir 8d68c65232
2022-10-11 01:59:37 +05:30
Pirate Praveen
095190ed6e New upstream version 15.4.2+ds1 2022-10-11 01:57:18 +05:30
Pirate Praveen
71715d0794
Drop elasticsearch-rails from debian/gitlab.install too 2022-10-03 00:03:38 +05:30
Pirate Praveen
8f80abca94
Upload to experimental 2022-10-02 17:34:33 +05:30
Pirate Praveen
95a113df74 Update upstream source from tag 'upstream/15.3.4+ds1'
Update to upstream version '15.3.4+ds1'
with Debian dir f071051edd
2022-10-02 17:20:44 +05:30
Pirate Praveen
a37d4bddc0 New upstream version 15.3.4+ds1 2022-10-02 17:18:49 +05:30
Pirate Praveen
9645f8990d
Drop elasticsearch-rails component (gem installed in postinst) 2022-10-02 17:17:28 +05:30
Pirate Praveen
bbee0d67f2
Upload to experimental 2022-09-14 22:59:54 +05:30
Pirate Praveen
d2afcf5f6b
Use packaged versions of aws-sdk*, rack-oauth2 and redis-actionpack 2022-09-14 22:58:27 +05:30
Mohammed Bilal
e9d4e397aa
Revert change done to name of upload dir 2022-09-14 20:06:11 +05:30
Mohammed Bilal
d6a8d3b8ee
install danger gem from rubygems.org
We need danger < 9 (dep of gitlab-dangerfiles) inorder to avoid octokit conflict
2022-09-14 20:05:27 +05:30
Mohammed Bilal
e0b2c50a43
Add patch to include babel plugins 2022-09-14 20:04:46 +05:30
Mohammed Bilal
16fc54e109
Refresh patches 2022-09-14 20:04:19 +05:30
Mohammed Bilal
68901de2f9 Update upstream source from tag 'upstream/15.3.2+ds1'
Update to upstream version '15.3.2+ds1'
with Debian dir 6743ccca50
2022-09-14 20:03:26 +05:30
Mohammed Bilal
37eadeca90
New upstream version 15.3.2+ds1 2022-09-14 19:55:36 +05:30
Mohammed Bilal
fead0f33c3 New upstream version 15.3.2+ds1 2022-09-04 06:09:36 +05:30
Pirate Praveen
e7df0faa67
Adjust gitlab-labkit version to 0.24.0 in postinst 2022-09-03 12:14:37 +05:30
Mohammed Bilal
9072983091 New upstream version 15.3.2+ds1 2022-09-01 14:37:04 +00:00
Pirate Praveen
8c2a450a3c
Upload to experimental 2022-08-29 19:43:07 +05:30
Pirate Praveen
9390741f2e
Update minimum version of ruby-oj 2022-08-29 19:42:42 +05:30
Pirate Praveen
78ae1b7543
Revert "Commit .gitattributes patch to git repo"
This reverts commit 5e478b0826.
2022-08-28 22:11:51 +05:30
Pirate Praveen
f8170dde31
Upload to experimental 2022-08-28 22:10:40 +05:30
Pirate Praveen
81209c0e90
Remove obsolete feature flag 2022-08-28 22:10:40 +05:30
Pirate Praveen
809e4b556e
Update minimum versions and install unsatisfied gems from rubygems.org 2022-08-28 22:10:39 +05:30
Pirate Praveen
5e478b0826
Commit .gitattributes patch to git repo 2022-08-27 14:17:57 +05:30
Pirate Praveen
63bc5e73b7
Add .gitattributes entry for handling cross platform text files 2022-08-27 14:17:13 +05:30
Pirate Praveen
be4b19edf4
Update changelog 2022-08-27 14:05:57 +05:30
Pirate Praveen
b17abaf252
Drop node-codemirror as dependency 2022-08-27 14:05:08 +05:30
Pirate Praveen
ea5404c573
Handle changes in upstream file list 2022-08-27 14:04:32 +05:30
Pirate Praveen
9a6364fe81
Refresh patches 2022-08-27 14:03:50 +05:30
Pirate Praveen
f080289c95 Update upstream source from tag 'upstream/15.3.1+ds1'
Update to upstream version '15.3.1+ds1'
with Debian dir e946436609
2022-08-27 11:54:24 +05:30
Pirate Praveen
761ace024e New upstream version 15.3.1+ds1 2022-08-27 11:52:29 +05:30
Pirate Praveen
a9b040837a
Use packaged versions of ruby-asana and ruby-fog-aws 2022-08-26 13:46:27 +05:30
Mohammed Bilal
95c2e8048a
Upload to experimental 2022-08-26 00:19:53 +05:30
Mohammed Bilal
cda87b2f45
Update minimum version of yamux in runtime dependency 2022-08-26 00:19:27 +05:30
Mohammed Bilal
3ac9af2a62
Upload to experimental 2022-08-25 20:53:47 +05:30
Mohammed Bilal
8c046d1111
Add info regarding gitlab-workhorse 2022-08-25 20:24:44 +05:30
Mohammed Bilal
67b9e80cf4 New upstream version 15.2.3+ds1 2022-08-24 15:35:11 +00:00
Mohammed Bilal
f0dd6eed4b Update upstream source from tag 'upstream/15.2.3+ds1'
Update to upstream version '15.2.3+ds1'
with Debian dir a3fb03acda
2022-08-24 15:35:11 +00:00
Pirate Praveen
588a0a8276
Upload to experimental 2022-08-23 00:40:23 +05:30
Pirate Praveen
c15e82650f
Add workhorse-vendor in upstream-file-list 2022-08-23 00:39:54 +05:30
Pirate Praveen
eb38aab56a
Upload to experimental 2022-08-23 00:30:47 +05:30
Praveen Arimbrathodiyil
cbde52b44e Merge branch 'fix-arch-indep-build' into 'master'
Fix arch:all build by separating overrides for gitlab and gitlab-workhorse

See merge request ruby-team/gitlab!11
2022-08-22 18:59:24 +00:00
Pirate Praveen
01b0a95f64
Fix arch:all build by separating dh overrides for gitlab and gitlab-workhorse 2022-08-23 00:04:43 +05:30
Pirate Praveen
1d5c8c3053
Upload to experimental 2022-08-19 21:19:17 +05:30
Pirate Praveen
9555f3f34b
Remove obsolete initializers 2022-08-19 20:44:39 +05:30
Pirate Praveen
0de364ead2
Upload to experimental 2022-08-19 14:39:33 +05:30
Pirate Praveen
786deddd56
Use more packaged ruby gem depemdencies 2022-08-19 14:39:33 +05:30
Pirate Praveen
412afa21f8
Upload to experimental 2022-08-15 22:40:18 +05:30
Pirate Praveen
dfddbc2d08
Use packaged versions of graphql and gitlab-labkit 2022-08-15 22:39:32 +05:30
Pirate Praveen
9c23cc72e8
Install omniauth-oauth2 1.7.3 from rubygems.org 2022-08-15 22:28:40 +05:30
Pirate Praveen
fd1dca6fe3
Use packaged version of ruby-gitlab-fog-azure-rm 2022-08-15 13:57:48 +05:30
Pirate Praveen
c9129ff26b
Upload to experimental 2022-08-14 22:23:20 +05:30
Pirate Praveen
fa9c26eeda
Remove obsolete initializer 2022-08-14 22:23:01 +05:30
Pirate Praveen
b680879516
Install more gems directly from rubygems.org 2022-08-14 22:23:01 +05:30
Pirate Praveen
8c2849a3bd
Update (build) dependencies 2022-08-14 22:23:01 +05:30
Pirate Praveen
066fa41e88
Refresh patches 2022-08-13 16:00:24 +05:30
Pirate Praveen
47fd4b9369 Update upstream source from tag 'upstream/15.2.2+ds1'
Update to upstream version '15.2.2+ds1'
with Debian dir a2f1e9dd9f
2022-08-13 15:14:48 +05:30
Pirate Praveen
95815f5e46 New upstream version 15.2.2+ds1 2022-08-13 15:12:31 +05:30
Pirate Praveen
780d188414
Fix not-binnmuable-all-depends-any 2022-08-11 02:35:38 +05:30
Pirate Praveen
d0e1d59131
Upload to experimental 2022-08-11 00:17:41 +05:30
Pirate Praveen
47cfd6c282
Remove obsolete initializers/00_active_record_gitlab_schema.rb 2022-08-11 00:13:00 +05:30
Pirate Praveen
1f2d45f822
Update dependencies 2022-08-10 23:15:00 +05:30
Pirate Praveen
76a73ea0fc
Update changelog 2022-07-30 13:16:19 +02:00
Pirate Praveen
460bf4d090
Update dependencies 2022-07-30 12:57:39 +02:00
Pirate Praveen
7042ba4935
Install more new gems from rubygems.org (packaged versions need update) 2022-07-30 12:56:47 +02:00
Pirate Praveen
8bff93719f
Install patches directory now present upstream 2022-07-29 22:52:38 +02:00
Pirate Praveen
4af37c07bb
Switched to golang-go from golang-any as work around (Closes #1016217) 2022-07-29 22:50:45 +02:00
Pirate Praveen
1a17c9f8ef
Add debian/salsa-ci.yml 2022-07-29 17:25:05 +02:00
Pirate Praveen
1afce9f23a
Update changelog 2022-07-29 14:52:24 +02:00
Pirate Praveen
7e490ce8d4
Refresh patches 2022-07-29 14:51:45 +02:00
Pirate Praveen
2f3c8b06da Update upstream source from tag 'upstream/15.1.4+ds1'
Update to upstream version '15.1.4+ds1'
with Debian dir cf886bfe92
2022-07-29 14:16:26 +02:00
Pirate Praveen
d151e2b7fa New upstream version 15.1.4+ds1 2022-07-29 14:14:30 +02:00
Pirate Praveen
070252e62e
New upstream version 15.1.3+ds1 2022-07-29 14:03:07 +02:00
Praveen Arimbrathodiyil
ab4c4f2568 Merge branch '1015303-fix-actioncable' into 'master'
Install configuration file for ActionCable

See merge request ruby-team/gitlab!10
2022-07-24 16:23:40 +00:00
Balasankar C
215caf9bce
Change Balu's email ID
Signed-off-by: Balasankar C <balasankarc@debian.org>
2022-07-24 20:01:13 +05:30
Balasankar C
506a08384a
Install configuration file for ActionCable
Starting with GitLab 14.5, ActionCable is mandatory, and cable.yml is a
required configuration file.

Signed-off-by: Balasankar C <balasankarc@debian.org>
2022-07-24 19:15:45 +05:30
Pirate Praveen
dd76d996b0 New upstream version 15.1.3+ds1 2022-07-23 20:15:48 +02:00
Pirate Praveen
b8ba1236e7
Update minimum version of ruby-bootsnap to 1.9.4 2022-07-18 18:06:27 +02:00
Pirate Praveen
0dcbe0ed9f
Upload to experimental 2022-07-17 14:43:15 +02:00
Pirate Praveen
daf8fb9380
Remove obsolete feature flags 2022-07-17 14:43:15 +02:00
Pirate Praveen
4f1e508477
Install more gems from rubygems.org 2022-07-17 14:43:14 +02:00
Pirate Praveen
cad5c3b6e9
Update dependencies 2022-07-17 14:43:14 +02:00
Pirate Praveen
4111d9a9b6
Installed files newly added by upstream 2022-07-17 14:43:13 +02:00
Pirate Praveen
7f41c89970
Refresh patches 2022-07-17 14:43:13 +02:00
Pirate Praveen
8ddcf301b8
New upstream version 15.0.4+ds1 2022-07-17 14:43:12 +02:00
Pirate Praveen
2e94207dd8 New upstream version 15.0.4+ds1 2022-07-16 19:58:13 +02:00
Praveen Arimbrathodiyil
cb6963ba41 Merge branch 'onlyjob' into 'master'
Services: downgraded redis-server "Requires" to "Wants".

See merge request ruby-team/gitlab!9
2022-07-15 20:09:47 +00:00
Praveen Arimbrathodiyil
3948cf0a2a Merge branch 'update_database_config_syntax' into 'master'
Update syntax of database config (required before 14.x → 15.0 upgrade)

See merge request ruby-team/gitlab!8
2022-07-15 19:01:37 +00:00
Dmitry Smirnov
17a7bccde7 Services: downgraded redis-server "Requires" to "Wants".
This allows to disable local Redis in favour of external instance.

Signed-off-by: Dmitry Smirnov <onlyjob@member.fsf.org>
2022-07-01 19:04:55 +10:00
Pirate Praveen
da4b3e8879
Upload to experimental 2022-07-01 13:27:15 +05:30
Pirate Praveen
8fd2085456
Update minimum version of ruby-rack for security fix 2022-07-01 13:26:34 +05:30
Pirate Praveen
9067a27979 Update upstream source from tag 'upstream/14.10.5+ds1'
Update to upstream version '14.10.5+ds1'
with Debian dir 761720939f
2022-07-01 11:36:38 +05:30
Pirate Praveen
394d455fd1 New upstream version 14.10.5+ds1 2022-07-01 11:34:44 +05:30
Pirate Praveen
1a1cd418b6
Upload to experimental 2022-06-27 20:29:23 +05:30
Pirate Praveen
5e2c9a97a4
Add gitlab-dangerfiles as dependency in Gemfile 2022-06-27 20:28:28 +05:30
Pirate Praveen
8dccc823be
Install gitlab-dangerfiles gem via gem command required in Rakefile 2022-06-27 17:03:45 +05:30
Pirate Praveen
f4af2127d0
Update dependencies 2022-06-27 17:03:44 +05:30
Pirate Praveen
ed2a868d23
Update changelog 2022-06-22 00:41:14 +05:30
Pirate Praveen
a3e7ac11d8
Update debian/upstream-file-list with newly added files 2022-06-22 00:41:14 +05:30
Pirate Praveen
73c638aef3
Refresh patches 2022-06-22 00:40:03 +05:30
Pirate Praveen
cf58b65260 Update upstream source from tag 'upstream/14.10.4+ds1'
Update to upstream version '14.10.4+ds1'
with Debian dir 22cb194637
2022-06-21 17:21:11 +05:30
Pirate Praveen
13a35f9ff0 New upstream version 14.10.4+ds1 2022-06-21 17:19:12 +05:30
Pirate Praveen
1fadc36945
Use packaged version of ruby-gitlab-markup (drop patches) 2022-06-08 22:28:56 +05:30
Pirate Praveen
1dd3a33174
Use packaged version of prosemirror-view node module 2022-06-07 18:12:18 +05:30
Pirate Praveen
0007b9b5ce
Upload to experimental 2022-06-02 22:24:56 +05:30
Pirate Praveen
74509ade4e Update upstream source from tag 'upstream/14.9.5+ds1'
Update to upstream version '14.9.5+ds1'
with Debian dir af6cc6c5fa
2022-06-02 21:07:26 +05:30
Pirate Praveen
cee083333e New upstream version 14.9.5+ds1 2022-06-02 21:05:25 +05:30
Pirate Praveen
7aeddece60
Upload to experimental 2022-05-14 13:33:06 +05:30
Pirate Praveen
ede5703325
Bump Standards-Version to 4.6.1 (no changes needed) 2022-05-14 13:32:50 +05:30
Pirate Praveen
21a93550b0
Switch to packaged version of node-dateformat 2022-05-12 18:46:38 +05:30
Pirate Praveen
a3720d3121
Upload to experimental 2022-05-11 18:19:34 +05:30
Pirate Praveen
04c1ff772d
Use packaged versions of d3, d3-sankey and d3-selection node modules 2022-05-11 18:18:39 +05:30
Pirate Praveen
a968c77299
Switch to packaged version of node-mermaid 2022-05-11 12:19:55 +05:30
Pirate Praveen
c435995ad4
Upload to experimental 2022-05-10 18:42:30 +05:30
Pirate Praveen
3493b8b53e
Switch to packaged version of node-postcss 2022-05-10 18:42:15 +05:30
Pirate Praveen
145966838f
Upload to experimental 2022-05-08 22:08:17 +05:30
Pirate Praveen
e939c5e75c
Relax dependency on rdoc (ruby 3.0 don't specify any version) 2022-05-08 22:07:05 +05:30
Pirate Praveen
d33c0052e7
Check if graphiql-rails is installed before installing it via gem command 2022-05-08 18:48:40 +05:30
Pirate Praveen
b3b01277af
Update dependencies 2022-05-08 18:36:04 +05:30
Pirate Praveen
3c10849204
Upstream no longer ships file/directory named docker 2022-05-08 18:35:08 +05:30
Pirate Praveen
60a6dc8da2
Disable more tests that need unpackaged modules 2022-05-07 23:26:47 +05:30
Pirate Praveen
46b2f93f0e
Refresh patches 2022-05-07 22:13:53 +05:30
Pirate Praveen
478b71c67b Update upstream source from tag 'upstream/14.9.4+ds1'
Update to upstream version '14.9.4+ds1'
with Debian dir 45428e2009
2022-05-07 20:10:40 +05:30
Pirate Praveen
514ffadb92 New upstream version 14.9.4+ds1 2022-05-07 20:08:51 +05:30
Pirate Praveen
8e048edb1f
Upload to experimental 2022-05-03 16:27:13 +05:30
Pirate Praveen
8e17b97066 Update upstream source from tag 'upstream/14.8.6+ds1'
Update to upstream version '14.8.6+ds1'
with Debian dir e87bad807c
2022-05-03 16:04:51 +05:30
Pirate Praveen
710edc26c8 New upstream version 14.8.6+ds1 2022-05-03 16:02:30 +05:30
Pirate Praveen
a517185329
Upload to experimental 2022-05-02 17:48:38 +05:30
Pirate Praveen
9c5bb3a432
Update minimum version of js-cookie to 3.0 2022-05-02 17:47:43 +05:30
Pirate Praveen
367154476c Upload to experimental 2022-04-10 02:27:11 +05:30
Pirate Praveen
c81ce798d3 Update minimum version of ruby-rqrcode and ruby-webauthn 2022-04-09 21:27:44 +05:30
Pirate Praveen
343fab58ec Use packaged version of cron-validator node module 2022-04-09 21:25:41 +05:30
Pirate Praveen
0be71800bd Use packaged version of codemirror node module 2022-04-09 21:19:18 +05:30
Pirate Praveen
cc70e05ac1 Use packaged version of clipboard node module 2022-04-09 14:40:05 +05:30
Pirate Praveen
d842f69759 Upload to experimental 2022-04-08 23:34:12 +05:30
Pirate Praveen
98e444746f Export GEM_HOME from gitlab-rake.sh (Closes: #1008932)
Thanks to Maxmillian Stein
2022-04-08 23:22:56 +05:30
Pirate Praveen
c88f6b2bed Update minimum version of ruby-gitlab-experiment 2022-04-06 16:00:12 +05:30
Pirate Praveen
419d556a21 Upload to experimental 2022-04-05 18:12:51 +05:30
Pirate Praveen
02a9df14d4 Update dependencies 2022-04-05 18:12:17 +05:30
Pirate Praveen
6832e9f529 Refresh patches 2022-04-04 12:50:17 +05:30
Pirate Praveen
2863444a25 Update upstream source from tag 'upstream/14.8.5+ds1'
Update to upstream version '14.8.5+ds1'
with Debian dir ba216e0e38
2022-04-04 11:23:52 +05:30
Pirate Praveen
4f07442896 New upstream version 14.8.5+ds1 2022-04-04 11:22:00 +05:30
Pirate Praveen
93a8ffa0e6 Fix max version of obsolete sherlock.rb initializer 2022-04-03 01:01:23 +05:30
Pirate Praveen
fc70086aa1 Update minimum version of ruby-sidekiq-cron to 1.2 2022-04-02 14:57:36 +05:30
Pirate Praveen
e744da84c8 Upload to experimental 2022-04-02 14:09:03 +05:30
Pirate Praveen
3a13373367 Update minimum version of gitaly* to 14.7 2022-04-02 14:08:48 +05:30
Pirate Praveen
f7b8d2c2c9 Update minimum version of ruby-acme-client 2022-04-02 02:25:39 +05:30
Pirate Praveen
6dc31234b0 Upload to experimental 2022-04-01 23:17:56 +05:30
Pirate Praveen
63a14ed45d Switch back to ruby-grpc package from archive 2022-04-01 23:17:56 +05:30
Pirate Praveen
66c64859dc Update minimum versions of dependencies 2022-04-01 23:12:50 +05:30
Pirate Praveen
178d2a97ae Refresh patches 2022-04-01 22:12:55 +05:30
Pirate Praveen
0431e648d7 Update upstream source from tag 'upstream/14.7.7+ds1'
Update to upstream version '14.7.7+ds1'
with Debian dir bdf762213c
2022-04-01 21:49:33 +05:30
Pirate Praveen
c611f599cf New upstream version 14.7.7+ds1 2022-04-01 21:47:47 +05:30
Pirate Praveen
5fa21f7a2d Set GEM_HOME and GEM_PATH variables in rake-tasks.sh 2022-03-28 23:11:22 +05:30
Pirate Praveen
862267bc5d Update minimum version of ruby-google-protobuf 2022-03-28 23:11:10 +05:30
Pirate Praveen
33f1d4df75 Add ruby-webrick as dependency 2022-03-28 23:10:05 +05:30
Antoine Le Gonidec
f52e9a3a85 Update syntax of database config
The format we used for the database config YAML file is deprecated, and
will no longer be supported starting with GitLab 15.0.
cf. https://gitlab.com/gitlab-org/gitlab/-/issues/338182

The new format is described in the upstream documentation:
https://docs.gitlab.com/ee/development/database/multiple_databases.html#configdatabaseyml
2022-03-04 16:33:07 +01:00
Pirate Praveen
f587e6f183 Upload to experimental 2022-03-03 21:50:19 +05:30
Pirate Praveen
3835bf1301 Install grpc and graphiql-rails using gem command 2022-03-03 21:50:19 +05:30
Pirate Praveen
40a5e35635 Update dependencies 2022-03-03 21:50:19 +05:30
Pirate Praveen
9798801c05 Remove obsolete initializer 2022-03-03 21:50:19 +05:30
Pirate Praveen
fb0a8b4389 Add parser gem to Gemfile 2022-03-03 21:50:19 +05:30
Pirate Praveen
28fa6f76fb fix 2022-03-03 21:50:19 +05:30
Pirate Praveen
7df15b8516 Refresh patches (remove patches applied upstream) 2022-03-02 13:35:08 +05:30
Pirate Praveen
b7d63309f2 Update upstream source from tag 'upstream/14.7.4+ds1'
Update to upstream version '14.7.4+ds1'
with Debian dir eadf0d8789
2022-03-02 08:18:21 +05:30
Pirate Praveen
0d67b01f61 New upstream version 14.7.4+ds1 2022-03-02 08:16:31 +05:30
Pirate Praveen
c1f2c6ea96 Update minimum version of gitaly (for ruby-gollum-lib update) 2022-02-28 00:29:48 +05:30
Pirate Praveen
86b15ce2b7 Update minimum version of ruby-ruby-magic (for ruby-mini-portile2 compat) 2022-02-28 00:29:42 +05:30
Pirate Praveen
0af1e4731a Upload to experimental 2022-02-27 20:06:32 +05:30
Pirate Praveen
b3e67d50c6 Relax dependency on ruby-sanitize 2022-02-27 20:06:04 +05:30
Pirate Praveen
33dbfafd80 Upload to experimental 2022-02-27 12:55:45 +05:30
Pirate Praveen
e27977b73e Update upstream source from tag 'upstream/14.6.5+ds1'
Update to upstream version '14.6.5+ds1'
with Debian dir 8934906dc1
2022-02-27 12:52:12 +05:30
Pirate Praveen
ae28033eb9 New upstream version 14.6.5+ds1 2022-02-27 12:50:16 +05:30
Pirate Praveen
11a7abff4f Upload to experimental 2022-02-05 20:51:48 +05:30
Pirate Praveen
6394ef6e55 Move source to main section only gitlab binary package needs to be in contrib 2022-02-05 20:51:48 +05:30
Pirate Praveen
dac9ce41cc Update minimum version of ruby-rouge to 3.27~ 2022-02-05 20:02:56 +05:30
Pirate Praveen
4274d4d45e Refresh patches 2022-02-05 19:35:06 +05:30
Pirate Praveen
03dedc826f Update upstream source from tag 'upstream/14.6.4+ds1'
Update to upstream version '14.6.4+ds1'
with Debian dir 102cdc4143
2022-02-05 19:11:31 +05:30
Pirate Praveen
1beab03f69 New upstream version 14.6.4+ds1 2022-02-05 19:09:49 +05:30
Pirate Praveen
d1d126e844 Sort watch page based on recently created tags 2022-02-05 19:09:05 +05:30
Pirate Praveen
992b9cf694 Upload to experimental 2022-01-26 23:32:16 +05:30
Pirate Praveen
c39e15ea9f Remove obsolete config files 2022-01-26 23:31:47 +05:30
Pirate Praveen
df75b822cf Update minimum versions of dependencies 2022-01-26 23:31:34 +05:30
Pirate Praveen
d3caf65777 Handle newly added files 2022-01-26 13:39:59 +05:30
Pirate Praveen
2564e827ed Refresh patches 2022-01-26 13:39:30 +05:30
Pirate Praveen
ad12974701 Update upstream source from tag 'upstream/14.6.3+ds1'
Update to upstream version '14.6.3+ds1'
with Debian dir 4b7ac0b5c5
2022-01-26 12:10:27 +05:30
Pirate Praveen
09bec643e8 New upstream version 14.6.3+ds1 2022-01-26 12:08:38 +05:30
Pirate Praveen
41cd387647 Upload to experimental 2022-01-12 13:11:48 +05:30
Pirate Praveen
5b1839d50c Update upstream source from tag 'upstream/14.5.3+ds1'
Update to upstream version '14.5.3+ds1'
with Debian dir 61802afe6d
2022-01-12 13:01:40 +05:30
Pirate Praveen
62ea58294d New upstream version 14.5.3+ds1 2022-01-12 12:59:36 +05:30
Pirate Praveen
3612b637d6 Drop node-chart.js dependency and unused links to js libraries 2021-12-26 14:57:56 +05:30
Pirate Praveen
75b1f8188f Upload to experimental 2021-12-17 13:10:13 +05:30
Pirate Praveen
8ae2112e74 Update minimum version of gitlab-common to 14.5 2021-12-17 13:09:33 +05:30
Pirate Praveen
625d342bd0 Upload to experimental 2021-12-17 00:19:30 +05:30
Pirate Praveen
cfba73385b Add debhelper templates to preinst (fixes the removing obsolete conffile) 2021-12-17 00:15:46 +05:30
Pirate Praveen
c96f6dcdbf Rename debian/maintscript to debian/gitlab.mainscript 2021-12-17 00:15:17 +05:30
Pirate Praveen
e681dbba8d Upload to experimental 2021-12-16 22:38:53 +05:30
Pirate Praveen
86d44d376c Adapt for debhelper compat 13 2021-12-16 22:38:53 +05:30
Pirate Praveen
315b69841c Drop compat file, rely on debhelper-compat and bump compat level to 13 2021-12-16 22:38:53 +05:30
Pirate Praveen
ebc7656751 Fix path in maintscript 2021-12-16 11:06:37 +05:30
Pirate Praveen
638a5b2cfa Upload to experimental 2021-12-12 18:44:00 +05:30
Pirate Praveen
397357d4a6 Remove obsolete feature flags 2021-12-12 18:43:21 +05:30
Pirate Praveen
491551f56e Relax dependency on ipynbdiff in Gemfile 2021-12-12 18:42:56 +05:30
Pirate Praveen
4b1f2fff85 Update dependencies 2021-12-12 18:42:46 +05:30
Pirate Praveen
8a2046ad45 Install newly added files 2021-12-11 22:56:51 +05:30
Pirate Praveen
a662de8f89 Refresh patches 2021-12-11 22:56:32 +05:30
Pirate Praveen
83500c16ee Update upstream source from tag 'upstream/14.5.2+ds1'
Update to upstream version '14.5.2+ds1'
with Debian dir 71697809bd
2021-12-11 22:20:40 +05:30
Pirate Praveen
a3b55e5cd3 New upstream version 14.5.2+ds1 2021-12-11 22:18:48 +05:30
Pirate Praveen
cc79b2bf1f Upload to experimental 2021-12-07 22:41:09 +05:30
Pirate Praveen
970d07b0c9 Update minimum version of ruby-graphql to 1.11.10 2021-12-07 22:41:09 +05:30
Pirate Praveen
cd2ae7a1d9 Refresh patches 2021-12-07 22:41:09 +05:30
Pirate Praveen
3609e13a1c Update minimum version of gitaly to 14.4.4 2021-12-07 22:31:23 +05:30
Pirate Praveen
509e622831 Update upstream source from tag 'upstream/14.4.4+ds1'
Update to upstream version '14.4.4+ds1'
with Debian dir a28694afcd
2021-12-07 22:29:00 +05:30
Pirate Praveen
a1c8598022 New upstream version 14.4.4+ds1 2021-12-07 22:27:20 +05:30
Pirate Praveen
73459d6424 Build with golang-any >= 2:1.17 2021-11-20 20:10:14 +05:30
Pirate Praveen
468c333144 Upload to experimental 2021-11-19 19:06:04 +05:30
Pirate Praveen
2c087856cc Fix gitlab-puma service failing to start by requiring sidekiq/job_logger 2021-11-19 19:06:04 +05:30
Pirate Praveen
9ec2389e94 Reorganize patches to nodejs and tweaks 2021-11-19 19:06:04 +05:30
Pirate Praveen
daeea7adc8 Update minimum versions of dependencies 2021-11-19 19:06:03 +05:30
Pirate Praveen
42abcc7994 Refresh patches and remove obsolete patches 2021-11-18 23:44:59 +05:30
Pirate Praveen
e2eeffe5dc Install new file added upstream 2021-11-18 23:44:33 +05:30
Pirate Praveen
3607edbc5d Update upstream source from tag 'upstream/14.4.2+ds1'
Update to upstream version '14.4.2+ds1'
with Debian dir 752465c447
2021-11-18 22:13:24 +05:30
Pirate Praveen
9deebb8264 New upstream version 14.4.2+ds1 2021-11-18 22:05:49 +05:30
Pirate Praveen
0a8552d99d Upload to experimental 2021-11-16 22:08:00 +05:30
Pirate Praveen
3f20769523 Update minimum versions of dependencies 2021-11-16 22:07:03 +05:30
Pirate Praveen
b9544852f2 Replace gitaly build dependency with golang-gitlab-gitlab-org-gitaly-dev 2021-11-16 19:10:09 +05:30
Pirate Praveen
ba3a5ea205 Upload to experimental 2021-11-16 16:26:37 +05:30
Pirate Praveen
716d398d41 Refresh patches and create Gemfile subdirectory for patches 2021-11-11 20:16:39 +05:30
Pirate Praveen
8804f2dc83 Update dependencies 2021-11-11 20:16:39 +05:30
Pirate Praveen
6df538c3c1 Update changelog 2021-11-11 17:04:36 +05:30
Pirate Praveen
53db5290d4 Update upstream source from tag 'upstream/14.3.4+ds1'
Update to upstream version '14.3.4+ds1'
with Debian dir b76f2c5e2f
2021-11-11 11:25:31 +05:30
Pirate Praveen
eafcf47284 New upstream version 14.3.4+ds1 2021-11-11 11:23:49 +05:30
Pirate Praveen
97204a4bea Upload to experimental 2021-11-05 01:15:49 +05:30
Pirate Praveen
ee10b5c887 Lock @tiptap/extension-code-block to 2.0.0-beta.16 2021-11-04 22:39:25 +05:30
Pirate Praveen
f9cc170785 Upload to experimental 2021-11-04 02:03:17 +05:30
Pirate Praveen
f80f671f78 Update prior-version in maintscript for rm_conffile 2021-11-04 02:02:45 +05:30
Pirate Praveen
fef750d687 Switch to bash for quotes support in arguments for gitlab-rake 2021-11-04 02:01:51 +05:30
Pirate Praveen
e1c21b132b Upload to experimental 2021-11-04 00:52:39 +05:30
Pirate Praveen
d35a285316 Tighten some tiptap extension versions too in package.json 2021-11-03 01:11:39 +05:30
Pirate Praveen
17c1261892 Add a preinst script to check version of postgresql 2021-11-03 01:11:39 +05:30
Pirate Praveen
d00da40e08 Use matching version of @tiptap/core in package.json 2021-11-02 20:08:18 +05:30
Pirate Praveen
398f356712 Update minimum version of ruby-unleash 2021-11-02 03:42:32 +05:30
Pirate Praveen
1a7bb9b642 Force specific version of monaco-editor-webpack-plugin for compatibility 2021-11-01 23:49:05 +05:30
Pirate Praveen
7d421291df Remove obsolete maintscript 2021-10-30 00:27:54 +05:30
Pirate Praveen
77f7eb63bf Update dependencies 2021-10-30 00:27:44 +05:30
Pirate Praveen
ad185d4fe5 Relax dependency on rails in Gemfile 2021-10-30 00:02:11 +05:30
Pirate Praveen
36de66b07a Update minimum versions of gitaly, ruby-gitaly and gitlab-common 2021-10-29 22:03:29 +05:30
Pirate Praveen
4ae4671472 Update version in changelog 2021-10-29 22:02:32 +05:30
Pirate Praveen
43416ee97d Update upstream source from tag 'upstream/14.2.6+ds1'
Update to upstream version '14.2.6+ds1'
with Debian dir 7d2b7c02e9
2021-10-29 20:45:47 +05:30
Pirate Praveen
ee1142ef34 New upstream version 14.2.6+ds1 2021-10-29 20:43:33 +05:30
Pirate Praveen
1a25c27275 Rename workhorse binary to gitlab-workhorse 2021-10-29 20:06:32 +05:30
Pirate Praveen
ac1c9f9ba3 Fix XS-Go-Import-Path (remove extra workhorse from import path) 2021-10-29 20:05:58 +05:30
Pirate Praveen
7b4d52505d Update minimum version of golang gitab-labkit 2021-10-29 02:20:08 +05:30
Pirate Praveen
b778eb63a9 Update changelog 2021-10-28 01:37:37 +05:30
Pirate Praveen
e456053620 Update import path for workhorse 2021-10-28 01:36:56 +05:30
Pirate Praveen
bc37520631 Refresh patches 2021-10-28 01:36:19 +05:30
Pirate Praveen
8da35bec51 Update upstream source from tag 'upstream/14.2.5+ds1'
Update to upstream version '14.2.5+ds1'
with Debian dir f23823307f
2021-10-27 15:25:16 +05:30
Pirate Praveen
edb4c77020 New upstream version 14.2.5+ds1 2021-10-27 15:23:28 +05:30
Pirate Praveen
e3bb51fb33 Upload to experimental 2021-10-04 20:55:43 +05:30
Pirate Praveen
4a9bb0dbfe Update min versions of gitaly, ruby-gitaly, gitlab-common, ruby-gitlab-labkit 2021-10-04 20:54:36 +05:30
Pirate Praveen
24efc58fa7 Upload to experimental 2021-10-03 02:22:43 +05:30
Pirate Praveen
444b1e740b Don't add babel plugins now added by upstream again in babel.config.js 2021-10-03 02:21:26 +05:30
Pirate Praveen
11639f79c4 Remove manual resolution for monaco-editor and fix version incompatibility 2021-10-03 00:48:38 +05:30
Sruthi Chandran
56ce90ad98 Relax autoprefixer-rails version to ~> 10.2 2021-10-02 03:39:35 +05:30
Sruthi Chandran
a07dea71c7 Install .browserslistrc 2021-10-02 03:37:11 +05:30
Sruthi Chandran
7b826e1de7 Update changelog 2021-10-02 02:44:33 +05:30
Sruthi Chandran
197d691777 Set minimum versions for deps 2021-10-02 02:42:24 +05:30
Sruthi Chandran
6256e6891a Update upstream file list and install files 2021-10-02 01:59:54 +05:30
Sruthi Chandran
dc858f77b5 Run upstream file check before dh_install 2021-10-02 01:11:04 +05:30
Sruthi Chandran
1acbae39b8 Refresh patches 2021-10-01 04:34:20 +05:30
Sruthi Chandran
b02a0bcf00 Remove patches no longer required 2021-10-01 04:33:47 +05:30
Sruthi Chandran
6ab01fcdba Update upstream source from tag 'upstream/14.1.7+ds1'
Update to upstream version '14.1.7+ds1'
with Debian dir 606fc7797a
2021-09-30 23:04:05 +05:30
Sruthi Chandran
bea6aeeaf6 New upstream version 14.1.7+ds1 2021-09-30 23:02:18 +05:30
Pirate Praveen
945f3ac2e7 Upload to experimental 2021-09-20 23:22:56 +05:30
Pirate Praveen
bad5f10577 Update minimum version of postgresql-contrib (>= 12~) 2021-09-20 23:18:23 +05:30
Pirate Praveen
c6e0fd4135 Update minimum version of ruby-grape-logging (>= 1.8~) 2021-09-20 23:18:15 +05:30
Pirate Praveen
7fcc141a2e Update minimum version of nodejs (>= 12~) for yarn 3.0 2021-09-20 23:18:07 +05:30
Pirate Praveen
c0297ce272 Update changelog 2021-09-09 15:48:09 +05:30
Pirate Praveen
631c8dd7b9 Add openssh-server to recommends (systemd nspawn do not have this by default) 2021-09-09 03:36:36 +05:30
Pirate Praveen
35424cbf81 Fix activerecord 6.1.4 compatibility issue with postgresql cte 2021-09-08 22:56:40 +05:30
Pirate Praveen
6967805d17 Remove config/initializers/mailer_retries.rb in clean 2021-09-08 01:40:01 +05:30
Pirate Praveen
374b0ec808 Remove obsolete initializer mailer_retries.rb 2021-09-08 00:28:06 +05:30
Pirate Praveen
cb0bb2f245 Remove obsolete initializer labkit_middleware.rb 2021-09-08 00:27:29 +05:30
Pirate Praveen
7be813505b Update minimum version of ruby-apollo-upload-server 2021-09-07 23:28:16 +05:30
Pirate Praveen
f540e31ac2 Remove obsolete initializer action_dispatch_journey_formatter.rb 2021-09-07 23:25:33 +05:30
Pirate Praveen
224ff17833 Update minimum versions of ruby-flipper* 2021-09-07 23:09:46 +05:30
Pirate Praveen
4930273285 Update minimum versions add ruby-kas-grpc 2021-09-07 03:56:21 +05:30
Pirate Praveen
ac0abaacaf Relax dependency on autoprefixer-rails in Gemfile 2021-09-07 00:29:08 +05:30
Pirate Praveen
014f2be462 Update minimum versions of dependencies 2021-09-07 00:26:50 +05:30
Sruthi Chandran
4ac5cedcbf Update maintscript 2021-09-06 04:47:14 +05:30
Sruthi Chandran
9279d3cff1 Update upstream file check sh 2021-09-05 02:33:14 +05:30
Sruthi Chandran
70dbca020d Update upstream-file-list, install file and ignored-file-list 2021-09-05 02:33:14 +05:30
Sruthi Chandran
f755b8ceae Disable failing tests 2021-09-05 01:32:39 +05:30
Sruthi Chandran
7aa669f7ed Set minimum version for golang-google-grpc-dev 2021-09-05 01:09:32 +05:30
Sruthi Chandran
48e939e598 Add golang-github-hashicorp-yamux-dev to builddeps 2021-09-05 01:05:12 +05:30
Sruthi Chandran
914b3d1872 Update changelog 2021-09-05 00:53:14 +05:30
Sruthi Chandran
cb1b58703f Add gitaly to builddeps 2021-09-05 00:48:50 +05:30
Sruthi Chandran
0bcd46527f Update upstream source from tag 'upstream/14.0.10'
Update to upstream version '14.0.10'
with Debian dir b0cad650b0
2021-09-04 03:14:00 +05:30
Sruthi Chandran
112e489d1c New upstream version 14.0.10 2021-09-04 03:09:40 +05:30
Sruthi Chandran
e135864ffa Update changelog 2021-09-04 02:52:05 +05:30
Sruthi Chandran
03ff48a997 Refresh patches 2021-09-04 02:52:05 +05:30
Sruthi Chandran
ed44479d24 Remove patches already applied upstream 2021-09-04 02:52:05 +05:30
Sruthi Chandran
3bbd721fc3 New upstream version 14.0.10 2021-09-04 02:52:04 +05:30
Sruthi Chandran
6b5f1101eb New upstream version 14.0.10 2021-09-04 01:27:46 +05:30
Pirate Praveen
75824f5514 Bump Standards-Version to 4.6.0 (no changes needed) 2021-08-27 01:50:00 +05:30
Pirate Praveen
3dc6d3f09b Upload to experimental 2021-08-10 21:08:32 +05:30
Pirate Praveen
d6c246ac63 Switch back to using ruby-grpc package 2021-08-10 21:07:34 +05:30
Pirate Praveen
b0606e5100 Update minimum version of ruby-rqrcode-rails3 for 2FA fix 2021-08-10 21:05:51 +05:30
Pirate Praveen
c94ce0c0dd Change ruby2.7 dependency to ruby (for scripts that needs ruby) 2021-08-10 02:12:50 +05:30
Pirate Praveen
cd96b1229a Upload to experimental 2021-08-10 01:06:03 +05:30
Pirate Praveen
217cc28279 Switch back to using packaged ruby-google-protobuf (see #992008) 2021-08-10 01:04:42 +05:30
Pirate Praveen
27478f47b8 Upload to experimental 2021-08-04 17:16:45 +05:30
Pirate Praveen
4890a8a4f6 Update upstream source from tag 'upstream/13.12.9+ds1'
Update to upstream version '13.12.9+ds1'
with Debian dir 245b3e148f
2021-08-04 16:30:59 +05:30
Pirate Praveen
0519a37195 New upstream version 13.12.9+ds1 2021-08-04 16:29:09 +05:30
Pirate Praveen
e95d8cf57d Upload to experimental 2021-07-08 21:56:02 +05:30
Pirate Praveen
da12140b9a Update upstream source from tag 'upstream/13.12.8+ds1'
Update to upstream version '13.12.8+ds1'
with Debian dir 7dd5714dff
2021-07-08 21:51:58 +05:30
Pirate Praveen
c5d224e12c New upstream version 13.12.8+ds1 2021-07-08 21:50:14 +05:30
Pirate Praveen
fa9aa61b49 Upload to experimental 2021-07-02 02:17:29 +05:30
Pirate Praveen
df98e9fba0 Update minimum versions of ruby-rails and ruby-nokogiri 2021-07-02 02:17:29 +05:30
Pirate Praveen
7d872c506e Refresh patches 2021-07-02 02:17:29 +05:30
Pirate Praveen
a0e6cc2626 Update upstream source from tag 'upstream/13.12.6+ds1'
Update to upstream version '13.12.6+ds1'
with Debian dir 492090d23c
2021-07-02 01:07:42 +05:30
Pirate Praveen
3eea648134 New upstream version 13.12.6+ds1 2021-07-02 01:05:55 +05:30
Pirate Praveen
a7270347cf Upload to experimental 2021-06-21 23:58:29 +05:30
Pirate Praveen
e3bd3d3d08 Update upstream source from tag 'upstream/13.12.4+ds1'
Update to upstream version '13.12.4+ds1'
with Debian dir b4799be9cb
2021-06-21 23:57:32 +05:30
Pirate Praveen
3b6cf8664c New upstream version 13.12.4+ds1 2021-06-21 23:55:49 +05:30
Pirate Praveen
814e57608e Install grpc and google-protobuf before GEM_HOME is set 2021-06-21 23:48:23 +05:30
Pirate Praveen
3823096c59 Export GEM_HOME in gitlab-rails-console script 2021-06-21 23:01:13 +05:30
Pirate Praveen
0c81fb0d22 Update minimum version of golang-any (>= 2:1.15~) 2021-06-21 21:43:28 +05:30
Pirate Praveen
c5616dd459 Upload to experimental 2021-06-21 15:15:48 +05:30
Pirate Praveen
81063307aa Set GEM_HOME variable in gitlab-debian.conf 2021-06-21 15:14:12 +05:30
Pirate Praveen
5909466264 Upload to experimental 2021-06-21 14:10:25 +05:30
Pirate Praveen
1bcb4acac8 Move gem install to start of postinst, before regenerating Gemfile.lock 2021-06-21 14:09:06 +05:30
Pirate Praveen
27a7b7ef1f Upload to experimental 2021-06-21 01:03:21 +05:30
Pirate Praveen
d3a2479614 Add workaround for #989774 (install google-protobuf from rubygems.org) 2021-06-21 00:47:56 +05:30
Pirate Praveen
e7bda00cca Upload to experimental 2021-06-18 23:01:48 +05:30
Pirate Praveen
f6c30f3a0d Update minimum version of ruby-gitlab-experiment to 0.5.4 2021-06-18 21:59:37 +05:30
Pirate Praveen
7d9bd6d2e4 Upload to experimental 2021-06-17 22:20:29 +05:30
Pirate Praveen
fa672767c3 Update minimum version of ohai to 16.13.0-2 2021-06-17 22:19:54 +05:30
Pirate Praveen
de88e1146b Upload to experimental 2021-06-17 20:10:31 +05:30
Pirate Praveen
6ec2a132e1 Backport fix for rails 6.0.3.7 support (Thanks to Antoine Le Gonidec) 2021-06-17 20:09:14 +05:30
Pirate Praveen
4f387a08bc Upload to experimental 2021-06-12 20:10:00 +05:30
Pirate Praveen
6d061c1333 Remove dependency on ruby-google-protobuf (See #989774) 2021-06-12 20:10:00 +05:30
Pirate Praveen
b3da4f290b Relax dependency on ruby-pg-query 2021-06-12 01:11:21 +05:30
Pirate Praveen
3afd1d6651 Use packaged version of node-katex 2021-06-12 01:11:21 +05:30
Pirate Praveen
e353ca15c0 Update dependencies 2021-06-10 00:27:15 +05:30
Pirate Praveen
30313f3072 Relax dependency on autoprefixer gem in Gemfile 2021-06-10 00:26:54 +05:30
Pirate Praveen
7b3bd15cdc Handle new files included by upstream 2021-06-09 22:53:00 +05:30
Pirate Praveen
8badeed3e5 Refresh patches 2021-06-09 22:52:32 +05:30
Pirate Praveen
524e02e468 Update changelog for new upstream release 2021-06-09 22:52:19 +05:30
Pirate Praveen
d7a59cb6b5 Update upstream source from tag 'upstream/13.12.3+ds1'
Update to upstream version '13.12.3+ds1'
with Debian dir 0d3717162d
2021-06-08 01:25:13 +05:30
Pirate Praveen
d8d5ad1a24 New upstream version 13.12.3+ds1 2021-06-08 01:23:25 +05:30
Pirate Praveen
bd0a194965 Upload to experimental 2021-06-02 17:14:44 +05:30
Pirate Praveen
961fb706d5 Update upstream source from tag 'upstream/13.11.5+ds1'
Update to upstream version '13.11.5+ds1'
with Debian dir cd75b9e1a6
2021-06-02 17:13:06 +05:30
Pirate Praveen
1d7c7e5095 New upstream version 13.11.5+ds1 2021-06-02 17:11:27 +05:30
Pirate Praveen
630bcf8d08 Upload to experimental 2021-05-12 15:55:54 +05:30
Pirate Praveen
95554b29b2 Update upstream source from tag 'upstream/13.11.3+ds1'
Update to upstream version '13.11.3+ds1'
with Debian dir 839ba4976a
2021-05-12 15:33:01 +05:30
Pirate Praveen
4b1f5eac05 New upstream version 13.11.3+ds1 2021-05-12 15:28:45 +05:30
Pirate Praveen
86b266c8ed Drop dependency on ruby-jquery-atwho-rails (no longer used) 2021-05-12 01:20:29 +05:30
Pirate Praveen
ee188aa69d Use node-rails-actioncable from system 2021-05-10 01:11:57 +05:30
Pirate Praveen
1ee4f8772b Relax dependency of gon in Gemfile and update minimum version in d/control 2021-04-30 17:52:08 +05:30
Pirate Praveen
e3c1b1baff Upload to experimental 2021-04-30 00:44:56 +05:30
Pirate Praveen
ec640f827b Remove obsolete puma initializer (we have puma 5.2.2) 2021-04-30 00:44:56 +05:30
Pirate Praveen
63dbbb33e2 Update minimum versions of dependencies 2021-04-30 00:12:11 +05:30
Pirate Praveen
a240492479 Remove obsolete config files and update upstream config file list 2021-04-30 00:11:21 +05:30
Pirate Praveen
3cfb60517b Refresh patches 2021-04-30 00:10:56 +05:30
Pirate Praveen
98cd7bfd8e Update upstream source from tag 'upstream/13.11.2+ds1'
Update to upstream version '13.11.2+ds1'
with Debian dir ac249bbb68
2021-04-29 21:19:29 +05:30
Pirate Praveen
2b1ea5b95e New upstream version 13.11.2+ds1 2021-04-29 21:17:54 +05:30
Pirate Praveen
8bc51979c6 Upload to experimental (staging) 2021-04-28 18:45:48 +05:30
Pirate Praveen
60e7c731c5 Update minimum version of redis-server to 5:6.0.12~ 2021-04-28 18:45:48 +05:30
Pirate Praveen
274d8be34f Update minimum version of ruby-carrierwave to 1.3.2 2021-04-28 18:45:48 +05:30
Pirate Praveen
12905e534a Update minimum version of node-mermaid to 8.9.2 2021-04-28 18:45:48 +05:30
Pirate Praveen
713f2e1161 Update upstream source from tag 'upstream/13.10.4+ds1'
Update to upstream version '13.10.4+ds1'
with Debian dir 9870a1bc55
2021-04-28 17:24:33 +05:30
Pirate Praveen
941bf6661b New upstream version 13.10.4+ds1 2021-04-28 17:22:55 +05:30
Pirate Praveen
a8845b769d Upload to experimental 2021-04-25 18:14:46 +05:30
Pirate Praveen
daca4c5fd6 Update minimum version of ruby-mail-room 2021-04-25 18:14:16 +05:30
Pirate Praveen
36bdb97738 Keep gitlab-workhorse binary in main 2021-04-24 22:36:02 +05:30
Pirate Praveen
fd2331cd65 Upload to experimental 2021-04-24 00:24:55 +05:30
Pirate Praveen
a798ef112a Update version of gitlab-workhorse to same version as gitlab 2021-04-21 01:01:57 +05:30
Pirate Praveen
b07acac134 Use packaged versions of @babel/* 2021-04-21 01:01:41 +05:30
Pirate Praveen
5f6094489d Relax dependency on ruby-rexml to allow version embedded in libruby2.7 2021-04-20 23:17:37 +05:30
Pirate Praveen
e702d624af Use packaged versions of lodash and babel-plugin-lodash 2021-04-20 23:14:12 +05:30
Pirate Praveen
97d7d949e4 Update minimum version of node-prosemirror-{model,markdown} 2021-04-18 20:54:54 +05:30
Pirate Praveen
768ee498e8 Update changelog 2021-04-18 00:33:45 +05:30
Pirate Praveen
7479abe471 Update minimum versions of dependencies 2021-04-18 00:33:44 +05:30
Pirate Praveen
704227c1ff New upstream version 13.10.3+ds2 2021-04-18 00:33:44 +05:30
Pirate Praveen
3cf1e9a2bb New upstream version 13.10.3+ds2 2021-04-17 23:33:27 +05:30
Pirate Praveen
cc5a1794ac Upload to experimental 2021-04-17 23:32:13 +05:30
Pirate Praveen
b0ff007e84 Remove files no longer shipped by upstream from file lists 2021-04-17 23:30:11 +05:30
Pirate Praveen
3ecfb50b3d Add golang-github-getsentry-raven-go-dev as build dependency 2021-04-17 23:29:40 +05:30
Pirate Praveen
2166516d83 Refresh patches 2021-04-17 20:43:06 +05:30
Pirate Praveen
89d9cbce42 Update upstream source from tag 'upstream/13.10.3+ds1'
Update to upstream version '13.10.3+ds1'
with Debian dir d46fb941dc
2021-04-17 20:09:07 +05:30
Pirate Praveen
26db65f672 New upstream version 13.10.3+ds1 2021-04-17 20:07:23 +05:30
Pirate Praveen
0a98dbda3b Build gitlab-workhorse binary from workhorse directory 2021-04-17 20:05:48 +05:30
Pirate Praveen
684df5604e Upload to experimental 2021-04-15 23:58:12 +05:30
Pirate Praveen
9b03fe71bd Refresh patches 2021-04-15 23:58:12 +05:30
Pirate Praveen
41bcf3cda5 Add ruby-saml as a dependency 2021-04-15 23:58:12 +05:30
Pirate Praveen
998664b918 Update minimum version of ruby-rexml to 3.2.5 2021-04-15 22:42:28 +05:30
Pirate Praveen
443b0fd2ea Update upstream source from tag 'upstream/13.9.6+ds1'
Update to upstream version '13.9.6+ds1'
with Debian dir 5725912f20
2021-04-15 22:35:20 +05:30
Pirate Praveen
459ea34293 New upstream version 13.9.6+ds1 2021-04-15 22:33:27 +05:30
Pirate Praveen
a55c2dc6a9 Upload to experimental 2021-04-01 23:41:07 +05:30
Pirate Praveen
bd823d3c84 Remove obsolete initializer 2021-04-01 23:41:06 +05:30
Pirate Praveen
309ccd81e6 Add ruby-ruby-magic-static as new dependency 2021-04-01 23:41:06 +05:30
Pirate Praveen
82b2ef464e Drop ruby-hipchat dependency and refresh patch for the same change in Gemfile 2021-04-01 17:48:33 +05:30
Pirate Praveen
9adaa9b51a Update upstream source from tag 'upstream/13.9.5+ds1'
Update to upstream version '13.9.5+ds1'
with Debian dir 71eb89d788
2021-04-01 16:37:56 +05:30
Pirate Praveen
d6ce6a5a68 New upstream version 13.9.5+ds1 2021-04-01 16:36:13 +05:30
Pirate Praveen
4e28766cc0 Update watch file regex for github.com components 2021-04-01 16:35:51 +05:30
Pirate Praveen
2179e4d594 Upload to experimental 2021-03-27 16:10:16 +05:30
Pirate Praveen
6039dda4d6 Update minimum versions of ruby-rugged and ruby-licensee
This reverts commit 0495c56792.
2021-03-27 16:09:02 +05:30
Pirate Praveen
bd4ed8f3e0 Relax dependency on gitlab-labkit (for matching with gitaly requirement) 2021-03-27 16:07:33 +05:30
Pirate Praveen
538b117167 Upload to experimental 2021-03-23 23:41:49 +05:30
Pirate Praveen
0495c56792 Revert "Update minimum versions of ruby-rugged and ruby-licensee"
This reverts commit 6ccaddeba4.
2021-03-22 23:49:55 +05:30
Pirate Praveen
8bac81f8e8 Upload to experimental 2021-03-19 00:11:40 +05:30
Pirate Praveen
23eeaa097f Update upstream source from tag 'upstream/13.9.4+ds1'
Update to upstream version '13.9.4+ds1'
with Debian dir ae6f4fd291
2021-03-18 23:55:19 +05:30
Pirate Praveen
6a2d24fc29 New upstream version 13.9.4+ds1 2021-03-18 23:53:47 +05:30
Pirate Praveen
014a4e65d1 Upload to experimental 2021-03-11 21:46:51 +05:30
Pirate Praveen
6ccaddeba4 Update minimum versions of ruby-rugged and ruby-licensee 2021-03-11 21:46:02 +05:30
Pirate Praveen
c649c25dbb Upload to experimental 2021-03-11 21:12:46 +05:30
Pirate Praveen
de9fa4053e Update dependencies 2021-03-11 21:11:37 +05:30
Pirate Praveen
99853b47cb Update maintscript and upstream-config-file-list 2021-03-11 21:11:08 +05:30
Pirate Praveen
2fd95a0807 Add set -e and fix typos in file names 2021-03-11 21:10:30 +05:30
Pirate Praveen
b71697f5f9 Update debian/upstream-file-list 2021-03-11 21:09:56 +05:30
Pirate Praveen
99c75becf3 Refresh patches 2021-03-11 21:09:22 +05:30
Pirate Praveen
8aebb619f3 Update upstream source from tag 'upstream/13.9.3+ds1'
Update to upstream version '13.9.3+ds1'
with Debian dir 6ebd924a1f
2021-03-11 19:15:09 +05:30
Pirate Praveen
98b945ec52 New upstream version 13.9.3+ds1 2021-03-11 19:13:27 +05:30
Pirate Praveen
8de7e15af5 Upload to experimental 2021-03-09 17:00:03 +05:30
Pirate Praveen
59fd6d1756 Fix typo in dependency (ruby-azure-storage-common) 2021-03-09 16:59:22 +05:30
Pirate Praveen
977271857d Update minimum version of gitaly to 13.8~ 2021-03-09 00:57:02 +05:30
Pirate Praveen
ce3b8db129 Upload to experimental 2021-03-08 23:37:45 +05:30
Pirate Praveen
2ee22179fb Update minimum versions of dependencies 2021-03-08 23:37:01 +05:30
Pirate Praveen
be7e61c63e Relax dependency on bcrypt and webrick in Gemfile 2021-03-08 23:36:37 +05:30
Pirate Praveen
e353b2665a Refresh patches 2021-03-08 22:30:29 +05:30
Pirate Praveen
b0ff9938b4 Update upstream source from tag 'upstream/13.8.5+ds1'
Update to upstream version '13.8.5+ds1'
with Debian dir 9115fc5c98
2021-03-08 18:14:56 +05:30
Pirate Praveen
81ade28521 New upstream version 13.8.5+ds1 2021-03-08 18:12:59 +05:30
Pirate Praveen
7b8d5abea0 Upload to experimental 2021-03-05 17:54:44 +05:30
Pirate Praveen
b445b2273a Update minimum version of ruby-thrift to 0.14~ 2021-03-05 17:54:44 +05:30
Pirate Praveen
4e647c893c Refresh patches 2021-03-05 17:54:44 +05:30
Pirate Praveen
e345adcc5d Update upstream source from tag 'upstream/13.7.8+ds1'
Update to upstream version '13.7.8+ds1'
with Debian dir dbc4117c60
2021-03-05 16:21:16 +05:30
Pirate Praveen
230c9f7a6f New upstream version 13.7.8+ds1 2021-03-05 16:19:46 +05:30
Pirate Praveen
75e536bf7a Remove elasticsearch-model component from debian/gbp.conf 2021-03-05 16:19:01 +05:30
Pirate Praveen
575540fd7e Merge branch 'master-13.7' 2021-03-05 16:18:43 +05:30
Pirate Praveen
29b73ae3aa Upload to experimental 2021-03-02 23:56:43 +05:30
Pirate Praveen
7e88869458 Remove more obsolete config files, thanks to Dragos Jarca and Lars Kruse 2021-03-02 23:54:59 +05:30
Pirate Praveen
fe065618ae Remove config-file-list generated during build from repo 2021-03-01 19:56:14 +05:30
Pirate Praveen
8261391b25 Upload to experimental 2021-03-01 19:33:25 +05:30
Pirate Praveen
0a8f4002d4 Remove more obsolete configuration files 2021-03-01 19:31:49 +05:30
Pirate Praveen
c2d303ff88 Automatically check if any config files changed during build 2021-02-28 22:48:11 +05:30
Pirate Praveen
7492f31907 Update minimum versions to ruby-commonmarker and ruby-progressbar 2021-02-28 19:06:59 +05:30
Pirate Praveen
34cad7c7e1 Update changelog 2021-02-28 19:06:54 +05:30
Pirate Praveen
98741d55b7 Remove obsolte feature flags and initializers 2021-02-27 17:25:05 +05:30
Pirate Praveen
901e46aa79 Add resolutions: typescript 4.1.5 in package.json 2021-02-25 15:18:01 +05:30
Pirate Praveen
6ffe122398 Upload to experimental 2021-02-24 22:51:40 +05:30
Pirate Praveen
2d47476f46 Update minimum versions of ruby-fog-google and ruby-mail-room 2021-02-22 22:41:27 +05:30
Pirate Praveen
816883e743 Ignore embedded gitlab-workhorse (packaged separately) 2021-02-22 22:40:57 +05:30
Pirate Praveen
6c5a8b737f Refresh patches 2021-02-22 22:40:45 +05:30
Pirate Praveen
eaabfef43f Update changelog 2021-02-22 22:40:37 +05:30
Pirate Praveen
d621a64387 Switch back to ruby-licensee 8.9 for rugged 0.28 2021-02-22 19:39:11 +05:30
Dmitry Smirnov
44ff9a321b watch: corrected for "uscan --download-version" case. 2021-02-23 00:34:16 +11:00
Pirate Praveen
db2c994a67 Switch back to ruby-rugged 0.28 (use snapshot.debian.org) 2021-02-22 17:33:33 +05:30
Pirate Praveen
51594d4a58 Add --quiet to gitlab-sidekiq.service running bundle install --local 2021-02-22 17:33:24 +05:30
Pirate Praveen
8d88b2aefc Update upstream source from tag 'upstream/13.7.7'
Update to upstream version '13.7.7'
with Debian dir 2ce297e60a
2021-02-22 17:31:28 +05:30
Pirate Praveen
7e5cacce5f New upstream version 13.7.7 2021-02-22 17:27:13 +05:30
Dmitry Smirnov
cd9a0f35ed changelog update
* Corrected upstream version ("+ds1") to fix orig tars acquisition.
 * Removed CI-related changelog entry (CI file isnot shipped with the package).
2021-02-22 15:25:00 +11:00
Dmitry Smirnov
938ef19b16 watch: added "repacksuffix=+ds1". 2021-02-22 15:24:32 +11:00
Pirate Praveen
8ea1af2fc7 Upload to experimental 2021-02-22 01:35:51 +05:30
Pirate Praveen
b5ca8e35e3 Switch back to ruby-rugged 0.28 (use snapshot.debian.org) 2021-02-22 01:34:34 +05:30
Pirate Praveen
a2094ba48c Add --quiet to gitlab-sidekiq.service running bundle install --local 2021-02-20 12:52:35 +05:30
Pirate Praveen
8f936015f6 Upload to experimental 2021-02-19 19:39:01 +05:30
Pirate Praveen
0f63328fab Update minimum version of gitaly (for gitaly-git2go command) 2021-02-19 19:39:00 +05:30
Pirate Praveen
54171e33f7 Regenerate Gemfile.lock before gitlab-sidekiq service start 2021-02-19 19:39:00 +05:30
Pirate Praveen
77e7dcf5e3 Upload to experimental 2021-02-19 14:50:47 +05:30
Pirate Praveen
7cb02d213a Update minimum version of gitaly (for gitaly-git2go command) 2021-02-19 14:50:47 +05:30
Pirate Praveen
e1927013bc Regenerate Gemfile.lock before gitlab-sidekiq service start 2021-02-19 14:50:47 +05:30
Dmitry Smirnov
1658f2e0a2 CI: minor corrections; exclude "buster-backports" and tags.
not-for-changelog
2021-02-16 22:36:56 +11:00
Dmitry Smirnov
18ff04ab77 L:debian-rules-uses-unnecessary-dh-argument 2021-02-16 22:34:43 +11:00
Dmitry Smirnov
e293c6c2fb watch: fixed upstream MUT/tarballs downloading with "uscan" and "origtargz". 2021-02-16 22:28:55 +11:00
Pirate Praveen
1f9a380741 Change dependency on ruby to ruby2.7 2021-02-12 01:01:35 +05:30
Pirate Praveen
6f31a51519 Upload to experimental 2021-02-11 23:39:23 +05:30
Pirate Praveen
6a0a4e2d68 Update upstream source from tag 'upstream/13.6.7'
Update to upstream version '13.6.7'
with Debian dir 98b8813be2
2021-02-11 23:38:06 +05:30
Pirate Praveen
eae3f48ed8 New upstream version 13.6.7 2021-02-11 23:33:58 +05:30
Pirate Praveen
66763597fd Update minimum version of ruby to 2.7.2 and rubygems-integration to 1.18 2021-02-05 00:08:33 +05:30
Pirate Praveen
4dd5333b38 Upload to experimental 2021-02-04 15:53:47 +05:30
Pirate Praveen
3c5d53bb4d Update upstream source from tag 'upstream/13.6.6'
Update to upstream version '13.6.6'
with Debian dir 623d107bd1
2021-02-04 15:47:34 +05:30
Pirate Praveen
3571a16ade New upstream version 13.6.6 2021-02-04 15:43:07 +05:30
Pirate Praveen
8e4dd2d649 Update minimum version of ruby-attr-encrypted 2021-02-04 15:27:41 +05:30
Pirate Praveen
e535fd4fd5 Document how to activate a new user from rails console 2021-02-01 19:05:37 +05:30
Pirate Praveen
4365c59b4f Use gitlab-rails-console command in README.Debian 2021-02-01 19:05:27 +05:30
Pirate Praveen
f48d5478cb New upstream version 13.6.5 2021-02-01 13:19:51 +05:30
Pirate Praveen
70d4865e32 Upload to experimental 2021-01-30 21:13:35 +05:30
Pirate Praveen
ead17b17d6 Sync patches with buster-fasttrack branch 2021-01-30 21:13:35 +05:30
Pirate Praveen
cbe3ddfc6a Update minimum version of dependencies and add new dependencies 2021-01-30 21:13:35 +05:30
Pirate Praveen
dc8ff1e815 Update upstream-file-list 2021-01-30 21:13:35 +05:30
Pirate Praveen
d62cfca0ad Refresh patches 2021-01-30 21:13:35 +05:30
Pirate Praveen
88d9c276e6 Update changelog 2021-01-30 21:13:35 +05:30
Pirate Praveen
e087feee83 New upstream version 13.6.5 2021-01-30 21:13:34 +05:30
Pirate Praveen
be82141550 New upstream version 13.5.7 2021-01-30 21:13:33 +05:30
Pirate Praveen
aa040cbfac Update minimum version of node-popper.js 2021-01-30 21:13:33 +05:30
Pirate Praveen
949b7a85ed Update minimum version of ruby-mini-magick 2021-01-30 21:13:33 +05:30
Pirate Praveen
c40962c542 Fix syntax of nginx.ssl.config.example 2021-01-30 21:13:33 +05:30
Pirate Praveen
6f1a91da8e Upload to experimental 2021-01-30 21:13:33 +05:30
Pirate Praveen
65c436d655 New upstream version 13.5.6 2021-01-30 21:13:33 +05:30
Pirate Praveen
46909a7fbc Switch back to using lodash from npmjs.com (see #979531) 2021-01-30 21:13:33 +05:30
Pirate Praveen
5434991abd Update changelog 2021-01-30 21:13:33 +05:30
Pirate Praveen
b29dd36697 Don't install yarn.lock (we use some dependencies from system) 2021-01-30 21:13:33 +05:30
Pirate Praveen
479a61f83e Update nginx configuration using upstream templates 2021-01-30 21:13:33 +05:30
Pirate Praveen
7c2b577635 Refresh patches (create new patches to fix dependency mismatch) 2021-01-30 21:13:33 +05:30
Pirate Praveen
6f341559d5 Update minimum versions of dependencies 2021-01-30 21:13:33 +05:30
Pirate Praveen
41dda6d589 Install or ignore files newly added in this release 2021-01-30 21:13:33 +05:30
Pirate Praveen
7ed664d1de New upstream version 13.5.5 2021-01-30 21:13:32 +05:30
Pirate Praveen
d6737d101e New upstream version 13.6.5 2021-01-29 00:20:46 +05:30
Dmitry Smirnov
035298663f cme fix dpkg-copyright 2021-01-25 20:09:55 +11:00
Pirate Praveen
a1d1df8c4d New upstream version 13.5.7 2021-01-18 16:13:48 +05:30
Dmitry Smirnov
fe2cd4c979 copyright: corrected syntax to pass "cme check dpkg-copyright". 2021-01-15 01:03:11 +11:00
Pirate Praveen
041695fe74 New upstream version 13.5.6 2021-01-08 16:13:35 +05:30
Pirate Praveen
bdd3986cba Add node_modules as first path to resolve in webpack.config.js 2021-01-04 20:35:13 +05:30
Pirate Praveen
30798b500b New upstream version 13.5.5 2021-01-03 14:25:43 +05:30
Pirate Praveen
0206859040 Use link protocol only in case of permission errors 2020-12-24 20:32:23 +05:30
Pirate Praveen
3945471fc8 Use link: and portal: protocols in package.json for packaged modules 2020-12-23 00:38:36 +05:30
Pirate Praveen
0b96d9e2bc Refactor to make node_modules and package.json write-able 2020-12-21 20:48:56 +05:30
Pirate Praveen
43df5d0233 Switch to yarn 2.x with node-modules plugin 2020-12-21 03:16:23 +05:30
Pirate Praveen
87d79396df Use node-css-loader 5.x and node-postcss 8.x 2020-12-21 03:15:39 +05:30
Pirate Praveen
4e710148d8 Upload to unstable 2020-12-17 16:16:37 +05:30
Pirate Praveen
49d40037b4 Tighten dependency on node-autosize for bug fix 2020-12-14 17:51:31 +05:30
Pirate Praveen
79a45d57de Use packaged font-awesome node module 2020-12-14 00:21:42 +05:30
Pirate Praveen
9abef1b71a Use packaged version of webpack-stats-plugin 2020-12-12 23:53:18 +05:30
Pirate Praveen
fcd4be54e3 Use packaged version of js-yaml node module 2020-12-11 16:49:44 +05:30
Pirate Praveen
16fd3660ec Use packaged version of minimatch node module 2020-12-11 16:06:01 +05:30
Pirate Praveen
dd8f94c6bf Use packaged version of katex node module 2020-12-11 15:51:21 +05:30
Pirate Praveen
53dc81de58 Use packaged version of mermaid node module 2020-12-11 02:57:36 +05:30
Pirate Praveen
222dfe0deb Use packaged version of uuid node module 2020-12-11 01:42:18 +05:30
Sruthi Chandran
f28d3cb20b Add canvas as externals in webpack.config.js 2020-12-09 23:15:18 +05:30
Pirate Praveen
4a8c79befd
Upload to unstable 2020-12-08 16:59:22 +05:30
Pirate Praveen
92c41d0a87
Drop dependency on ruby-grpc (now handled by gem install) 2020-12-08 16:59:20 +05:30
Pirate Praveen
6bb9cd71a9 Update upstream source from tag 'upstream/13.4.7'
Update to upstream version '13.4.7'
with Debian dir 290c51568c
2020-12-08 15:32:39 +05:30
Pirate Praveen
03a7b5db89 New upstream version 13.4.7 2020-12-08 15:28:05 +05:30
Pirate Praveen
68734dc350
Update uuid to ^8.3.1 in package.json 2020-12-07 23:46:22 +05:30
Pirate Praveen
5b84b1f2f7
Install grpc using gem command (ruby-grpc package has an unfixed regression) 2020-12-07 23:46:21 +05:30
Pirate Praveen
649ae0b4e6
Remove schema-utils 3.0 from package.json (incompatibilities resolved) 2020-12-07 17:52:42 +05:30
Pirate Praveen
6a8dc1efe9
Use packaged version of pdfjs-dist and adapt for worker-loader 3 api 2020-12-07 01:51:00 +05:30
Sruthi Chandran
b9bf4c6f03 Upload to unstable 2020-12-06 22:54:21 +05:30
Pirate Praveen
e50d3c2428
Update changelog 2020-12-06 17:27:36 +05:30
Pirate Praveen
c63789a24b
Add schema-utils 3.0, mkdirp 1.0 and loader-utils 2.0 to package.json
to ensure compatibility with packaged modules (See #976310)
2020-12-06 17:23:43 +05:30
Pirate Praveen
9b82a72575
Use packaged version of copy-webpack-plugin 2020-12-06 15:37:20 +05:30
Pirate Praveen
112f239cc2
Use packaged version of style-loader 2020-12-06 00:42:19 +05:30
Pirate Praveen
3762ce7927
Use packaged version of file-loader 2020-12-05 22:49:45 +05:30
Pirate Praveen
b00a598b4a
Use packaged version of node-raw-loader 2020-12-05 20:51:16 +05:30
Pirate Praveen
3a87c3cd40
Use packaged version of node-css-loader 2020-12-05 20:49:43 +05:30
Sruthi Chandran
36e3dabe46 Update changelog 2020-12-03 14:48:28 +05:30
Sruthi Chandran
47c982349b Set minimum version for google-protobuf 2020-12-03 14:48:20 +05:30
Sruthi Chandran
aacc6aff43 Set minimum version for grpc 2020-12-03 00:45:29 +05:30
Sruthi Chandran
94d94ca391 Upload to unstable 2020-12-02 23:45:50 +05:30
Sruthi Chandran
a6379ea974 Upload to experimental 2020-11-27 02:29:25 +05:30
Sruthi Chandran
e81d35de62 Add new link for .gitlab_kas_secret 2020-11-27 02:24:20 +05:30
Sruthi Chandran
3708ec6724 Update deps 2020-11-27 02:23:32 +05:30
Sruthi Chandran
8019570c78 Update new and removed files 2020-11-27 02:20:53 +05:30
Sruthi Chandran
785641d6a9 Refresh patches 2020-11-27 02:20:53 +05:30
Sruthi Chandran
b2b023cf11 Remove patches not required 2020-11-24 16:41:16 +05:30
Pirate Praveen
fb4a3edd3d
Bump Standards-Version to 4.5.1 (no changes needed) 2020-11-24 09:53:54 +00:00
Pirate Praveen
366d0ee64f
Update changelog 2020-11-24 15:23:03 +05:30
Pirate Praveen
1a28b41c02 Update upstream source from tag 'upstream/13.4.6'
Update to upstream version '13.4.6'
with Debian dir 29871e4f73
2020-11-24 15:20:35 +05:30
Pirate Praveen
a557ad5f5f New upstream version 13.4.6 2020-11-24 15:15:51 +05:30
Pirate Praveen
13e4655d38 Run only a single test for now 2020-11-22 10:38:29 +00:00
Pirate Praveen
c7042f454c Run tests again and grant required database privilleges 2020-11-22 10:37:35 +00:00
Pirate Praveen
c5dab90c1d Add more autopkgtest dependencies 2020-11-22 10:34:14 +00:00
Pirate Praveen
5182dad647 Update patches to adjust more autopkgtest dependencies in Gemfile 2020-11-22 10:33:37 +00:00
Pirate Praveen
2620c5d9ee Add more autopkgtest dependencies 2020-11-19 10:55:28 +00:00
Pirate Praveen
b9c8ff8132 Relax more test dependencies 2020-11-19 10:55:28 +00:00
Pirate Praveen
8ba09e0eca
Update minimum version of ruby-redis-namespace to 1.7 2020-11-07 16:21:30 +05:30
Pirate Praveen
0c17662c38
Update minimum version of gitaly 2020-11-07 15:35:17 +05:30
Pirate Praveen
480c32fefa
Add fixed CVEs in changelog 2020-11-07 15:28:29 +05:30
Abraham Raji
d157e5907e Upload to Unstable 2020-11-05 12:28:31 +05:30
Abraham Raji
f1fdd2f3bc Update upstream source from tag 'upstream/13.3.9'
Update to upstream version '13.3.9'
with Debian dir 25a29baf38
2020-11-05 12:13:27 +05:30
Abraham Raji
01760414a6 New upstream version 13.3.9 2020-11-05 12:06:23 +05:30
Pirate Praveen
049080c254 Comment out png_quantizator dependency in Gemfile 2020-10-31 19:27:52 +00:00
Pirate Praveen
95c14a45b5 Add new autopkgtest dependencies 2020-10-31 19:27:51 +00:00
Pirate Praveen
98494e29e0 Relax dependency on bullet rubygem in Gemfile 2020-10-31 11:05:48 +00:00
Pirate Praveen
ec99b221c6
Upload to unstable 2020-10-28 21:02:58 +05:30
Pirate Praveen
123c8172fc
Tighten dependency on gitlab-shell and gitaly 2020-10-28 21:02:13 +05:30
Pirate Praveen
d73cf3936e
Switch back to using css-loader module from npmjs.com 2020-10-28 16:14:34 +05:30
Pirate Praveen
5443516750
Update changelog 2020-10-25 23:11:09 +05:30
Pirate Praveen
5e8055944a
Create btree_gist extension in postgres database 2020-10-25 23:10:15 +05:30
Pirate Praveen
735863d103
Tighten versions of dependencies 2020-10-25 23:09:29 +05:30
Pirate Praveen
55e0fe2d9c
Install new directory data 2020-10-25 00:47:43 +05:30
Pirate Praveen
57b415a5ed
Refresh patches 2020-10-25 00:47:17 +05:30
Pirate Praveen
1d029133f1 Update upstream source from tag 'upstream/13.3.8'
Update to upstream version '13.3.8'
with Debian dir 107bf6cd3e
2020-10-25 00:02:11 +05:30
Pirate Praveen
c7883f9ba0 New upstream version 13.3.8 2020-10-24 23:57:45 +05:30
Pirate Praveen
7166c1fe5a
Add fixed CVEs in changelog 2020-10-11 22:05:12 +05:30
Abraham Raji
86f390906a
Upload to Unstable 2020-10-04 04:20:01 +05:30
Abraham Raji
6461b4967b Update upstream source from tag 'upstream/13.2.10'
Update to upstream version '13.2.10'
with Debian dir 47156ba980
2020-10-03 22:31:15 +00:00
Abraham Raji
529b513274 New upstream version 13.2.10 2020-10-03 22:27:07 +00:00
Pirate Praveen
8b1cce8f6e Upload to unstable 2020-09-06 14:41:30 +05:30
Pirate Praveen
61e9debdfc Use packaged versions of prosemirror-markdown and timeago.js node modules 2020-09-06 14:41:30 +05:30
Cédric Boutillier
ce52c5454e [ci skip] Add .gitattributes to keep unwanted files out of the source package 2020-09-03 20:04:57 +00:00
Pirate Praveen
09c5818416 Update minimum version of ruby-websocket-extensions 2020-09-03 14:48:12 +05:30
Pirate Praveen
9c09ef5fa1 Upload to unstable 2020-09-03 12:19:45 +05:30
Pirate Praveen
0c03e108fa Remove faraday-middleware-aws-signers-v4 from upstream-file-list 2020-09-03 12:19:45 +05:30
Pirate Praveen
4cc517f352 Update minimum version of node-jquery to 3.5 2020-09-03 12:19:45 +05:30
Pirate Praveen
440b22b2eb Refresh patches 2020-09-03 12:19:45 +05:30
Pirate Praveen
0c019fe1e6 New upstream version 13.2.8 2020-09-03 12:19:45 +05:30
Pirate Praveen
86a86a9f9b Drop faraday-middleware-aws-signers-v4 from components list 2020-09-03 12:19:44 +05:30
Pirate Praveen
d0904892e8 New upstream version 13.2.8 2020-09-03 11:15:55 +05:30
Cédric Boutillier
22ad87f3bd [ci skip] Update team name 2020-09-01 13:30:07 +00:00
Pirate Praveen
1419178527 Upload to unstable 2020-08-21 00:52:42 +05:30
Pirate Praveen
68b2dd3dc0 Remove gitlab-unicorn.service and install gitlab-puma.service 2020-08-21 00:52:42 +05:30
Pirate Praveen
956a715cff Add puma.rb and use it from gitlab-puma.service 2020-08-21 00:50:33 +05:30
Pirate Praveen
c196da8e5f Remove unicorn from Gemfile and choose puma 2020-08-21 00:15:34 +05:30
Pirate Praveen
1602088de6 Add gitlab-puma.service as dependency of gitlab.service 2020-08-21 00:15:34 +05:30
Karthik
40295f4802 add puma dependency to debian/control, add puma systemd service, update gitlab service with puma 2020-08-20 19:35:27 +05:30
Pirate Praveen
5b711cebeb Upload to unstable 2020-08-20 17:51:36 +05:30
Pirate Praveen
ee25de4c33 Drop phantomjs from autopkgtest dependencies, add needs-internet restriction 2020-08-20 17:51:36 +05:30
Pirate Praveen
e397d61429 Switch to aws-sdk v3 with upstream patch 2020-08-20 17:31:46 +05:30
Pirate Praveen
1811005b7d Upload to unstable 2020-08-19 03:02:08 +05:30
Pirate Praveen
aa8127b610 Update upstream source from tag 'upstream/13.2.6'
Update to upstream version '13.2.6'
with Debian dir 6ac5a1fda4
2020-08-19 03:01:27 +05:30
Pirate Praveen
52fc698a56 New upstream version 13.2.6 2020-08-19 02:56:42 +05:30
Pirate Praveen
3faba10c9b Upload to unstable 2020-08-18 20:17:55 +05:30
Pirate Praveen
adec0870be Relax dependency on ruby-browser 2020-08-18 20:17:14 +05:30
Pirate Praveen
c6d931219a Refresh patches 2020-08-18 20:15:12 +05:30
Pirate Praveen
052bee989a Update upstream source from tag 'upstream/13.2.5'
Update to upstream version '13.2.5'
with Debian dir 38613aeee9
2020-08-18 19:55:19 +05:30
Pirate Praveen
17d8b8b016 New upstream version 13.2.5 2020-08-18 19:51:02 +05:30
Pirate Praveen
46c263f6d0 Bump minimum version of webpack to 4.43 2020-08-15 18:36:08 +05:30
Pirate Praveen
dd409e762a Reupload to unstable 2020-08-11 19:51:51 +05:30
Pirate Praveen
ed25957479 Relax dependency on sidekiq gem in Gemfile to allow 6.x version 2020-08-11 19:45:39 +05:30
Pirate Praveen
05384b004b Relax dependency on ruby-gitlab-sidekiq-fetcher 2020-08-11 19:45:39 +05:30
Abraham Raji
834a4b05cd Update copyright license names 2020-08-11 13:41:56 +00:00
Abraham Raji
25a8246c66 Update copyright license names 2020-08-11 13:22:13 +00:00
Abraham Raji
61378937c8 Added Attribution 4.0 International (CC BY 4.0) 2020-08-11 13:14:12 +00:00
Abraham Raji
3de9ecc79f Added SIL Open Font License 2020-08-11 12:59:09 +00:00
Abraham Raji
1bb206ff8d Added Font Awesome Free License 2020-08-11 12:47:23 +00:00
Abraham Raji
1946da8153 Added copyright notices for spring Template 2020-08-11 12:35:02 +00:00
Abraham Raji
679d8f7388 Added copyright notices for nfhugo Template 2020-08-11 12:01:43 +00:00
Abraham Raji
13921c34c4 Added copyright notices for nfhexo Template 2020-08-11 11:52:16 +00:00
Abraham Raji
b6d27d6260 Added copyright notices for Hexo Template 2020-08-11 11:48:29 +00:00
Abraham Raji
1cce217602 Added copyright notice for Gatsby Template 2020-08-11 07:47:48 +00:00
Abraham Raji
3e898d927a Added copyright notices for Hexo Template 2020-08-11 07:30:24 +00:00
Abraham Raji
4008f28cda Added copyright notices for Hugo Template 2020-08-11 06:24:43 +00:00
Pirate Praveen
8aac399057 Tighten dependency on ruby-gitaly and ruby-acme-client 2020-08-11 01:25:43 +05:30
Pirate Praveen
fb2c1694e4 Upload to experimental 2020-08-09 22:54:33 +05:30
Pirate Praveen
25a80afd1c Update changelog 2020-08-09 19:09:31 +05:30
Pirate Praveen
a3abb79dc6 Update upstream source from tag 'upstream/13.2.3'
Update to upstream version '13.2.3'
with Debian dir 0600a237b1
2020-08-09 18:57:19 +05:30
Pirate Praveen
4260d77892 New upstream version 13.2.3 2020-08-09 18:53:13 +05:30
Pirate Praveen
029fca15f4 New upstream version 13.2.1 2020-08-09 17:44:08 +05:30
Pirate Praveen
2042d04fcb Allow gitlab user to create schema 2020-08-09 17:42:36 +05:30
Pirate Praveen
f63a04369f Update changelog 2020-08-09 17:42:36 +05:30
Pirate Praveen
198aecd858 Remove files no longer shipped by upstream from install 2020-08-09 17:41:57 +05:30
Pirate Praveen
d3cb5b11de Tighten dependencies 2020-08-09 17:41:57 +05:30
Pirate Praveen
47d16f1c2d Refresh patches 2020-08-09 17:41:57 +05:30
Pirate Praveen
9c63f7bcc8 New upstream version 13.2.1 2020-08-09 17:41:57 +05:30
Pirate Praveen
036e5a5f03 Upload to experimental 2020-08-09 01:32:05 +05:30
Pirate Praveen
cd599381b8 Update upstream source from tag 'upstream/13.1.6'
Update to upstream version '13.1.6'
with Debian dir 48da139e2c
2020-08-09 01:28:15 +05:30
Pirate Praveen
f7a89b7334 New upstream version 13.1.6 2020-08-09 01:23:26 +05:30
Pirate Praveen
48bb63180b Fix path tmp/backup to tmp/backups in previous commit 2020-07-16 21:09:24 +05:30
Pirate Praveen
361bdbb4b2 Move tmp/backup outside /run via symbolic link 2020-07-16 20:55:20 +05:30
Pirate Praveen
0c236aef7c Upload to experimental 2020-07-16 17:36:05 +05:30
Pirate Praveen
0a1bff920a Fix permissions for ${gitlab_data_dir}/shared/artifacts/tmp/* 2020-07-16 17:36:05 +05:30
Pirate Praveen
c7eaf98957 Remove obsolete initializer: rack_attack_new.rb 2020-07-16 17:21:49 +05:30
Pirate Praveen
39d4f542f3 Drop ruby 2.5 compat patches, we have ruby 2.7 in fasttrack now 2020-07-14 13:19:46 +05:30
Pirate Praveen
731a844332 Update minimum version of ruby to 2.7 2020-07-11 22:06:46 +05:30
Pirate Praveen
c26db89090 Upload to experimental 2020-07-10 23:50:26 +05:30
Pirate Praveen
f63ed07031 Update upstream source from tag 'upstream/13.1.4'
Update to upstream version '13.1.4'
with Debian dir cdde1738b8
2020-07-10 23:48:49 +05:30
Pirate Praveen
b8c1f2cd92 New upstream version 13.1.4 2020-07-10 23:44:40 +05:30
Pirate Praveen
998aa7b49c Tighten dependencies for ruby 2.7 support 2020-07-10 23:20:04 +05:30
Pirate Praveen
80a083b0e2 Upload to experimental 2020-07-09 12:57:01 +05:30
Pirate Praveen
387c3be4e5 New upstream version 13.1.3 2020-07-09 12:57:00 +05:30
Pirate Praveen
ff5ea591ca New upstream version 13.1.3 2020-07-09 12:48:47 +05:30
Pirate Praveen
8971fcc4b6 Use packaged version of codemirror 2020-07-03 14:39:25 +05:30
Pirate Praveen
039bc183d9 Update changelog 2020-07-02 21:51:34 +05:30
Pirate Praveen
4e452e009e Use packaged versions of d3 and d3-sankey node modules 2020-07-02 21:28:01 +05:30
Pirate Praveen
75843f6e51 Add command for checking syntax of modified files 2020-07-02 15:23:41 +05:30
Pirate Praveen
8dfcbfef9e Update upstream-file-list 2020-07-02 15:23:18 +05:30
Pirate Praveen
3331c8051f Refresh patches 2020-07-02 14:25:08 +05:30
Pirate Praveen
92f46e4aad Add a script to run syntax check on all files 2020-07-02 02:18:45 +05:30
Pirate Praveen
2e1107c47d Upload to experimental 2020-07-02 02:17:08 +05:30
Pirate Praveen
9d7949c2bb Update minimum version of ruby-kaminari to 1.2.1 2020-07-02 02:17:08 +05:30
Pirate Praveen
3dfe0174e1 Refresh patches 2020-07-02 01:55:08 +05:30
Pirate Praveen
f2ef523b6c Update upstream source from tag 'upstream/13.1.2'
Update to upstream version '13.1.2'
with Debian dir 9d8afabfc8
2020-07-02 01:49:44 +05:30
Pirate Praveen
345e8d04e1 New upstream version 13.1.2 2020-07-02 01:45:43 +05:30
Pirate Praveen
63c700cdf4 Upload to experimental 2020-07-01 17:11:23 +05:30
Pirate Praveen
ea93cba9ae Refresh patches 2020-07-01 17:11:23 +05:30
Pirate Praveen
5899de818a Update minimum version of ruby-mail-room 2020-07-01 17:09:01 +05:30
Pirate Praveen
3095c928ef Update upstream source from tag 'upstream/13.1.1'
Update to upstream version '13.1.1'
with Debian dir f04f531534
2020-07-01 16:12:27 +05:30
Pirate Praveen
9028ee3161 New upstream version 13.1.1 2020-07-01 16:08:20 +05:30
Pirate Praveen
c0ac72472c Use packaged version of node-glob 2020-07-01 16:06:17 +05:30
Pirate Praveen
272c1cb9d1 Use packaged versions: node-brace-expansion and node-cache-loader 2020-07-01 15:44:16 +05:30
Pirate Praveen
2b81774ab4 Add patch to fix ruby 2.5 compatibility issue 2020-06-30 17:45:29 +05:30
Pirate Praveen
1caf9bb2d1 Update minimum version of ruby-oauth2 to 1.4.4 2020-06-30 01:51:21 +05:30
Pirate Praveen
cd669944da Use packaged version of node-compression-webpack-plugin 2020-06-29 19:58:58 +05:30
Pirate Praveen
17611c86a3 Upload to experimental 2020-06-29 16:38:26 +05:30
Pirate Praveen
fa5f0e7560 Switch to using structure.sql from schema.rb for database initialization 2020-06-29 16:38:26 +05:30
Pirate Praveen
fde38bf386 Include changelog entries from master-13.0 branch 2020-06-29 16:08:42 +05:30
Pirate Praveen
0b481ea17d Update dependencies on ruby-faraday, ruby-sentry-raven and ruby-grape-entity 2020-06-25 00:25:06 +05:30
Pirate Praveen
9944b2a412 Tighten dependencies 2020-06-24 00:08:05 +05:30
Pirate Praveen
47f77a302b Add rack-timeout gem to Gemfile 2020-06-24 00:07:28 +05:30
Pirate Praveen
2305c4714c Relax dependency on faraday gem 2020-06-24 00:07:00 +05:30
Pirate Praveen
7e01fb8c99 Update changelog 2020-06-23 00:50:14 +05:30
Pirate Praveen
7e28affa35 Update debian/upstream-file-list for new release 2020-06-23 00:48:59 +05:30
Pirate Praveen
883b38ed1d Refresh patches 2020-06-23 00:43:41 +05:30
Pirate Praveen
6864290656 Update upstream source from tag 'upstream/13.1.0'
Update to upstream version '13.1.0'
with Debian dir 63dec219e8
2020-06-23 00:14:05 +05:30
Pirate Praveen
6158a767e6 New upstream version 13.1.0 2020-06-23 00:09:42 +05:30
Pirate Praveen
91ab30850b Drop dependency on ruby-liquid and ruby-influxdb 2020-06-20 01:02:18 +05:30
Pirate Praveen
74190f631b Update minimum version of webpack to 4.30~ 2020-06-13 01:24:17 +05:30
Pirate Praveen
4254efa908 Upload to experimental 2020-06-11 17:02:17 +05:30
Pirate Praveen
d6be420864 Update upstream source from tag 'upstream/13.0.6'
Update to upstream version '13.0.6'
with Debian dir 03baeccf9b
2020-06-11 16:49:20 +05:30
Pirate Praveen
5f558ee76f New upstream version 13.0.6 2020-06-11 16:45:22 +05:30
Pirate Praveen
b61133ee6f Upload to experimental 2020-06-04 15:39:19 +05:30
Pirate Praveen
4e5a3c2e9b Update upstream source from tag 'upstream/13.0.4'
Update to upstream version '13.0.4'
with Debian dir 5842ec48df
2020-06-04 15:14:34 +05:30
Pirate Praveen
d64065cf55 New upstream version 13.0.4 2020-06-04 15:10:26 +05:30
Pirate Praveen
3f232b0728 Update minimum version for rm_conffile to include 12.10.7 2020-05-31 21:29:50 +05:30
Pirate Praveen
25c3c7be86 Tighten dependency on ruby-gitaly and yarnpkg 2020-05-31 21:28:35 +05:30
Pirate Praveen
632f30fe6f Add link to issue about missing rack-timeout 2020-05-31 01:29:12 +05:30
Pirate Praveen
74037ab738 Upload to experimental 2020-05-30 21:16:03 +05:30
Pirate Praveen
4e34de6884 Refresh patch 2020-05-30 21:16:03 +05:30
Pirate Praveen
bcb984ad78 Update upstream source from tag 'upstream/13.0.3'
Update to upstream version '13.0.3'
with Debian dir 0f488c0558
2020-05-30 21:10:39 +05:30
Pirate Praveen
5736b18dda New upstream version 13.0.3 2020-05-30 21:06:31 +05:30
Pirate Praveen
4f1cbbb6ef Update changelog 2020-05-30 21:05:12 +05:30
Pirate Praveen
4e50c73fe8 Tighten minimum version of gitaly 2020-05-30 20:56:41 +05:30
Pirate Praveen
4c6805ace2 Use packaged version of node-vue-template-compiler 2020-05-30 20:56:41 +05:30
Pirate Praveen
36c4da153f Upload to experimental 2020-05-30 20:56:41 +05:30
Pirate Praveen
eee8c8c885 Update minimum version of grape to 1.3.3 2020-05-30 20:02:36 +05:30
Pirate Praveen
b3a4056897 Update patch to update grape dependency (from upstream repo) 2020-05-30 20:02:36 +05:30
Pirate Praveen
e28ade6223 Update changelog 2020-05-25 16:23:42 +05:30
Pirate Praveen
238b7ff9c4 Remove obsolete initializer from /etc/gitlab 2020-05-25 16:23:42 +05:30
Pirate Praveen
6cd286d859 Add (ruby-)rack-timeout to Gemfile and Depends 2020-05-25 16:23:42 +05:30
Pirate Praveen
5989e83688 Handle newly added files in this release 2020-05-25 16:23:42 +05:30
Pirate Praveen
b823a15e93 Refresh patches 2020-05-25 16:23:42 +05:30
Pirate Praveen
df79fe94f4 New upstream version 13.0.0 2020-05-25 16:23:42 +05:30
Pirate Praveen
44f8ec8b25 New upstream version 13.0.0 2020-05-24 23:13:21 +05:30
Dmitry Smirnov
1a1fbfab4f minor copyright correction 2020-05-20 18:37:42 +10:00
Pirate Praveen
e75be1633d Upload to experimental 2020-05-18 16:35:47 +05:30
Pirate Praveen
674729f1cf Update css-loader options in config/webpack.config.js 2020-05-18 16:35:07 +05:30
Pirate Praveen
7001dd292f Upload to experimental 2020-05-16 16:00:30 +05:30
Pirate Praveen
0f12e77197 Update dependency on node-css-loader to 2.1.1 2020-05-16 16:00:30 +05:30
Pirate Praveen
e0218ee61f Upload to experimental 2020-05-09 16:29:11 +05:30
Pirate Praveen
c0b6e4bab2 Update minimum version of ruby-faraday 2020-05-09 16:27:14 +05:30
Pirate Praveen
db168f6b65 Use packaged version of vue node module 2020-05-07 21:37:47 +05:30
Pirate Praveen
2c8e51bcbc Update changelog 2020-05-05 14:58:55 +05:30
Pirate Praveen
eec7436b59 Update upstream source from tag 'upstream/12.10.3'
Update to upstream version '12.10.3'
with Debian dir 4764e135ca
2020-05-05 14:31:44 +05:30
Pirate Praveen
87b5168698 New upstream version 12.10.3 2020-05-05 14:28:15 +05:30
Pirate Praveen
8e489d1485 Upload to experimental 2020-05-04 07:00:24 +05:30
Pirate Praveen
d2fb3946a2 Refresh patches 2020-05-04 06:59:50 +05:30
Pirate Praveen
fc2622f376 Relax dependency on net-ssh gem to allow new major version 2020-05-04 06:58:41 +05:30
Pirate Praveen
0604d3516d Use packaged version of node-babel-loader 2020-05-03 16:10:17 +05:30
Pirate Praveen
e48c3747e9 Upload to experimental 2020-05-01 12:50:09 +05:30
Pirate Praveen
0babc585f0 Update minimum version of ruby-nokogiri to 1.10.9 2020-05-01 12:42:47 +05:30
Pirate Praveen
7fe0eb7332 Update upstream source from tag 'upstream/12.10.2'
Update to upstream version '12.10.2'
with Debian dir 349a9d99df
2020-05-01 12:38:38 +05:30
Pirate Praveen
d76068268a New upstream version 12.10.2 2020-05-01 12:34:13 +05:30
Pirate Praveen
3dafb02b66 Fix debian/watch for new gitlab.com tags page change 2020-05-01 12:12:14 +05:30
Pirate Praveen
ae1bd4aba3 Upload to experimental 2020-04-25 11:02:39 +05:30
Pirate Praveen
6e3fc06352 Update upstream source from tag 'upstream/12.10.1'
Update to upstream version '12.10.1'
with Debian dir 41f6404ff8
2020-04-25 11:01:32 +05:30
Pirate Praveen
33be1af3d8 New upstream version 12.10.1 2020-04-25 10:58:03 +05:30
Pirate Praveen
42703f4431 Use packaged version of babel node module 2020-04-25 00:15:18 +05:30
Pirate Praveen
fd9705e969 Add graphql-tag node module to package.json 2020-04-23 00:22:18 +05:30
Pirate Praveen
43b4c567b2 Upload to experimental 2020-04-22 23:52:33 +05:30
Pirate Praveen
1a208ccf6a Relax dependency on gitaly ruby gem in Gemfile 2020-04-22 23:50:14 +05:30
Pirate Praveen
5be0d7896b Remove initializer not needed (we have the required rails version) 2020-04-22 23:49:16 +05:30
Pirate Praveen
52bb51e5bf Tighten dependency on gitaly 2020-04-22 23:48:48 +05:30
Pirate Praveen
579d544110 Make db/structure.sql writable by gitlab user 2020-04-22 23:48:22 +05:30
Pirate Praveen
c3aeb112bd Update lintian overrides 2020-04-22 20:31:21 +05:30
Pirate Praveen
5b9f267876 Fix typo in dependency name
ruby-derailed_benchmarks -> ruby-derailed-benchmarks
2020-04-22 20:24:32 +05:30
Pirate Praveen
c4d9fa7d9e Tighten dependencies 2020-04-22 20:13:14 +05:30
Pirate Praveen
f4606b16c9 Update upstream file list 2020-04-22 20:12:45 +05:30
Pirate Praveen
80dec2332a Update gitlab.install (remove files not present) 2020-04-22 20:02:15 +05:30
Pirate Praveen
67a60267e7 Refresh patches 2020-04-22 19:44:27 +05:30
Pirate Praveen
0fb65a92ab Update upstream source from tag 'upstream/12.10.0'
Update to upstream version '12.10.0'
with Debian dir 47b9c7634b
2020-04-22 19:11:39 +05:30
Pirate Praveen
d85b82979f New upstream version 12.10.0 2020-04-22 19:07:51 +05:30
Pirate Praveen
6d5be2487f Stop excluding non-dfsg files (removed upstream) 2020-04-22 18:50:59 +05:30
Pirate Praveen
a56e333970 Drop embedded copy of derailed_benchmarks and use packaged version 2020-04-20 00:47:41 +05:30
Pirate Praveen
2189cbc0d5 Upload to experimental 2020-04-15 19:37:52 +05:30
Pirate Praveen
6b0cba4791 Tighten dependency on gitaly 2020-04-15 19:37:51 +05:30
Pirate Praveen
fef46eb7e7 Refresh patches 2020-04-15 14:48:40 +05:30
Pirate Praveen
6ab12f82bb Update upstream source from tag 'upstream/12.9.3+dfsg'
Update to upstream version '12.9.3+dfsg'
with Debian dir dd85ac5b03
2020-04-15 14:46:27 +05:30
Pirate Praveen
ffa609a58f New upstream version 12.9.3+dfsg 2020-04-15 14:45:12 +05:30
Pirate Praveen
7f53325c79 Upload to experimental 2020-04-13 15:23:52 +05:30
Pirate Praveen
b7805d56ca Add copyrigt for snowplow-javascript-tracker 2020-04-13 15:19:12 +05:30
Pirate Praveen
3044a0a626 Update lintian override for missing source for sp.js 2020-04-13 15:15:22 +05:30
Pirate Praveen
20133602fd Update upstream file list for new component 2020-04-13 15:06:00 +05:30
Pirate Praveen
8142c89133 Update upstream source from tag 'upstream/12.9.2+dfsg'
Update to upstream version '12.9.2+dfsg'
with Debian dir 634d9ac166
2020-04-13 14:07:46 +05:30
Pirate Praveen
c5badf79b1 New upstream version 12.9.2+dfsg 2020-04-13 14:06:41 +05:30
Pirate Praveen
e34e73a42a Add snowplow-javascript-tracker as component 2020-04-13 14:06:13 +05:30
Pirate Praveen
07da1765d7 Update upstream source from tag 'upstream/12.9.2+dfsg'
Update to upstream version '12.9.2+dfsg'
with Debian dir 659c7859ce
2020-04-13 14:03:24 +05:30
Pirate Praveen
b0a17338f5 New upstream version 12.9.2+dfsg 2020-04-13 14:02:19 +05:30
Pirate Praveen
96205d3782 Add comments to all patches 2020-04-13 13:49:04 +05:30
Pirate Praveen
f68f06a658 Update upstream source from tag 'upstream/12.9.2+dfsg'
Update to upstream version '12.9.2+dfsg'
with Debian dir 379508db4f
2020-04-13 13:29:51 +05:30
Pirate Praveen
c63b8a6ca9 New upstream version 12.9.2+dfsg 2020-04-13 13:28:44 +05:30
Pirate Praveen
b79255c7c9 Exclude one_password binaries and embed snowplow-javascript-tracker 2020-04-13 13:26:22 +05:30
Pirate Praveen
9fc8874428 Upload to experimental 2020-04-12 21:19:30 +05:30
Pirate Praveen
8ccba90157 Update copyright file with missing attributions 2020-04-12 21:19:30 +05:30
Pirate Praveen
00272311f0 Update lintian overrides 2020-04-12 19:46:08 +05:30
Pirate Praveen
a24a856a6c Move source package also to contrib as gitlab-common is moved to src:gitaly 2020-04-12 19:27:12 +05:30
Pirate Praveen
fbcb173b0c Upload to experimental 2020-04-12 18:19:10 +05:30
Pirate Praveen
f9e0ea3581 Drop work around for missing assets/select2.png (not required in
NODE_ENV=production mode for webpack)
2020-04-12 18:19:10 +05:30
Pirate Praveen
febdb44177 Drop gitlab-common binary (moved to src:gitaly) 2020-04-12 17:52:09 +05:30
Praveen Arimbrathodiyil
32d5daa771 Merge branch 'webpack-switch-to-production' into 'master'
Build assets generated by webpack in production mode

See merge request ruby-team/gitlab!5
2020-04-12 12:21:47 +00:00
vv221
9d95c466b0 Build assets generated by webpack in production mode
Fix https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=956508
Fix https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927297
2020-04-12 10:16:22 +02:00
Pirate Praveen
5a0901da96 Upload to experimental 2020-04-11 19:54:41 +05:30
Pirate Praveen
f2c54b1123 Exclude packaged modules from transpiling (webpack/babel-loader) 2020-04-11 19:53:21 +05:30
Pirate Praveen
63298a3ec1 Remove --max-old-path option to webpack (correctly passed in NODE_OPTIONS) 2020-04-11 19:53:13 +05:30
Pirate Praveen
c94e43b910 Upload to experimental 2020-04-11 16:37:21 +05:30
Pirate Praveen
dec3e625ab Tighten dependency on gitlab-common 2020-04-11 16:36:48 +05:30
Pirate Praveen
46a6010195 Upload to experimental 2020-04-11 01:30:12 +05:30
Pirate Praveen
1e3087460f Pass NODE_OPTIONS="--max-old-space-size=2048" to webpack to work with nodejs 10 2020-04-11 00:46:45 +05:30
Pirate Praveen
05542edbb8 Tighten dependency on ruby-graphql (for backports) 2020-04-10 22:19:59 +05:30
Pirate Praveen
9c7431dd64 Upload to experimental 2020-04-10 09:26:00 +05:30
Pirate Praveen
e2104d2833 Override json evil license lintian error (listed as an example license) 2020-04-10 09:19:27 +05:30
Pirate Praveen
0d4ba35fa5 Upload to experimental 2020-04-09 18:50:36 +05:30
Pirate Praveen
7d7a86b690 Add special handling for webpack to find .json file 2020-04-09 18:43:07 +05:30
Pirate Praveen
4d670bbf2d Update minimum version of nodejs to 12 (See #956211) 2020-04-08 19:42:40 +05:30
Pirate Praveen
e8fdc94ca8 Remove dependencies: node-cache-loader, node-raw-loader, node-file-loader 2020-04-08 19:24:18 +05:30
Pirate Praveen
37b291790a Update node-* dependencies 2020-04-08 19:07:08 +05:30
Pirate Praveen
8c3ba002ea Tighten dependencies: gitlab-shell, gitlab-workhorse 2020-04-08 19:07:08 +05:30
Pirate Praveen
cc5a5f1738 Tighten dependencies: ruby-mail-room, ruby-gitaly, gitaly 2020-04-08 19:07:08 +05:30
Pirate Praveen
f1b9898e30 Tighten dependencies: ruby-rouge, ruby-diffy, ruby-gitlab-labkit 2020-04-08 19:07:08 +05:30
Pirate Praveen
b799f37c93 Change dependency: ruby-slack-notifier -> ruby-slack-messenger 2020-04-08 19:07:08 +05:30
Pirate Praveen
9f33f574b8 Update changelog 2020-04-08 19:07:08 +05:30
Pirate Praveen
06cac047f9 Install files newly added in new upstream release 2020-04-08 19:07:08 +05:30
Pirate Praveen
dc7a5d4b4a Refresh patches 2020-04-08 19:07:08 +05:30
Pirate Praveen
29999ff085 Switch ruby-parser to ruby-ruby-parser 2020-04-08 18:37:08 +05:30
Pirate Praveen
2bfe7510f4 New upstream version 12.9.2 2020-04-08 18:37:08 +05:30
Pirate Praveen
317deac8b5 New upstream version 12.9.2 2020-04-08 14:13:33 +05:30
Pirate Praveen
6df336dc67 Switch to gitlab's fork of derailed_benchmarks gem 2020-04-08 14:10:57 +05:30
Pirate Praveen
886ef337c4 Upload to experimental 2020-04-04 16:11:59 +05:30
Pirate Praveen
45ce97f7af Remove obsolete initializer: active_record_becomes.rb 2020-04-04 16:10:51 +05:30
Pirate Praveen
d44588583f Drop dependency on libjs-pdf (not needed anymore) 2020-04-03 20:00:59 +05:30
Pirate Praveen
95fd5c6f06 Start nginx after letsencrypt configuration 2020-04-03 17:59:00 +05:30
Pirate Praveen
f20934b035 Upload to experimental 2020-04-03 17:45:32 +05:30
Pirate Praveen
b0746d46d1 Add a work around for missing assets/select2.png error on web console 2020-04-03 17:43:56 +05:30
Pirate Praveen
d1fadde153 Upload to experimental 2020-04-02 20:23:09 +05:30
Pirate Praveen
4d727aeff8 Use jquery.waitforimages from npmjs.com (packaged version is broken) 2020-04-02 20:22:06 +05:30
Pirate Praveen
04bda8531c Refresh patch (remove fuzz) 2020-04-02 20:21:42 +05:30
Pirate Praveen
95b522dc72 Upload to experimental 2020-04-01 20:25:19 +05:30
Pirate Praveen
dc7fd7be84 Tighten dependency on ruby-grape-path-helpers 2020-04-01 20:24:47 +05:30
Pirate Praveen
3651e61851 Tighten dependencies for dependencies in buster-backports 2020-04-01 13:07:18 +05:30
Pirate Praveen
65e21b3ae4 Upload to experimental 2020-03-28 19:55:51 +05:30
Pirate Praveen
dd848e864e Exclude core-js from transpiling 2020-03-28 19:53:26 +05:30
Pirate Praveen
0abc996aea Upload to experimental 2020-03-28 18:12:56 +05:30
Pirate Praveen
f5dc88739e Add new dependencies for embedded derailed_benchmarks gem 2020-03-28 18:11:35 +05:30
Pirate Praveen
03bb7949cb Update changelog 2020-03-28 15:27:09 +05:30
Pirate Praveen
ab59c8d20c Bump Standards-Version to 4.5.0 (no changes needed) 2020-03-28 13:23:47 +05:30
Pirate Praveen
ae15ed391d Update upstream source from tag 'upstream/12.8.8'
Update to upstream version '12.8.8'
with Debian dir b2d322041b
2020-03-28 13:23:19 +05:30
Pirate Praveen
478ed161ff New upstream version 12.8.8 2020-03-28 13:19:24 +05:30
Pirate Praveen
2c628a8940 Upload to experimental 2020-03-26 17:27:43 +05:30
Pirate Praveen
3115d2f649 Tighten dependency on ruby-rack and ruby-rails 2020-03-26 17:25:10 +05:30
Pirate Praveen
b6d8554e0a Fix protobuf compatibility issue with patch 2020-03-25 14:04:13 +05:30
Pirate Praveen
72bd1f8ecc Cherry pick patch from upstream merge request to support grape 1.3 2020-03-25 13:54:16 +05:30
Pirate Praveen
f17ba195be Tighten dependency on ruby-method-source and ruby-grape 2020-03-25 11:00:37 +05:30
Pirate Praveen
1f516b8f3e Relax dependency on ruby-method-source 2020-03-25 10:59:31 +05:30
Pirate Praveen
a70fd075bb Removed now unused d3 modules from dependencies 2020-03-18 16:01:38 +05:30
Pirate Praveen
7e3000de07 Drop unused patch file 2020-03-17 23:31:41 +05:30
Pirate Praveen
c29c22af69 Drop patch to lower minimum ruby version (already satsfied in buster) 2020-03-17 23:29:42 +05:30
Pirate Praveen
f1598ef01d Drop unused patch file 2020-03-17 23:25:11 +05:30
Pirate Praveen
70e8a4f1b1 Add ruby-stackprof as dependency 2020-03-17 18:00:40 +05:30
Pirate Praveen
ff5cdde5df Upload to experimental 2020-03-17 17:40:49 +05:30
Pirate Praveen
e5abe73c33 Tighten dependency on gitlab-shell and relax dependency on gitlab-common 2020-03-17 14:22:55 +05:30
Pirate Praveen
701b363263 Delete obsolete configuration files 2020-03-14 20:59:41 +05:30
Pirate Praveen
f65d131fc8 Tighten dependency on ruby-redis-actionpack 2020-03-14 00:39:58 +05:30
Pirate Praveen
a4fe2b39e9 Update more dependencies 2020-03-13 20:00:41 +05:30
Pirate Praveen
c60f881f37 Update minimum version of ruby-devise to 4.7.1 for rails 6 support 2020-03-13 18:59:50 +05:30
Pirate Praveen
699d0fc414 Add new dependencies: ruby-liquid, ruby-lru-redux, ruby-erubi, ruby-mail 2020-03-13 18:58:28 +05:30
Pirate Praveen
53e7c83df9 Tighten dependency on rails-i18n 2020-03-13 18:44:22 +05:30
Pirate Praveen
5fe7feb007 Tighten dependency on gitlab-labkit and gitaly 2020-03-13 18:41:23 +05:30
Pirate Praveen
b9ef6c3c9d Relax dependency on rdoc 2020-03-13 18:39:49 +05:30
Pirate Praveen
40c1ea2e9c Tighten dependency on elasticsearch-api 2020-03-13 17:42:43 +05:30
Pirate Praveen
2ba7fe9767 Fix dependency versions of elasticsearch-* gems 2020-03-13 17:40:39 +05:30
Pirate Praveen
c9ecb600cf Tighten dependency on ruby-doorkeeper-openid-connect 2020-03-13 17:28:04 +05:30
Pirate Praveen
b0de306b0e Drop patch to relax responders (required version in the arhive) 2020-03-13 17:26:17 +05:30
Pirate Praveen
b3269fd1f3 Relax dependency on rails and tighten dpendency on bootsnap 2020-03-13 17:19:44 +05:30
Pirate Praveen
4c6fe1f7e8 Fix syntax error in Gemfile introduced by a patch 2020-03-13 17:08:37 +05:30
Sruthi Chandran
74e828ae7b Update upstream source from tag 'upstream/12.8.6'
Update to upstream version '12.8.6'
with Debian dir 09effd55f1
2020-03-13 15:48:13 +05:30
Sruthi Chandran
928aa75ce0 New upstream version 12.8.6 2020-03-13 15:44:24 +05:30
Sruthi Chandran
5cbe61f93b Update changelog 2020-03-13 15:27:43 +05:30
Sruthi Chandran
fddcb77d95 Update new files and removed files 2020-03-12 21:56:43 +05:30
Sruthi Chandran
97009eb964 Update upstream source from tag 'upstream/12.8.6'
Update to upstream version '12.8.6'
with Debian dir 69e7dd75ba
2020-03-12 21:28:22 +05:30
Sruthi Chandran
8dc700535c New upstream version 12.8.6 2020-03-12 21:24:23 +05:30
Sruthi Chandran
98ea1da6eb Update changelog 2020-03-12 20:19:57 +05:30
Sruthi Chandran
548a14dc91 Refresh patches 2020-03-12 20:19:57 +05:30
Sruthi Chandran
250224e364 Removed embedded doorkeeper module 2020-03-12 20:19:57 +05:30
Sruthi Chandran
9d45611290 Deleted patches already applied upstream 2020-03-12 20:19:57 +05:30
Sruthi Chandran
df6ec68d08 New upstream version 12.8.5 2020-03-09 13:42:32 +05:30
Sruthi Chandran
9c9c70aabc Remove embedded doorkeeper as it is available in experimental 2020-03-09 13:39:43 +05:30
Sruthi Chandran
c737b85fae Update embedded module versions 2020-03-09 13:22:34 +05:30
Pirate Praveen
b7d16c0b32 Update changelog 2020-03-07 23:24:52 +05:30
Pirate Praveen
edc029b8cb Update upstream source from tag 'upstream/12.6.8'
Update to upstream version '12.6.8'
with Debian dir 3ff4d865d0
2020-03-07 23:21:50 +05:30
Pirate Praveen
b4a1e844b3 New upstream version 12.6.8 2020-03-07 23:17:34 +05:30
Pirate Praveen
68ca0f29de Add back simplecov and remove gitlab-styles 2020-02-29 12:50:57 +05:30
Pirate Praveen
a433ff52a7 Add ruby-simplecov as autopkgtest dependency 2020-02-28 21:07:40 +05:30
Pirate Praveen
f0d8ad33f0 Use packaged version of node-xterm 2020-02-28 18:54:31 +05:30
Pirate Praveen
a0df5ccec2 Add ruby-spring as autopkgtest dependency 2020-02-28 18:12:16 +05:30
Pirate Praveen
b709681391 Fix rspec-rails dependency in Gemfile 2020-02-28 17:39:25 +05:30
Pirate Praveen
d6c96a53f2 Add ruby-rspec-rails to autopkgtest dependencies 2020-02-28 17:35:36 +05:30
Pirate Praveen
1060278311 Add ruby-factory-bot-rails as autopkgtest dependency 2020-02-28 17:32:44 +05:30
Pirate Praveen
fd1ecefc28 Add ruby-database-cleaner as autopkgtest dependency 2020-02-28 15:05:57 +05:30
Pirate Praveen
11d4be7bf8 add ruby-awesome-print as autopkgtest dependency 2020-02-28 15:04:33 +05:30
Pirate Praveen
403834169a Add ruby-pry-byebug as autopkgtest dependency 2020-02-28 13:06:31 +05:30
Pirate Praveen
780a54263c Remove lint and style checks gems 2020-02-28 12:49:51 +05:30
Pirate Praveen
b6afa4afb0 Include development, test group in Gemfile for autopkgtest 2020-02-28 11:55:49 +05:30
Pirate Praveen
bf317f6fe2 Add ruby-rails-controller-testing as autopkgtest dependency 2020-02-25 15:20:44 +05:30
Pirate Praveen
74574186b6 Add ruby-webmock as autopkgtest dependency 2020-02-25 15:19:30 +05:30
Pirate Praveen
fd36c93328 Add ruby-email-spec and ruby-json-schema as autopkgtest depends 2020-02-25 15:17:27 +05:30
Pirate Praveen
56e497ffa1 Add ruby-shoulda-matchers as autopkgtest dependency 2020-02-25 15:09:39 +05:30
Pirate Praveen
2e1f1c655c Add ruby-selenium-webdriver as autopkgtest dependency 2020-02-24 17:17:28 +00:00
Pirate Praveen
fefd6c4c21 Add ruby-rsepc-retry to autopkgtest dependencies 2020-02-24 21:31:12 +05:30
Pirate Praveen
e9f968aa76 Add ruby-fuubar to autopkgtest Depends 2020-02-24 20:31:41 +05:30
Pirate Praveen
64adace59b Refresh stable gems in test group 2020-02-24 20:28:28 +05:30
Pirate Praveen
3e562a1b66 Upload to experimental 2020-02-23 19:49:14 +05:30
Pirate Praveen
29b4dbaa51 Update changelog 2020-02-23 19:47:59 +05:30
Pirate Praveen
efa1331877 Don't run full autopkgtest till some gems are packaged 2020-02-23 19:47:58 +05:30
Pirate Praveen
6b7be3dca5 Use more packaged node modules 2020-02-23 19:47:58 +05:30
Pirate Praveen
8aceb46208 Update changelog 2020-02-21 18:04:46 +05:30
Pirate Praveen
8289231bfb Refresh patches again to relax all stable gems 2020-02-20 23:03:16 +05:30
Pirate Praveen
77a6b41e8b Relax dependency on rdoc (ruby 2.5 comes with rdoc 6.0) 2020-02-20 21:01:44 +05:30
Pirate Praveen
eed9a5b83d Add lines removed by mistake in an earlier commit 2020-02-20 20:51:44 +05:30
Pirate Praveen
34dfe8a9aa Relax ruby-rack-cors version in Gemfile 2020-02-20 20:51:17 +05:30
Pirate Praveen
d364fbfbf6 Upload to experimental 2020-02-15 14:12:56 +01:00
Pirate Praveen
a4e1294be1 Update upstream source from tag 'upstream/12.6.7'
Update to upstream version '12.6.7'
with Debian dir 2e3ff3aa57
2020-02-15 14:06:40 +01:00
Pirate Praveen
e5f713a365 New upstream version 12.6.7 2020-02-15 14:02:13 +01:00
Pirate Praveen
dec276452e Update minimum version of ruby-excon and ruby-rack-cors 2020-02-15 13:13:27 +01:00
Pirate Praveen
0527bc7a5e Add fixed CVEs to changelog 2020-02-15 12:26:00 +01:00
Abhijith PA
c48a1dbd7b changelog entry 2020-02-09 19:15:13 +05:30
Abhijith PA
8fad47fa89 Refresh patches 2020-02-09 19:10:35 +05:30
Abhijith PA
45d72b0e4e remove 0760-bump-rubyzip.patch 2020-02-09 19:10:13 +05:30
Abhijith PA
b84166eff2 Update upstream source from tag 'upstream/12.6.6'
Update to upstream version '12.6.6'
with Debian dir 0f02c542e0
2020-02-01 01:22:30 +05:30
Abhijith PA
a3564ef0fd New upstream version 12.6.6 2020-02-01 01:16:34 +05:30
Sruthi Chandran
41e76c33a1 Upload to experimental 2020-01-14 01:27:05 +05:30
Sruthi Chandran
6c52be0543 Update upstream source from tag 'upstream/12.6.4'
Update to upstream version '12.6.4'
with Debian dir 1351d68bfb
2020-01-14 00:59:02 +05:30
Sruthi Chandran
54d8419492 New upstream version 12.6.4 2020-01-14 00:54:23 +05:30
Sruthi Chandran
36b541110f Fix typo in d/watch 2020-01-14 00:53:19 +05:30
Sruthi Chandran
abb2f6dd38 Exclude .rej file generated by quilt in file list 2020-01-14 00:44:41 +05:30
Sruthi Chandran
1f8663ade8 Remove .rej file generated by quilt 2020-01-14 00:44:01 +05:30
Sruthi Chandran
b0334fef43 Update changelog 2020-01-13 22:46:57 +05:30
Sruthi Chandran
ff9590b38b Update upstream source from tag 'upstream/12.6.3'
Update to upstream version '12.6.3'
with Debian dir 3e8699d205
2020-01-13 22:35:14 +05:30
Sruthi Chandran
b4802bbd4a New upstream version 12.6.3 2020-01-13 22:30:44 +05:30
Sruthi Chandran
15954a9b7f Remove embedded core-js as required version is now available 2020-01-13 22:01:20 +05:30
Sruthi Chandran
e7af794152 Update deps on prometheus-client-mmap 2020-01-12 00:48:01 +05:30
Sruthi Chandran
45ce89c93e Update changelog 2020-01-12 00:27:09 +05:30
Sruthi Chandran
9d6df11a27 New upstream version 12.6.3 2020-01-12 00:27:09 +05:30
Sruthi Chandran
86274ece36 Remove heapy from watch file 2020-01-12 00:27:09 +05:30
Sruthi Chandran
b918a049b5 Update deps on packaged node-modules 2020-01-12 00:26:35 +05:30
Sruthi Chandran
3343938d8c New upstream version 12.6.3 2020-01-12 00:16:45 +05:30
Sruthi Chandran
165a56c99f Restore 0740-use-packaged-modules.patch 2020-01-11 19:08:58 +05:30
Pirate Praveen
8f028be15f Fix last version of obsolete config file 2020-01-08 20:46:14 +05:30
Sruthi Chandran
cedc726ca6 Fix file list after removing embedded module heapy 2020-01-08 16:17:14 +05:30
Sruthi Chandran
63bf46dca8 Update upstream source from tag 'upstream/12.6.2'
Update to upstream version '12.6.2'
with Debian dir 552b362230
2020-01-08 16:07:22 +05:30
Sruthi Chandran
0a80e9586b New upstream version 12.6.2 2020-01-08 16:02:45 +05:30
Sruthi Chandran
e40793ca16 Update changelog 2020-01-08 00:25:46 +05:30
Sruthi Chandran
bf144385f8 Add ruby-heapy to deps 2020-01-08 00:25:46 +05:30
Sruthi Chandran
1b11b79726 Remove embedded module heapy as packaged version is now available 2020-01-07 23:25:06 +05:30
Sruthi Chandran
5701398f41 Remove .eslintrc.yml files 2020-01-07 23:14:48 +05:30
Utkarsh Gupta
40d5ef01bf Fix d/control 2020-01-04 03:18:29 +05:30
Utkarsh Gupta
36d3527b54 Update d/ch 2020-01-04 03:00:32 +05:30
Utkarsh Gupta
7d320a4c3f Update upstream source from tag 'upstream/12.6.2'
Update to upstream version '12.6.2'
with Debian dir 5e1419a463
2020-01-04 02:57:37 +05:30
Utkarsh Gupta
65b755ec3a New upstream version 12.6.2 2020-01-04 02:51:38 +05:30
Utkarsh Gupta
01d2d8b829 Embed doorkeeper 2020-01-04 02:51:06 +05:30
Pirate Praveen
e9b8ed4427 Update changelog 2020-01-03 19:20:36 +05:30
Pirate Praveen
8f981ffde8 Update upstream source from tag 'upstream/12.6.2'
Update to upstream version '12.6.2'
with Debian dir 54526297bc
2020-01-03 18:41:47 +05:30
Pirate Praveen
0985dbd954 New upstream version 12.6.2 2020-01-03 18:37:03 +05:30
Pirate Praveen
583785a02f Update changelog 2020-01-02 02:04:16 +05:30
Pirate Praveen
c210b0b5e2 Remove obsolete initializer: rack_attack_git_basic_auth.rb 2020-01-02 02:03:22 +05:30
Pirate Praveen
91b31e792f Update minimum version of ruby-aws-sdk for bug fix 2020-01-02 01:52:31 +05:30
Pirate Praveen
7aca50f823 Update changelog 2020-01-02 01:13:09 +05:30
Pirate Praveen
1e0bc37ef0 Remove gitlab-peek from upstream-file-list (component removed) 2020-01-02 00:55:27 +05:30
Pirate Praveen
6df9b62547 Update upstream source from tag 'upstream/12.6.1'
Update to upstream version '12.6.1'
with Debian dir e4748337f9
2020-01-02 00:45:04 +05:30
Pirate Praveen
5ed1f864fe New upstream version 12.6.1 2020-01-02 00:40:12 +05:30
Pirate Praveen
935951ddec Tighten dependencies 2020-01-02 00:33:30 +05:30
Sruthi Chandran
c53677ca62 Override false lintian error 2020-01-01 14:56:18 +05:30
Sruthi Chandran
b918168f98 Refresh 2020-01-01 14:40:56 +05:30
Sruthi Chandran
d808028c80 Refresh patches 2020-01-01 14:38:38 +05:30
Sruthi Chandran
62661f24ee Remove embedded gitlab peek as no longer required 2020-01-01 14:36:44 +05:30
Sruthi Chandran
3c6f33daec New upstream release 2020-01-01 14:03:57 +05:30
Sruthi Chandran
a780c8ea83 Update upstream source from tag 'upstream/12.6.1'
Update to upstream version '12.6.1'
with Debian dir 5460237efc
2020-01-01 14:00:00 +05:30
Sruthi Chandran
ba8cc108d2 New upstream version 12.6.1 2020-01-01 13:55:28 +05:30
Pirate Praveen
e165c9e297 Update changelog 2019-12-31 15:48:29 +05:30
Pirate Praveen
906460e61f Update minimum version of ruby-premailer-rails to 1.10.3 2019-12-31 15:46:01 +05:30
Pirate Praveen
f8ae4e32fe Update minimum version of ruby-gpgme to 2.0.19 2019-12-31 15:45:35 +05:30
Pirate Praveen
dc4a6cf4da Update changelog 2019-12-30 17:37:26 +05:30
Pirate Praveen
cd1b3d5ac5 Relax dependency on grpc and google-protobuf gems 2019-12-30 17:36:08 +05:30
Pirate Praveen
0db1ed4b34 Tighten dependencies 2019-12-26 23:17:59 +05:30
Pirate Praveen
95fd7eae80 Relax dependency on responders in Gemfile 2019-12-26 23:17:20 +05:30
Pirate Praveen
4e24b40abb Update upstream file list 2019-12-26 22:41:20 +05:30
Pirate Praveen
7c745a8784 Refresh patches 2019-12-26 22:33:15 +05:30
Pirate Praveen
c537c1337d Update changelog 2019-12-26 22:16:39 +05:30
Pirate Praveen
38f7d08512 Update upstream source from tag 'upstream/12.5.4'
Update to upstream version '12.5.4'
with Debian dir d9c413fb5f
2019-12-26 22:15:43 +05:30
Pirate Praveen
510528bb68 New upstream version 12.5.4 2019-12-26 22:10:19 +05:30
Pirate Praveen
73aafe0802 Update changelog 2019-12-26 21:04:52 +05:30
Pirate Praveen
cd558437ba Update minimum version of ruby-rouge to 3.11 2019-12-24 00:12:35 +05:30
Pirate Praveen
cee6dbc62e Update minimum version of asciidoctor-plantuml 2019-12-23 22:55:54 +05:30
Pirate Praveen
784006d8c0 Update minimum version of gitaly 2019-12-23 18:11:46 +05:30
Pirate Praveen
576758ab35 Update asciidoctor-plantuml require statement for new api 2019-12-23 14:51:22 +05:30
Pirate Praveen
829b8ad6b5 Remove obsolete config file 2019-12-22 23:51:05 +05:30
Pirate Praveen
01bf1c6eb1 Add dependency on ruby-gitlab-net-dns 2019-12-22 23:42:52 +05:30
Pirate Praveen
47c46d68fc Relax rouge version in Gemfile 2019-12-22 23:14:24 +05:30
Pirate Praveen
fcc9d85a53 Relax asciidoctor-plantuml in Gemfile 2019-12-22 23:08:17 +05:30
Pirate Praveen
b8f05922b4 Update upstream source from tag 'upstream/12.4.6'
Update to upstream version '12.4.6'
with Debian dir 89ca9a2d30
2019-12-22 22:58:06 +05:30
Pirate Praveen
6212feb931 New upstream version 12.4.6 2019-12-22 22:52:31 +05:30
Pirate Praveen
4ec5ee0e82 Update ignored files and upstream files lists 2019-12-22 21:50:22 +05:30
Pirate Praveen
a70866eae7 Don't install 16790-render-xml-artifacts.yml 2019-12-21 21:49:27 +05:30
Pirate Praveen
6b776fae71 Update version in changelog 2019-12-21 21:45:16 +05:30
Pirate Praveen
42c93ca0a5 Refresh patches 2019-12-21 21:33:11 +05:30
Pirate Praveen
8ad3f84daf Update changelog 2019-12-21 21:16:05 +05:30
Pirate Praveen
e507ef15b2 Update upstream source from tag 'upstream/12.4.6'
Update to upstream version '12.4.6'
with Debian dir bc5da479d0
2019-12-21 21:01:11 +05:30
Pirate Praveen
3a6a82fa42 New upstream version 12.4.6 2019-12-21 20:55:43 +05:30
Pirate Praveen
834a17e807 Update upstream source from tag 'upstream/12.3.9'
Update to upstream version '12.3.9'
with Debian dir bc5da479d0
2019-12-20 00:14:50 +05:30
Pirate Praveen
317968c865 New upstream version 12.3.9 2019-12-20 00:11:08 +05:30
Pirate Praveen
2e60ff4e0e Update changelog 2019-12-19 22:37:22 +05:30
Abhijith PA
ba6a01f21d Update upstream source from tag 'upstream/12.3.9'
Update to upstream version '12.3.9'
with Debian dir c6a97af8ac
2019-12-16 22:38:24 +05:30
Abhijith PA
d1a7d1f41e New upstream version 12.3.9 2019-12-16 22:33:55 +05:30
Pirate Praveen
15920a3121 Update minimum version of gitlab-shell 2019-12-06 22:10:52 +05:30
Pirate Praveen
f5512f95d5 Add ruby-elasticsearch as dependency 2019-12-06 14:36:28 +05:30
Pirate Praveen
90966dbd2f Add ruby-countries as dependency 2019-12-06 14:33:21 +05:30
Pirate Praveen
0112e889cf Add ruby-net-dns as dependency 2019-12-06 12:41:21 +05:30
Pirate Praveen
b0c021b41f Add ruby-unleash as dependency 2019-12-06 12:37:33 +05:30
Pirate Praveen
bf5c977da5 Add ruby-net-ntp as dependency 2019-12-06 12:34:33 +05:30
Pirate Praveen
64669d7607 Update minimum version of ruby-prof 2019-12-06 12:33:04 +05:30
Pirate Praveen
c4219e34fd Update upstream source from tag 'upstream/12.3.8'
Update to upstream version '12.3.8'
with Debian dir d2214bdf23
2019-12-06 12:15:10 +05:30
Pirate Praveen
e25a15efeb New upstream version 12.3.8 2019-12-06 12:11:25 +05:30
Pirate Praveen
0fc02c2f69 Embed gitlab-peek 2019-12-06 12:11:03 +05:30
Pirate Praveen
4d2550e06a Remove gitlab-license gem from Gemfile (EE only) 2019-12-06 11:58:46 +05:30
Pirate Praveen
b33ac019af Update minimum version of ruby-chronic-duration 2019-12-05 22:51:11 +05:30
Pirate Praveen
a89de87903 Relax dependency on kubeclient in Gemfile to allow 4.3 2019-12-05 22:29:25 +05:30
Pirate Praveen
97b613afc0 Update minimum version of ruby-jira 2019-12-05 22:27:23 +05:30
Pirate Praveen
ae077fa651 Update minimum version of ruby-gitlab-sidekiq-fetcher 2019-12-05 22:26:03 +05:30
Pirate Praveen
d248e7aa95 Update minimum version of ruby-aws-sdk 2019-12-05 22:08:30 +05:30
Pirate Praveen
4209277517 Install and use embedded faraday-middleware-aws-signers-v4 2019-12-05 22:07:53 +05:30
Pirate Praveen
ca524d42e2 Update upstream source from tag 'upstream/12.3.8'
Update to upstream version '12.3.8'
with Debian dir eab0c7bbc2
2019-12-05 21:50:45 +05:30
Pirate Praveen
1d92d9db41 New upstream version 12.3.8 2019-12-05 21:41:47 +05:30
Pirate Praveen
9108c2ba8d Embed faraday-middleware-aws-signers-v4 2019-12-05 21:41:22 +05:30
Pirate Praveen
fdbc192148 Update elasticsearch* dependencies 2019-12-05 19:14:26 +05:30
Pirate Praveen
27aecb2bbb Update gitlab.install with elasticsearch-rails 2019-12-05 18:03:26 +05:30
Pirate Praveen
f2bfe580fb Update upstream source from tag 'upstream/12.3.8'
Update to upstream version '12.3.8'
with Debian dir 20f45ac713
2019-12-05 17:55:02 +05:30
Pirate Praveen
860976d237 New upstream version 12.3.8 2019-12-05 17:51:33 +05:30
Pirate Praveen
5a57cfbd23 Embed elasticsearch-rails 2019-12-05 17:50:31 +05:30
Pirate Praveen
7ecb891e8f Use packaged snowplow-tracker and embedded elasticsearch-model 2019-12-04 22:21:29 +05:30
Pirate Praveen
845c9fc2fe New upstream version 12.3.8 2019-12-04 22:21:29 +05:30
Pirate Praveen
1e0aa28929 New upstream version 12.3.8 2019-12-04 21:55:13 +05:30
Pirate Praveen
c5013e8230 Remove snowplow-tracker and add elasticsearch-model 2019-12-04 21:54:26 +05:30
Pirate Praveen
e21c503a8b Update minimum versions of ruby-graphql and ruby-fog-google 2019-12-04 21:43:30 +05:30
Pirate Praveen
7104481907 Remove EE only gems from Gemfile 2019-12-04 21:39:59 +05:30
Pirate Praveen
f3a1a07aaa Update upstream-file-list 2019-12-04 21:31:55 +05:30
Pirate Praveen
0878d391fa Install more files added by upstream 2019-12-04 21:22:53 +05:30
Pirate Praveen
e261f2f0ba Refresh patches 2019-12-04 21:09:36 +05:30
Pirate Praveen
0de7cdbb9c Update changelog 2019-12-04 20:46:48 +05:30
Pirate Praveen
8c27418630 Update upstream source from tag 'upstream/12.3.8'
Update to upstream version '12.3.8'
with Debian dir 403316904f
2019-12-04 20:42:26 +05:30
Pirate Praveen
1f125c8e22 New upstream version 12.3.8 2019-12-04 20:38:33 +05:30
Pirate Praveen
b659e4f8d1 Update minimum version of git to 2.24~ 2019-11-29 21:20:45 +05:30
Pirate Praveen
e581225eda Check if yarn cache directory is present before updating permissions 2019-11-29 20:56:11 +05:30
Pirate Praveen
1f0b46dc88 Update minimum version of yarnpkg to 1.19~ 2019-11-29 20:45:54 +05:30
Pirate Praveen
f0453acbe1 Update changelog 2019-11-29 13:40:15 +05:30
Pirate Praveen
91588ebb9a Set minimum version of ruby-gitlab-labkit as 0.5~ 2019-11-29 13:39:09 +05:30
Pirate Praveen
acfb2107b8 Relax dependency on ruby-gitlab-labkit 2019-11-29 13:38:53 +05:30
Pirate Praveen
033d4b14eb Update changelog 2019-11-29 12:28:15 +05:30
Pirate Praveen
800985b450 Tighten dependency on gitlab-workhorse and gitaly
(Fixes: CVE-2019-19260)
2019-11-29 12:28:15 +05:30
Pirate Praveen
ca129b8928 Refresh patch with confirmation from Balasankar 2019-11-28 22:42:28 +05:30
Pirate Praveen
9c0250c08b Add patches for CVEs 2019-11-28 21:03:30 +05:30
Pirate Praveen
aa82105a72 Bump minimum version of ruby-font-awesome-rails to allow rails 5.2.3 2019-11-26 00:54:28 +05:30
Pirate Praveen
55bebb797c Update changelog 2019-11-22 21:32:31 +05:30
Pirate Praveen
631bb28f09 Use node-d3 5.12 (required to update rollup to 1.x) 2019-11-22 21:25:00 +05:30
Pirate Praveen
bb045fed42 Update changelog 2019-11-20 13:16:48 +05:30
Pirate Praveen
51d8c823d1 Bump minimum version of ruby-zip to 2.0 to match Gemfile 2019-11-20 13:15:39 +05:30
Utkarsh Gupta
2e79ead5dd Update d/ch 2019-11-20 00:12:36 +05:30
Utkarsh Gupta
4f2f3915d0 Add patch to bump rubyzip 2019-11-20 00:04:03 +05:30
Pirate Praveen
a609649553 Update minimum version for rm_confifile maintscript option 2019-11-15 19:10:45 +05:30
Pirate Praveen
808b0d308d Add gitlab-rails-console command as a convenience script 2019-11-11 22:42:33 +05:30
Dmitry Smirnov
c3b1108e7b Revert "Add sp.js to debian/missing-sources"
This reverts commit 7ec39ded36
2019-11-02 00:00:10 +00:00
Utkarsh Gupta
30a3e4922e Update d/ch 2019-11-02 01:42:02 +05:30
Utkarsh Gupta
7ec39ded36 Add sp.js to debian/missing-sources 2019-11-02 01:38:46 +05:30
Utkarsh Gupta
f871274f6f v4 -> v6 2019-11-02 01:16:06 +05:30
Utkarsh Gupta
4b6f37e177 Update d/ch 2019-10-31 02:00:02 +05:30
Utkarsh Gupta
f76bc84284 Update upstream source from tag 'upstream/12.2.9'
Update to upstream version '12.2.9'
with Debian dir 04e5ec57e3
2019-10-31 01:42:12 +05:30
Utkarsh Gupta
458b3cb248 New upstream version 12.2.9 2019-10-31 01:37:42 +05:30
Pirate Praveen
7606d40c2f Update changelog 2019-10-24 23:47:36 +05:30
Pirate Praveen
519786022b Update minimum versions of gitaly, gitlab-workhorse and gitlab-shell 2019-10-24 23:45:50 +05:30
Dmitry Smirnov
56c3f8d582 CI: re-factored 2019-10-25 02:13:03 +11:00
Pirate Praveen
bc92554850 Update minimum versions of bundler and nodejs 2019-10-23 19:54:17 +05:30
Dmitry Smirnov
c5c5a5b1dc CI: new lintian job + minor corrections 2019-10-23 19:20:37 +11:00
55845 changed files with 7394738 additions and 958346 deletions

15
.browserslistrc Normal file
View file

@ -0,0 +1,15 @@
#
# This list of browsers is a conservative definition, based on
# https://docs.gitlab.com/ee/install/requirements.html#supported-web-browsers
# with the following reasoning:
#
# - We should support the latest ESR of Firefox: 91, because it used quite a lot.
# - We use Edge/Chrome >= 92 because they are about as old as the Firefox ESR
# - Safari 14.1 because it is the current minor version of the previous major version
#
# See also this epic: https://gitlab.com/groups/gitlab-org/-/epics/3957
#
chrome >= 92
edge >= 92
firefox >= 91
safari >= 14.1

View file

@ -1,5 +1,6 @@
--- ---
engines: version: "2"
plugins:
bundler-audit: bundler-audit:
enabled: true enabled: true
duplication: duplication:
@ -8,33 +9,22 @@ engines:
languages: languages:
- ruby - ruby
- javascript - javascript
ratings: rubocop:
paths: enabled: false
- Gemfile.lock exclude_patterns:
- "**.erb" - "{ee/,jh/,}config/"
- "**.haml" - "{ee/,jh/,}db/"
- "**.rb" - "**/log/"
- "**.rhtml" - "**/node_modules/"
- "**.slim" - "**/spec/"
- "**.inc" - "**/tmp/"
- "**.js" - "**/vendor/"
- "**.jsx"
- "**.module"
exclude_paths:
- config/
- db/
- features/
- node_modules/
- spec/
- vendor/
- .yarn-cache/ - .yarn-cache/
- tmp/ - backups/
- builds/ - builds/
- coverage/ - coverage/
- file_hooks/
- plugins/
- public/ - public/
- shared/ - shared/
- webpack-report/ - webpack-report/
- log/
- backups/
- coverage-javascript/
- plugins/

View file

@ -1,20 +0,0 @@
{
"exclude": [
"app/assets/stylesheets/framework/tw_bootstrap_variables.scss",
"app/assets/stylesheets/framework/fonts.scss"
],
"always-semicolon": true,
"color-case": "lower",
"block-indent": " ",
"color-shorthand": false,
"element-case": "lower",
"space-before-colon": "",
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-before-closing-brace": "\n",
"unitless-zero": true
}

View file

@ -1,14 +1,17 @@
# `build_from_dir` can't find Dockerfile when `.dockerignore` is "*" # `build_from_dir` can't find Dockerfile when `.dockerignore` is "*"
# See https://github.com/swipely/docker-api/issues/484 # See https://github.com/swipely/docker-api/issues/484
# Ignore all folders except qa/, config/initializers and the root of lib/ since # Ignore all folders except the following files we need to build the QA image:
# the files we need to build the QA image are in these folders.
# Following are the files we need:
# - ./config/initializers/0_inject_enterprise_edition_module.rb # - ./config/initializers/0_inject_enterprise_edition_module.rb
# - ./lib/gitlab.rb # - ./config/feature_flags
# - ./ee/config/feature_flags
# - ./ee/app/models/license.rb
# - ./lib/gitlab_edition.rb
# - ./lib/gitlab/utils.rb
# - ./qa/ # - ./qa/
# - ./INSTALLATION_TYPE # - ./INSTALLATION_TYPE
# - ./VERSION # - ./VERSION
/.git/
/app/ /app/
/bin/ /bin/
/builds/ /builds/
@ -23,7 +26,16 @@
/db/ /db/
/doc/ /doc/
/docker/ /docker/
/ee/ /ee/bin/
/ee/changelogs/
/ee/config/events/
/ee/config/metrics/
/ee/config/routes/
/ee/db/
/ee/fixtures/
/ee/lib/
/ee/locale/
/ee/spec/
/fixtures/ /fixtures/
/templates/ /templates/
/lint/ /lint/
@ -37,10 +49,8 @@
/lib/registry/ /lib/registry/
/lib/policy/ /lib/policy/
/lib/feature/ /lib/feature/
/lib/flowdock/
/lib/generators/ /lib/generators/
/lib/gitaly/ /lib/gitaly/
/lib/gitlab/
/lib/api/ /lib/api/
/lib/token/ /lib/token/
/lib/mattermost/ /lib/mattermost/
@ -61,6 +71,7 @@
/locale/ /locale/
/log/ /log/
/modules/ /modules/
/node_modules/
/plugins/ /plugins/
/public/ /public/
/rubocop/ /rubocop/

34
.editorconfig Normal file
View file

@ -0,0 +1,34 @@
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.{js,json,vue,scss,rb,haml,yml}]
indent_size = 2
[*.{js,json,vue,scss,rb,haml,yml,md}]
indent_style = space
charset = utf-8
[*.{md,markdown,js.snap}]
trim_trailing_whitespace = false
[doc/**/*.md]
trim_trailing_whitespace = true
[*.rb]
max_line_length = 120
# Don't apply editorconfig rules to vendor/ resources
[vendor/**]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
insert_final_newline = unset
trim_trailing_whitespace = unset
max_line_length = unset

View file

@ -1,14 +1,13 @@
/app/assets/javascripts/locale/**/app.js /app/assets/javascripts/locale/**/app.js
/config/
/builds/ /builds/
/coverage/ /coverage/
/coverage-frontend/ /coverage-frontend/
/coverage-javascript/
/node_modules/ /node_modules/
/public/ /public/
/scripts/
/tmp/ /tmp/
/vendor/ /vendor/
jest.config.js /sitespeed-result/
karma.config.js /fixtures/**/*.graphql
webpack.config.js # Storybook build artifacts
/storybook/public
spec/fixtures/**/*.graphql

View file

@ -1,5 +1,10 @@
extends: extends:
- '@gitlab' - plugin:@gitlab/default
- plugin:@gitlab/i18n
- plugin:no-jquery/slim
- plugin:no-jquery/deprecated-3.4
- plugin:no-unsanitized/DOM
- ./tooling/eslint-config/conditionally_ignore.js
globals: globals:
__webpack_public_path__: true __webpack_public_path__: true
gl: false gl: false
@ -7,38 +12,194 @@ globals:
localStorage: false localStorage: false
IS_EE: false IS_EE: false
plugins: plugins:
- import - no-jquery
- html
- "@gitlab/i18n"
- "@gitlab/vue-i18n"
settings: settings:
import/resolver: import/resolver:
webpack: webpack:
config: './config/webpack.config.js' config: './config/webpack.config.js'
rules: rules:
"@gitlab/i18n/no-non-i18n-strings": error
"@gitlab/vue-i18n/no-bare-strings": error
"@gitlab/vue-i18n/no-bare-attribute-strings": error
import/no-commonjs: error import/no-commonjs: error
import/no-default-export: off
no-underscore-dangle: no-underscore-dangle:
- error - error
- allow: - allow:
- __ - __
- _links - _links
import/no-unresolved:
- error
- ignore:
# In FOSS, these import paths are rewritten using
# NormalModuleReplacementPlugin, which import/no-unresolved doesn't
# consider. See
# https://gitlab.com/gitlab-org/gitlab/-/merge_requests/89831.
- '^(ee|jh)_component/'
# Disabled for now, to make the airbnb-base 12.1.0 -> 13.1.0 update smoother # Disabled for now, to make the airbnb-base 12.1.0 -> 13.1.0 update smoother
no-else-return: no-else-return:
- error - error
- allowElseIf: true - allowElseIf: true
import/no-useless-path-segments: off
lines-between-class-members: off lines-between-class-members: off
# Disabled for now, to make the plugin-vue 4.5 -> 5.0 update smoother # all offenses of no-jquery/no-animate-toggle are false positives ( $toast.show() )
vue/no-confusing-v-for-v-if: error no-jquery/no-animate-toggle: off
vue/no-unused-components: off no-jquery/no-event-shorthand: off
vue/no-use-v-if-with-v-for: off no-jquery/no-serialize: error
vue/no-v-html: off promise/always-return: off
vue/use-v-on-exact: off promise/no-callback-in-promise: off
'@gitlab/no-global-event-off': error
'@gitlab/vue-no-new-non-primitive-in-template':
- error
- allowNames:
- 'class(es)?$'
- '^style$'
- '^to$'
- '^$'
- '^variables$'
- 'attrs?$'
no-param-reassign:
- error
- props: true
ignorePropertyModificationsFor:
- acc
- accumulator
- el
- element
- state
ignorePropertyModificationsForRegex:
- '^draft'
import/order:
- error
- groups:
- builtin
- external
- internal
- parent
- sibling
- index
pathGroups:
- pattern: '@sentry/browser'
group: external
- pattern: ~/**
group: internal
- pattern: emojis/**
group: internal
- pattern: '{ee_,jh_,}empty_states/**'
group: internal
- pattern: '{ee_,jh_,}icons/**'
group: internal
- pattern: '{ee_,jh_,}images/**'
group: internal
- pattern: vendor/**
group: internal
- pattern: shared_queries/**
group: internal
- pattern: '{ee_,}spec/**'
group: internal
- pattern: '{ee_,jh_,}jest/**'
group: internal
- pattern: '{ee_,jh_,any_}else_ce/**'
group: internal
- pattern: ee/**
group: internal
- pattern: '{ee_,jh_,}component/**'
group: internal
- pattern: jh_else_ee/**
group: internal
- pattern: jh/**
group: internal
- pattern: '{test_,}helpers/**'
group: internal
- pattern: test_fixtures/**
group: internal
alphabetize:
order: ignore
'no-restricted-syntax':
- error
- selector: ImportSpecifier[imported.name='GlSkeletonLoading']
message: 'Migrate to GlSkeletonLoader, or import GlDeprecatedSkeletonLoading.'
- selector: ImportSpecifier[imported.name='GlSafeHtmlDirective']
message: 'Use directive at ~/vue_shared/directives/safe_html.js instead.'
no-restricted-imports:
- error
- paths:
- name: mousetrap
message: 'Import { Mousetrap } from ~/lib/mousetrap instead.'
# See https://gitlab.com/gitlab-org/gitlab/-/issues/360551
vue/multi-word-component-names: off
unicorn/prefer-dom-node-dataset:
- error
no-unsanitized/method:
- error
- escape:
methods: 'sanitize'
no-unsanitized/property:
- error
- escape:
methods: 'sanitize'
overrides: overrides:
files: - files:
- '**/spec/**/*' - '{,ee/,jh/}spec/frontend*/**/*'
rules: rules:
"@gitlab/i18n/no-non-i18n-strings": off '@gitlab/require-i18n-strings': off
'@gitlab/no-runtime-template-compiler': off
'require-await': error
'import/no-dynamic-require': off
'no-import-assign': off
'no-restricted-syntax':
- error
- selector: CallExpression[callee.object.name=/(wrapper|vm)/][callee.property.name="setData"]
message: 'Avoid using "setData" on VTU wrapper'
- selector: MemberExpression[object.type!='ThisExpression'][property.type='Identifier'][property.name='$nextTick']
message: 'Using $nextTick from a component instance is discouraged. Import nextTick directly from the Vue package.'
- selector: Identifier[name='setImmediate']
message: 'Prefer explicit waitForPromises (or equivalent), or jest.runAllTimers (or equivalent) to vague setImmediate calls.'
- selector: ImportSpecifier[imported.name='GlSkeletonLoading']
message: 'Migrate to GlSkeletonLoader, or import GlDeprecatedSkeletonLoading.'
- selector: CallExpression[arguments.length=1][arguments.0.type='Literal'] CallExpression[callee.property.name='toBe'] CallExpression[callee.property.name='attributes'][arguments.length=1][arguments.0.value='disabled']
message: Avoid asserting disabled attribute exact value, because Vue.js 2 and Vue.js 3 renders it differently. Use toBeDefined / toBeUndefined instead
no-unsanitized/method: off
no-unsanitized/property: off
- files:
- 'config/**/*'
- 'scripts/**/*'
- '*.config.js'
- '*.config.*.js'
- 'jest_resolver.js'
- storybook/config/*.js
rules:
'@gitlab/require-i18n-strings': off
import/no-extraneous-dependencies: off
import/no-commonjs: off
import/no-nodejs-modules: off
filenames/match-regex: off
no-console: off
- files:
- '*.stories.js'
rules:
filenames/match-regex: off
'@gitlab/require-i18n-strings': off
- files:
- '*.graphql'
plugins:
- '@graphql-eslint'
parserOptions:
parser: '@graphql-eslint/eslint-plugin'
operations: '{,ee/,jh/}app/**/*.graphql'
schema: './tmp/tests/graphql/gitlab_schema_apollo.graphql'
rules:
filenames/match-regex: off
spaced-comment: off
# TODO: We need a way to include this rule + support ee_else_ce fragments
#'@graphql-eslint/unique-fragment-name': error
# TODO: Uncomment these rules when then `schema` is available
#'@graphql-eslint/fragments-on-composite-type': error
#'@graphql-eslint/known-argument-names': error
#'@graphql-eslint/known-type-names': error
'@graphql-eslint/no-anonymous-operations': error
'@graphql-eslint/unique-operation-name': error
'@graphql-eslint/require-id-when-available': error
'@graphql-eslint/no-unused-variables': error
'@graphql-eslint/no-unused-fragments': error
'@graphql-eslint/no-duplicate-fields': error
- files:
- '{,ee/}spec/contracts/consumer/**/*'
rules:
'@gitlab/require-i18n-strings': off

130
.git-blame-ignore-revs Normal file
View file

@ -0,0 +1,130 @@
# This file contains revisions to be ignored by git blame.
# These revisions are expected to be formatting-only changes.
#
# Calling `git blame --ignore-revs-file .git-blame-ignore-revs` will
# tell git blame to ignore changes made by these revisions when assigning
# assigning blame, as if the change never happened.
#
# You can enable this as a default for your local repository by running
# `git config blame.ignoreRevsFile .git-blame-ignore-revs`
# This will probably be automatically picked by your IDE
# (VSCode+GitLens and JetBrains products are confirmed to this)
#
# Important: if you are switching to the branch without this file,
# `git blame` will fail with an error
#
# Guidelines:
# - Only large automated refactorings are expected to be included in this file.
# Do not add new revision just because it feels unimportant
# - When adding sinle revision use inline comment to link relevant issue/MR
# Example:
## d4a8b7307acc2dc8a8833ccfa65426ad28b3ffc9 # https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/60
# - When adding multiple revisions precede each addition (this could be multiple revisions) with a link to
# line with word START and link to relevant issue/MR/epic and conclude with line END and link to the
# same issue/MR/epic
# Example:
# # START https://gitlab.com/gitlab-org/issues/12345
# 6f0bd2d8a1e6cd2e794cd39976e9756e0c85ac66
# d53974df11dbc22cbea9dc7dcbc9896c25979a27
# ... <rest of the list>
# # END https://gitlab.com/gitlab-org/issues/12345
# - Please append new lines to the end of the file, no matter of real chronological
# order of revisions
# - Since this is using hashes for reformatting it might be a good idea to update
# this file in separate MR when relevant changes already landed in master. By
# utilizing this manner you will be safe from random rebase/squash issues
# - Only put full 40-character hashes on this list
# START https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/60
f2d28d7ab8525944fda634241a780006594fbe1a
94cfbb0ce38e893edda33ebc069bfa616a08a961
b69f448f0685ad96edc474f75a17e0278a6d6011
52907ac20c3af337544bdf18023730b9ada4b157
d4a8b7307acc2dc8a8833ccfa65426ad28b3ffc9
468cb9f0a4b88bf686f3e78250834f7c9d31ff76
a536349d1d219f0b79a7a711d37dd1c705e49128
6f0bd2d8a1e6cd2e794cd39976e9756e0c85ac66
d53974df11dbc22cbea9dc7dcbc9896c25979a27
818537524d13469cbc7ac5cb89263378b4cddca4
bcbbcb2e708868099301ad5039badfba2128d47b
a4c662da544b38b7e593eb79f24b24c5cb2f205e
9aa1f6207a91a76940b34c921ce89894fcd74a06
66da09846a17435f332296f73af44919ff2cfb52
216f795bab0e8fbf6023f22f6e54cc07514a04ec
e820c22892d207e138bdff717100e5240f8ffd94
2f8dbd483242575f9ceca0a2947c9b21e5ab59a0
e7d50054818ada29751539f548ef72f46deca8bb
00827a74cf3bfef985ed6046fb2d42f29cbb19ac
333bad893e98068053c888f6b020632f1c6f472e
85af3689eea96b4d9131d80d8c5c8936de520074
325fb305ea395a7f44ae1eea0a3e77e46e10c2b6
e37a6d7aa61039734025474ce901f2907283e239
dff561fa8c50e9b96aec9800b6b88ad6c7a2777b
19b0ba7265cfb154505f74b6856e73662829af2e
7c1fa749efcd59e81b565d6803285f6bd4bcefaf
5c23cb94c5d1aed2a4b02b7c1f3e5a53a0aa4760
c35cc92c80969e7c87bbcda7db6cbd04f6719589
280a79c0ec4c1383e49480f3028f5b2025a2a76b
e94556e9f9a145374bf26feb5e1823dae8a4004d
b6a8d9baf700dbb3f780b27d9a9820c9cb7a346c
9180eaee4d58a9e91c5f960148290b5271ba870c
0fdc1fc0380056836dff7aba9be3b1e4b531daea
157e117fcb530436561e3fb8faba6f751dc19e91
7cfe360c9e5460a595dfe729e81cf404c1106638
e3aca8c8f8488c55a199fc28595709b393f5040b
3b1593f2d53b735299381ad0878959cbc2fc9923
39bb37cc0d18f620006d85dfdff7b9a54077708e
cdc1a4a8eec43e6a3df05403af8d05ab6ea7a213
87ad67fef574cd102887f3dde98917f3b2bbcab8
99bff4450248457ba877dec0388241625fb0144b
d1b6d05c08e0730463084acd1a387cd9d6acea8b
557c22a8242d1d7ccf2228b9b3156e2aa0dd05aa
7f4e951ce8073b50a245ebe216a8961c88846cfa
7dae714f23f423ff362d73e0d16da7b3a6cd721f
cfb368284545a4bd1e759cfe9e3e3bde54a1ec6f
aa653d5a380d88493050b22d84df36ae6df2cddd
96ed4677c602e8f9c83b28fbc0d802aa26527ab8
72c11eb5a15735dc52dcd893e9112a10444d46e4
b48e14b89b94a1a87affabd09bc603a67fc6bb01
d46581c1fbcef34cfdd85c6c542fb4ac1b974861
ef02363c9cd41a9ce41443661efed1c0399c5551
075a78b319466aff9e94149c41c286544af91782
9f4b4de2df17268732ae198d5f48c9b99d071a35
0a8f575e365804239d29b45562ca6594b9da59e9
c04bd24738b1775b963bba3f78b48007fccce37e
1173c801ea53c9d814fdf27d878f73a1702eb4e9
a2f5e7395004c255ecaadef30d7a6b5bf453d372
80f1ea7e3f11063a4f15bdd4a2e4a1ca7f770d87
0e6e345f3b4dcb7b51403bcd096e6d3d294743f4
06ee932e0844fa4cc91c15d5ca581de262d7bedd
b3ece842f7c05230f77055ad11e3c4a07c34e1e9
5ebea3a48831351169e0a312e9d6985b31c9975b
02fad0bc640f5f91c748d692c01d6221c9b03b6e
16d4df3c7130b5a0995fdc685b272bef65ff84d5
281cc7306ab92d2e053d0bb2d79e4f3646b980f6
1877bf550016eac9ecac53ec498ec83bdd24339c
7e9741c59d1e3612017925a7b7cf0946bbdd6eca
b282f7dda6d7e93fcb0f000db8aa6634ac8d1b88
81e82875704ffb35842534433216e797c41f89c3
4914a729d17efbe250ac2cab2153f72caef3a7b7
792e349390327fa11721e2f744cafec3b05f51f4
8869ce0866823b229a863e435aa108c5d4fcf448
a223014afe14686a4e18a826fd0bac9bdaaf969b
482d756cf69e3f0dd5997ea0e58d35c0eb694e35
4700ac1d1da533cfefd50bd640db77a12c458fda
21fa9ca4832cfb57f791ff057e7c5987349aa964
8b24c8d64d9328e0884725a2075a4a21faa76842
86ce5406c3b60757f40d4c434b5ce7dfc602a643
da4eea76b3cc1d68d4bfd2705bb86e904d1b54bc
8ac8a1f21a21840b53175e9f4a423b9ffa083f71
ed189d0e9925eb08f3eb444176fad2614a3a4f83
6e183d5016afc50e60892c7f1cf79035619c2deb
9b1d8b4c2897792be067e33442ebf3ce0961a5d0
57da632154bfc193224d5a290b9c2b6cbd7fa0ad
1e3190b0049ba1b502918dc018681808b9203803
0e334037bf0f93ff6f7bc922c48fa97556f39808
07f5bc94bd983e77361c9a5020f8f229da3a465a
888002a62696ba66d8eb49f1dfe83a5a49bdf421
c152d51445d9d9dd7c2c328ca8c407fa5438d16b
26b68c70df73289210aa600fa3c1fe45f05afee4
# END https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/60

4
.gitattributes vendored
View file

@ -1,2 +1,4 @@
VERSION merge=ours
Dangerfile gitlab-language=ruby Dangerfile gitlab-language=ruby
db/schema.rb merge=merge_db_schema *.rb diff=ruby
workhorse/testdata/*.pdf -filter -diff -merge

View file

@ -1,3 +1,3 @@
Were closing our issue tracker on GitHub so we can focus on the GitLab.com project and respond to issues more quickly. Were closing our issue tracker on GitHub so we can focus on the GitLab.com project and respond to issues more quickly.
We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues). You can log into GitLab.com using your GitHub account. We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab/issues). You can log into GitLab.com using your GitHub account.

View file

@ -1,3 +1,3 @@
Thank you for taking the time to contribute back to GitLab! Thank you for taking the time to contribute back to GitLab!
Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account. Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account.

50
.gitignore vendored
View file

@ -3,22 +3,26 @@
*.mo *.mo
*.edit.po *.edit.po
*.rej *.rej
.dir-locals.el
.DS_Store .DS_Store
.bundle .bundle
.chef .chef
.directory .directory
.eslintcache
/.envrc /.envrc
eslint-report.html eslint-report.html
/.gitlab_shell_secret /.gitlab_shell_secret
.idea .idea
.nova
/.vscode/* /.vscode/*
/.rbenv-version /.rbenv-version
.rbx/ .rbx/
/.ruby-gemset /.ruby-gemset
/.ruby-version /.ruby-version
/.tool-versions
/.rvmrc /.rvmrc
.sass-cache/
/.secret /.secret
.sass-cache/
/.vagrant /.vagrant
/.yarn-cache /.yarn-cache
/.byebug_history /.byebug_history
@ -29,54 +33,74 @@ eslint-report.html
/app/assets/javascripts/locale/**/app.js /app/assets/javascripts/locale/**/app.js
/backups/* /backups/*
/config/aws.yml /config/aws.yml
/config/cable.yml
/config/database*.yml /config/database*.yml
/config/gitlab.yml /config/gitlab.yml
/config/gitlab_ci.yml /config/gitlab_ci.yml
/config/initializers/rack_attack.rb /config/Gitlab.gitlab-license
/config/initializers/smtp_settings.rb /config/initializers/smtp_settings.rb
/config/initializers/relative_url.rb /config/initializers/relative_url.rb
/config/resque.yml /config/resque.yml
/config/redis.cache.yml /config/redis.*.yml
/config/redis.queues.yml /config/redis.yml
/config/redis.shared_state.yml
/config/unicorn.rb /config/unicorn.rb
/config/puma.rb /config/puma.rb
/config/secrets.yml /config/secrets.yml
/config/sidekiq.yml /config/sidekiq.yml
/config/registry.key /config/registry.key
/coverage/* /coverage/*
/coverage-javascript/
/db/*.sqlite3 /db/*.sqlite3
/db/*.sqlite3-journal /db/*.sqlite3-journal
/db/data.yml /db/data.yml
/doc/code/* /doc/code/*
/dump.rdb /dump.rdb
/jsconfig.json /jsconfig.json
/lefthook-local.yml
/log/*.log* /log/*.log*
/node_modules/ /node_modules
/nohup.out /nohup.out
/public/assets/ /public/assets/
/public/uploads.* /public/uploads.*
/public/uploads/ /public/uploads/
/public/sitemap.xml
/public/sitemap.xml.gz
/shared/artifacts/ /shared/artifacts/
/spec/examples.txt
/rails_best_practices_output.html /rails_best_practices_output.html
/tags /tags
/tmp/*
/vendor/bundle/* /vendor/bundle/*
/vendor/gitaly-ruby /vendor/package_metadata_db/
/builds* /builds*
/shared/*
/.gitlab_workhorse_secret /.gitlab_workhorse_secret
/.gitlab_pages_secret
/.gitlab_kas_secret
/.gitlab_suggested_reviewers_secret
/webpack-report/ /webpack-report/
/crystalball/
/test_results/
/deprecations/
/knapsack/ /knapsack/
/query_recorder/
/rspec_flaky/ /rspec_flaky/
/rspec/
/locale/**/LC_MESSAGES /locale/**/LC_MESSAGES
/locale/**/*.time_stamp /locale/**/*.time_stamp
/.rspec /.rspec
/plugins/* /.gitlab_smime_key
/.gitlab_pages_secret /.gitlab_smime_cert
package-lock.json package-lock.json
/junit_*.xml /junit_*.xml
/coverage-frontend/ /coverage-frontend/
jsdoc/ jsdoc/
**/tmp/rubocop_cache/** **/tmp/rubocop_cache/**
.projections.json
/qa/.rakeTasks
webpack-dev-server.json
/.nvimrc
.solargraph.yml
ee/changelogs/unreleased-ee
/sitespeed-result
tags.lock
tags.temp
.stylelintcache
.solargraph.yml

View file

@ -1,46 +1,206 @@
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33"
variables:
RAILS_ENV: "test"
NODE_ENV: "test"
SIMPLECOV: "true"
GIT_DEPTH: "20"
GIT_SUBMODULE_STRATEGY: "none"
GET_SOURCES_ATTEMPTS: "3"
KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json
FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json
BUILD_ASSETS_IMAGE: "false"
before_script:
- date
- source scripts/utils.sh
- source scripts/prepare_build.sh
- date
after_script:
- date
stages: stages:
- build - sync
- preflight
- prepare - prepare
- merge - build-images
- fixtures
- lint
- test - test
- post-test
- review - review
- qa - qa
- post-test - post-qa
- pages - pages
- notify
- release-environments
# always use `gitlab-org` runners, however
# in cases where jobs require Docker-in-Docker, the job
# definition must be extended with `.use-docker-in-docker`
default:
image: $DEFAULT_CI_IMAGE
tags:
- gitlab-org
# All jobs are interruptible by default
interruptible: true
# Default job timeout set to 90m https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10520
timeout: 90m
.default-ruby-variables: &default-ruby-variables
RUBY_VERSION: "3.0"
OMNIBUS_GITLAB_RUBY3_BUILD: "true"
OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB_RUBY3"
.backcompat-ruby-variables: &backcompat-ruby-variables
RUBY_VERSION: "2.7"
OMNIBUS_GITLAB_RUBY2_BUILD: "true"
OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB_RUBY2"
.default-branch-pipeline-failure-variables: &default-branch-pipeline-failure-variables
CREATE_ISSUES_FOR_FAILING_TESTS: "true"
workflow:
name: '$PIPELINE_NAME'
rules:
# If `$FORCE_GITLAB_CI` is set, create a pipeline.
- if: '$FORCE_GITLAB_CI'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION forced pipeline'
# As part of the process of creating RCs automatically, we update stable
# branches with the changes of the most recent production deployment. The
# merge requests used for this merge a branch release-tools/X into a stable
# branch. For these merge requests we don't want to run any pipelines, as
# they serve no purpose and will run anyway when the changes are merged.
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^release-tools\/\d+\.\d+\.\d+-rc\d+$/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^[\d-]+-stable(-ee)?$/ && $CI_PROJECT_PATH == "gitlab-org/gitlab"'
when: never
# For merge requests running exclusively in Ruby 2.7
- if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-in-ruby2/'
variables:
<<: *backcompat-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline'
NO_SOURCEMAPS: 'true'
- if: '$CI_MERGE_REQUEST_LABELS =~ /Community contribution/'
variables:
<<: *default-ruby-variables
GITLAB_DEPENDENCY_PROXY_ADDRESS: ""
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline (community contribution)'
NO_SOURCEMAPS: 'true'
# For (detached) merge request pipelines.
- if: '$CI_MERGE_REQUEST_IID'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline'
NO_SOURCEMAPS: 'true'
# For the scheduled pipelines, we set specific variables.
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule"'
variables:
<<: *default-ruby-variables
<<: *default-branch-pipeline-failure-variables
CRYSTALBALL: "true"
PIPELINE_NAME: 'Scheduled Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
# Run pipelines for ruby2 branch
- if: '$CI_COMMIT_BRANCH == "ruby2" && $CI_PIPELINE_SOURCE == "schedule"'
variables:
<<: *backcompat-ruby-variables
PIPELINE_NAME: 'Scheduled Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
# This work around https://gitlab.com/gitlab-org/gitlab/-/issues/332411 whichs prevents usage of dependency proxy
# when pipeline is triggered by a project access token.
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $GITLAB_USER_LOGIN =~ /project_\d+_bot\d*/'
variables:
<<: *default-ruby-variables
<<: *default-branch-pipeline-failure-variables
GITLAB_DEPENDENCY_PROXY_ADDRESS: ""
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline (triggered by a project token)'
# For `$CI_DEFAULT_BRANCH` branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
variables:
<<: *default-ruby-variables
<<: *default-branch-pipeline-failure-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
# For tags, create a pipeline.
- if: '$CI_COMMIT_TAG'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_TAG tag pipeline'
# If `$GITLAB_INTERNAL` isn't set, don't create a pipeline.
- if: '$GITLAB_INTERNAL == null'
when: never
# For stable, auto-deploy, and security branches, create a pipeline.
- if: '$CI_COMMIT_BRANCH =~ /^[\d-]+-stable(-ee)?$/'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
- if: '$CI_COMMIT_BRANCH =~ /^\d+-\d+-auto-deploy-\d+$/'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
- if: '$CI_COMMIT_BRANCH =~ /^security\//'
variables:
<<: *default-ruby-variables
PIPELINE_NAME: 'Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch pipeline'
variables:
PG_VERSION: "13"
DEFAULT_CI_IMAGE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}.patched-golang-${GO_VERSION}-rust-${RUST_VERSION}-node-16.14-postgresql-${PG_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-yarn-1.22-graphicsmagick-1.3.36"
# We set $GITLAB_DEPENDENCY_PROXY to another variable (since it's set at the group level and has higher precedence than .gitlab-ci.yml)
# so that we can override $GITLAB_DEPENDENCY_PROXY_ADDRESS in workflow rules.
GITLAB_DEPENDENCY_PROXY_ADDRESS: "${GITLAB_DEPENDENCY_PROXY}"
RAILS_ENV: "test"
NODE_ENV: "test"
BUNDLE_WITHOUT: "production:development"
BUNDLE_INSTALL_FLAGS: "--jobs=$(nproc) --retry=3"
BUNDLE_FROZEN: "true"
# we override the max_old_space_size to prevent OOM errors
NODE_OPTIONS: --max_old_space_size=4096
GIT_DEPTH: "20"
# 'GIT_STRATEGY: clone' optimizes the pack-objects cache hit ratio
GIT_STRATEGY: "clone"
GIT_SUBMODULE_STRATEGY: "none"
GET_SOURCES_ATTEMPTS: "3"
DEBIAN_VERSION: "bullseye"
UBI_VERSION: "8.6"
CHROME_VERSION: "109"
DOCKER_VERSION: "23.0.1"
RUBY_VERSION: "2.7"
RUBYGEMS_VERSION: "3.4"
GO_VERSION: "1.19"
RUST_VERSION: "1.65"
FLAKY_RSPEC_SUITE_REPORT_PATH: rspec/flaky/report-suite.json
FRONTEND_FIXTURES_MAPPING_PATH: crystalball/frontend_fixtures_mapping.json
GITLAB_WORKHORSE_FOLDER: "gitlab-workhorse"
JUNIT_RESULT_FILE: rspec/junit_rspec.xml
JUNIT_RETRY_FILE: rspec/junit_rspec-retry.xml
KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/report-master.json
RSPEC_CHANGED_FILES_PATH: rspec/changed_files.txt
RSPEC_FOSS_IMPACT_PIPELINE_TEMPLATE_YML: .gitlab/ci/rails/rspec-foss-impact.gitlab-ci.yml.erb
RSPEC_PREDICTIVE_PIPELINE_TEMPLATE_YML: .gitlab/ci/rails/rspec-predictive.gitlab-ci.yml.erb
RSPEC_LAST_RUN_RESULTS_FILE: rspec/rspec_last_run_results.txt
RSPEC_MATCHING_JS_FILES_PATH: rspec/js_matching_files.txt
RSPEC_VIEWS_INCLUDING_PARTIALS_PATH: rspec/views_including_partials.txt
RSPEC_MATCHING_TESTS_PATH: rspec/matching_tests.txt
RSPEC_MATCHING_TESTS_FOSS_PATH: rspec/matching_tests-foss.txt
RSPEC_MATCHING_TESTS_EE_PATH: rspec/matching_tests-ee.txt
RSPEC_PACKED_TESTS_MAPPING_PATH: crystalball/packed-mapping.json
RSPEC_PROFILING_FOLDER_PATH: rspec/profiling
RSPEC_TESTS_MAPPING_PATH: crystalball/mapping.json
RSPEC_FAST_QUARANTINE_LOCAL_PATH: rspec/fast_quarantine-gitlab.txt
TMP_TEST_FOLDER: "${CI_PROJECT_DIR}/tmp/tests"
TMP_TEST_GITLAB_WORKHORSE_PATH: "${TMP_TEST_FOLDER}/${GITLAB_WORKHORSE_FOLDER}"
ES_JAVA_OPTS: "-Xms256m -Xmx256m"
ELASTIC_URL: "http://elastic:changeme@elasticsearch:9200"
BUNDLER_CHECKSUM_VERIFICATION_OPT_IN: "1"
CACHE_CLASSES: "true"
CHECK_PRECOMPILED_ASSETS: "true"
FF_USE_FASTZIP: "true"
RETRY_FAILED_TESTS_IN_NEW_PROCESS: "true"
# Run with decomposed databases by default
DECOMPOSED_DB: "true"
DOCS_REVIEW_APPS_DOMAIN: "docs.gitlab-review.app"
DOCS_GITLAB_REPO_SUFFIX: "ee"
REVIEW_APPS_IMAGE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/ruby-3.0:gcloud-383-kubectl-1.23-helm-3.5"
REVIEW_APPS_DOMAIN: "gitlab-review.app"
REVIEW_APPS_GCP_PROJECT: "gitlab-review-apps"
REVIEW_APPS_GCP_REGION: "us-central1"
CACHE_ASSETS_AS_PACKAGE: "true"
BUILD_ASSETS_IMAGE: "true" # Set it to "false" to disable assets image building, used in `build-assets-image`
SIMPLECOV: "true"
REGISTRY_HOST: "registry.gitlab.com"
REGISTRY_GROUP: "gitlab-org"
# Disable useless network connections when installing some NPM packages.
# See https://gitlab.com/gitlab-com/gl-security/engineering-and-research/inventory/-/issues/827#note_1203181407
DISABLE_OPENCOLLECTIVE: "true"
# This is set at the gitlab-org level, but we set it here for forks
DANGER_DO_NOT_POST_INVALID_DANGERFILE_ERROR: "1"
include: include:
- local: .gitlab/ci/global.gitlab-ci.yml - local: .gitlab/ci/*.gitlab-ci.yml
- local: .gitlab/ci/cng.gitlab-ci.yml - remote: 'https://gitlab.com/gitlab-org/frontend/untamper-my-lockfile/-/raw/main/templates/merge_request_pipelines.yml'
- local: .gitlab/ci/docs.gitlab-ci.yml
- local: .gitlab/ci/frontend.gitlab-ci.yml
- local: .gitlab/ci/memory.gitlab-ci.yml
- local: .gitlab/ci/pages.gitlab-ci.yml
- local: .gitlab/ci/qa.gitlab-ci.yml
- local: .gitlab/ci/reports.gitlab-ci.yml
- local: .gitlab/ci/rails.gitlab-ci.yml
- local: .gitlab/ci/review.gitlab-ci.yml
- local: .gitlab/ci/setup.gitlab-ci.yml
- local: .gitlab/ci/test-metadata.gitlab-ci.yml
- local: .gitlab/ci/yaml.gitlab-ci.yml

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1 @@
# This empty file is used for agent-based integration with Kubernetes

View file

@ -0,0 +1,45 @@
---
# Settings for generating changelogs using the GitLab API. See
# https://docs.gitlab.com/ee/api/repositories.html#generate-changelog-data for
# more information.
categories:
added: Added
fixed: Fixed
changed: Changed
deprecated: Deprecated
removed: Removed
security: Security
performance: Performance
other: Other
include_groups:
- gitlab-org/gitlab-core-team/community-members
template: |
{% if categories %}
{% each categories %}
### {{ title }} ({% if single_change %}1 change{% else %}{{ count }} changes{% end %})
{% each entries %}
- [{{ title }}]({{ commit.reference }})\
{% if author.credit %} by {{ author.reference }}{% end %}\
{% if commit.trailers.MR %}\
([merge request]({{ commit.trailers.MR }}))\
{% else %}\
{% if merge_request %}\
([merge request]({{ merge_request.reference }}))\
{% end %}\
{% end %}\
{% if commit.trailers.EE %}\
**GitLab Enterprise Edition**\
{% end %}
{% end %}
{% end %}
{% else %}
No changes.
{% end %}
# The tag format for gitlab-org/gitlab is vX.Y.Z(-rcX)-ee. The -ee prefix would
# be treated as a pre-release identifier, which can result in the wrong tag
# being used as the starting point of a changelog commit range. The custom regex
# here is used to ensure we find the correct tag.
tag_regex: '^v(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)-ee$'

11
.gitlab/ci/_skip.yml Normal file
View file

@ -0,0 +1,11 @@
# no-op pipeline template for skipping whole child pipeline execution
no-op:
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:latest
stage: test
variables:
GIT_STRATEGY: none
script:
- echo "${SKIP_MESSAGE:-no-op run, nothing will be executed!}"
rules:
- when: always

View file

@ -0,0 +1,106 @@
.as-if-jh-sandbox-variables:
variables:
AS_IF_JH_BRANCH: "as-if-jh/${CI_COMMIT_REF_NAME}"
SANDBOX_REPOSITORY: "https://dummy:${AS_IF_JH_TOKEN}@gitlab.com/gitlab-org-sandbox/gitlab-jh-validation.git"
.shared-as-if-jh:
extends:
- .as-if-jh-sandbox-variables
variables:
GITLAB_JH_MIRROR_PROJECT: "33019816"
JH_FILES_TO_COMMIT: "jh package.json yarn.lock"
add-jh-files:
extends:
- .shared-as-if-jh
- .as-if-jh:rules:prepare-as-if-jh
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
stage: prepare
before_script:
- source ./scripts/utils.sh
- source ./scripts/setup/as-if-jh.sh
- install_gitlab_gem
script:
- prepare_jh_branch
- download_jh_path ${JH_FILES_TO_COMMIT}
- echoinfo "Changes after downloading JiHu files:"
- git diff
- git status
artifacts:
expire_in: 2d
paths:
# This should match JH_FILES_TO_COMMIT
- jh/
- package.json
- yarn.lock
prepare-as-if-jh-branch:
extends:
- .shared-as-if-jh
- .as-if-jh:rules:prepare-as-if-jh
stage: prepare
needs:
- add-jh-files
variables:
# We can't apply --filter=tree:0 for runner to set up the repository,
# so instead we tell runner to not clone anything, and we set up the
# repository by ourselves.
GIT_STRATEGY: "none"
before_script:
- git clone --filter=tree:0 "${CI_REPOSITORY_URL}" gitlab
# We should checkout before moving/changing files
- cd gitlab
- git checkout -b "${AS_IF_JH_BRANCH}" "${CI_COMMIT_SHA}"
- cd ..
- mv ${JH_FILES_TO_COMMIT} gitlab/
script:
- cd gitlab
- git add ${JH_FILES_TO_COMMIT}
- git commit -m 'Add JH files' # TODO: Mark which SHA we add
- git push -f "${SANDBOX_REPOSITORY}" "${AS_IF_JH_BRANCH}"
sync-as-if-jh-branch:
extends:
- .as-if-jh-sandbox-variables
- .as-if-jh:rules:sync-as-if-jh
stage: prepare
needs: ["prepare-as-if-jh-branch"]
inherit:
variables:
# From .gitlab-ci.yml for the default Docker image and cache
- DEFAULT_CI_IMAGE
- REGISTRY_HOST
- REGISTRY_GROUP
- DEBIAN_VERSION
- RUBY_VERSION
- GO_VERSION
- RUST_VERSION
- PG_VERSION
- RUBYGEMS_VERSION
- CHROME_VERSION
- NODE_ENV
variables:
MERGE_FROM: "${CI_COMMIT_SHA}" # This is used in https://jihulab.com/gitlab-cn/gitlab/-/blob/e98bcb37aea4cfe1e78e1daef1b58b5f732cf289/jh/bin/build_packagejson where we run in https://gitlab.com/gitlab-org-sandbox/gitlab-jh-validation
trigger:
# What this runs can be found at:
# https://gitlab.com/gitlab-org-sandbox/gitlab-jh-validation/-/blob/as-if-jh-code-sync/jh/.gitlab-ci.yml
project: gitlab-org-sandbox/gitlab-jh-validation
branch: as-if-jh-code-sync
strategy: depend
start-as-if-jh:
extends:
- .as-if-jh:rules:start-as-if-jh
stage: prepare
needs:
- job: "prepare-as-if-jh-branch"
- job: "sync-as-if-jh-branch"
optional: true
inherit:
variables: false
variables:
FORCE_GITLAB_CI: "true" # TODO: Trigger a merge request pipeline
trigger:
project: gitlab-org-sandbox/gitlab-jh-validation
branch: as-if-jh/${CI_COMMIT_REF_NAME}
strategy: depend

View file

@ -0,0 +1,80 @@
.base-image-build:
extends: .use-kaniko
variables:
GIT_LFS_SKIP_SMUDGE: 1 # disable pulling objects from lfs
retry: 2
.base-image-build-buildx:
extends: .use-buildx
variables:
GIT_LFS_SKIP_SMUDGE: 1 # disable pulling objects from lfs
retry: 2
# This image is used by:
# - The `review-qa-*` jobs
# - The `e2e:package-and-test` child pipeline test stage jobs
# See https://docs.gitlab.com/ee/development/testing_guide/end_to_end/index.html#testing-code-in-merge-requests for more details.
build-qa-image:
extends:
- .base-image-build-buildx
- .build-images:rules:build-qa-image
stage: build-images
needs: []
script:
- run_timed_command "scripts/build_qa_image"
build-qa-image as-if-foss:
extends:
- build-qa-image
- .as-if-foss
- .build-images:rules:build-qa-image-as-if-foss
# Prepares an image with GDK configured based on code in master. This saves some time in MRs because some installation
# and complilation will have already been performed.
build-qa-on-gdk-master-image:
extends:
- .base-image-build-buildx
- .build-images:rules:build-qa-on-gdk-master-image
tags:
- e2e
stage: build-images
needs: []
variables:
QA_GDK_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-qa-gdk"
before_script:
- !reference [.use-buildx, before_script]
- sysctl -n -w fs.inotify.max_user_watches=524288
script:
- |
docker buildx build \
--cache-to=type=inline \
--cache-from ${QA_GDK_IMAGE}:master \
--platform=${ARCH:-amd64} \
--add-host gdk.test:127.0.0.1 \
--tag ${QA_GDK_IMAGE}:master \
--file="qa/gdk/Dockerfile" \
--push \
${CI_PROJECT_DIR}
build-assets-image:
extends:
- .base-image-build
- .build-images:rules:build-assets-image
stage: build-images
needs: ["compile-production-assets"]
script:
- skopeo login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- run_timed_command "scripts/build_assets_image"
artifacts:
expire_in: 7 days
paths:
# The `cached-assets-hash.txt` file is used in `review-build-cng-env` (`.gitlab/ci/review-apps/main.gitlab-ci.yml`)
# to pass the assets image tag to the CNG downstream pipeline.
- cached-assets-hash.txt
build-assets-image as-if-foss:
extends:
- build-assets-image
- .as-if-foss
- .build-images:rules:build-assets-image-as-if-foss
needs: ["compile-production-assets as-if-foss"]

View file

@ -0,0 +1,64 @@
cache-workhorse:
extends:
- .default-retry
- .default-before_script
- .rails-cache
- .setup-test-env-cache
- .caching:rules:cache-workhorse
stage: prepare
variables:
SETUP_DB: "false"
script:
- source scripts/gitlab_component_helpers.sh
- 'gitlab_workhorse_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
- run_timed_command "scripts/setup-test-env"
- run_timed_command "select_gitlab_workhorse_essentials"
- run_timed_command "create_gitlab_workhorse_package"
- run_timed_command "upload_gitlab_workhorse_package"
artifacts:
expire_in: 7d
paths:
- ${TMP_TEST_GITLAB_WORKHORSE_PATH}/
.cache-assets-base:
extends:
- .compile-assets-base
- .assets-compile-cache
- .caching:rules:cache-assets
stage: prepare
variables:
WEBPACK_REPORT: "false"
script:
- yarn_install_script
- export GITLAB_ASSETS_HASH=$(bundle exec rake gitlab:assets:hash_sum)
- source scripts/gitlab_component_helpers.sh
- 'gitlab_assets_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
- assets_compile_script
- echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
- run_timed_command "create_gitlab_assets_package"
- run_timed_command "upload_gitlab_assets_package"
cache-assets:test:
extends: .cache-assets-base
cache-assets:test as-if-foss:
extends:
- .cache-assets-base
- .as-if-foss
cache-assets:production:
extends:
- .cache-assets-base
- .production
packages-cleanup:
extends:
- .default-retry
- .caching:rules:packages-cleanup
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
stage: prepare
before_script:
- source scripts/utils.sh
- install_gitlab_gem
script:
- scripts/packages/automated_cleanup.rb

View file

@ -0,0 +1,13 @@
templates-shellcheck:
extends:
- .ci-templates:rules:shellcheck
- .default-before_script
- .default-retry
- .ruby-cache
- .use-pg14
stage: test
needs:
- setup-test-env
script:
- apt update && apt install -y shellcheck=0.7.1-1+deb11u1
- bundle exec scripts/lint_templates_bash.rb

View file

@ -1,16 +0,0 @@
cloud-native-image:
image: ruby:2.6-alpine
before_script: []
dependencies: []
stage: post-test
allow_failure: true
variables:
GIT_DEPTH: "1"
cache: {}
when: manual
script:
- install_gitlab_gem
- CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng
only:
- tags@gitlab-org/gitlab-ce
- tags@gitlab-org/gitlab-ee

View file

@ -0,0 +1,147 @@
include:
- local: .gitlab/ci/rails/shared.gitlab-ci.yml
db:rollback single-db-ci-connection:
extends:
- db:rollback
- .single-db-ci-connection
- .rails:rules:single-db-ci-connection
db:migrate:reset single-db-ci-connection:
extends:
- db:migrate:reset
- .single-db-ci-connection
- .rails:rules:single-db-ci-connection
db:check-schema-single-db-ci-connection:
extends:
- db:check-schema
- .single-db-ci-connection
- .rails:rules:single-db-ci-connection
db:post_deployment_migrations_validator-single-db-ci-connection:
extends:
- db:post_deployment_migrations_validator
- .single-db-ci-connection
- .rails:rules:db:check-migrations-single-db-ci-connection
db:backup_and_restore single-db-ci-connection:
extends:
- db:backup_and_restore
- .single-db-ci-connection
- .rails:rules:db-backup
db:rollback:
extends:
- .db-job-base
- .rails:rules:db-rollback
script:
- bundle exec rake db:migrate VERSION=20220502173045 # 14.10 (last 14.x version)
- bundle exec rake db:migrate
db:rollback single-db:
extends:
- db:rollback
- .single-db
- .rails:rules:single-db
db:migrate:reset:
extends: .db-job-base
script:
- bundle exec rake db:migrate:reset
db:migrate:reset single-db:
extends:
- db:migrate:reset
- .single-db
- .rails:rules:single-db
db:check-schema:
extends:
- .db-job-base
- .rails:rules:ee-mr-and-default-branch-only
script:
- run_timed_command "bundle exec rake db:drop db:create db:migrate"
db:check-schema-single-db:
extends:
- db:check-schema
- .single-db
- .rails:rules:single-db
db:check-migrations:
extends:
- .db-job-base
- .rails:rules:ee-and-foss-mr-with-migration
script:
- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --depth 20
- scripts/validate_migration_schema
allow_failure: true
db:check-migrations-single-db:
extends:
- db:check-migrations
- .single-db
- .rails:rules:db:check-migrations-single-db
db:post_deployment_migrations_validator:
extends:
- .db-job-base
- .rails:rules:ee-and-foss-mr-with-migration
script:
- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --depth 20
- scripts/post_deployment_migrations_validator
allow_failure: true
db:post_deployment_migrations_validator-single-db:
extends:
- db:post_deployment_migrations_validator
- .single-db
- .rails:rules:db:check-migrations-single-db
db:migrate-non-superuser:
extends:
- .db-job-base
- .rails:rules:ee-and-foss-mr-with-migration
script:
- bundle exec rake gitlab:db:reset_as_non_superuser
db:gitlabcom-database-testing:
extends: .rails:rules:db:gitlabcom-database-testing
stage: test
image: ruby:${RUBY_VERSION}-alpine
needs: []
allow_failure: true
script:
- source scripts/utils.sh
- install_gitlab_gem
- ./scripts/trigger-build.rb gitlab-com-database-testing
db:backup_and_restore:
extends:
- .db-job-base
- .rails:rules:db-backup
variables:
SETUP_DB: "false"
GITLAB_ASSUME_YES: "1"
script:
- . scripts/prepare_build.sh
- bundle exec rake db:drop db:create db:schema:load db:seed_fu
- mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,terraform_state,registry,packages}
- bundle exec rake gitlab:backup:create
- date
- bundle exec rake gitlab:backup:restore
db:backup_and_restore single-db:
extends:
- db:backup_and_restore
- .single-db
- .rails:rules:db-backup
db:rollback geo:
extends:
- db:rollback
- .rails:rules:ee-only-migration
script:
- bundle exec rake db:migrate:geo VERSION=20170627195211
- bundle exec rake db:migrate:geo

View file

@ -0,0 +1,35 @@
.run-dev-fixtures:
extends:
- .default-retry
- .rails-cache
- .default-before_script
- .use-pg13
stage: test
needs: ["setup-test-env"]
variables:
FIXTURE_PATH: "db/fixtures/development"
SEED_VSA: "true"
SEED_PRODUCTIVITY_ANALYTICS: "true"
VSA_ISSUE_COUNT: 1
SIZE: 0 # number of external projects to fork, requires network connection
# SEED_NESTED_GROUPS: "false" # requires network connection
.run-dev-fixtures-script: &run-dev-fixtures-script
- section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn"; # Do not use 'bundle exec' here
- section_start "seeding-db" "Seeding DB"; bundle exec rake db:seed_fu; section_end "seeding-db";
run-dev-fixtures:
extends:
- .run-dev-fixtures
- .dev-fixtures:rules:ee-and-foss
script:
- *run-dev-fixtures-script
run-dev-fixtures-ee:
extends:
- .run-dev-fixtures
- .dev-fixtures:rules:ee-only
- .use-pg13-es7-ee
script:
- cp ee/db/fixtures/development/* $FIXTURE_PATH
- *run-dev-fixtures-script

View file

@ -1,76 +1,126 @@
.review-docs: &review-docs .review-docs:
extends: .single-script-job-dedicated-runner
variables:
SCRIPT_NAME: trigger-build-docs
environment:
name: review-docs/$CI_COMMIT_REF_SLUG
# DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables
# Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693
url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
on_stop: review-docs-cleanup
# Trigger a manual docs build in gitlab-docs only on non docs-only branches.
# Useful to preview the docs changes live.
review-docs-deploy-manual:
extends: extends:
- .review-docs - .default-retry
- .no-docs-and-no-qa - .docs:rules:review-docs
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine
stage: review stage: review
script: needs: []
- gem install gitlab --no-document variables:
- ./$SCRIPT_NAME deploy # We're cloning the repo instead of downloading the script for now
when: manual # because some repos are private and CI_JOB_TOKEN cannot access files.
only: # See https://gitlab.com/gitlab-org/gitlab/issues/191273
- branches@gitlab-org/gitlab-ce GIT_DEPTH: 1
- branches@gitlab-org/gitlab-ee # By default, deploy the Review App using the `main` branch of the `gitlab-org/gitlab-docs` project
DOCS_BRANCH: main
environment:
name: review-docs/mr-${CI_MERGE_REQUEST_IID}
# DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables
# Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693
auto_stop_in: 2 weeks
url: http://${DOCS_BRANCH}-${DOCS_GITLAB_REPO_SUFFIX}-${CI_MERGE_REQUEST_IID}.${DOCS_REVIEW_APPS_DOMAIN}/${DOCS_GITLAB_REPO_SUFFIX}
on_stop: review-docs-cleanup
before_script:
- source ./scripts/utils.sh
- install_gitlab_gem
# Always trigger a docs build in gitlab-docs only on docs-only branches. # Always trigger a docs build in gitlab-docs only on docs-only branches.
# Useful to preview the docs changes live. # Useful to preview the docs changes live.
review-docs-deploy: review-docs-deploy:
<<: *review-docs extends: .review-docs
stage: review
script: script:
- gem install gitlab --no-document - ./scripts/trigger-build.rb docs deploy
- ./$SCRIPT_NAME deploy
only:
- /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ce
- /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ee
except:
- /(^qa[\/-].*|.*-qa$)/
# Cleanup remote environment of gitlab-docs # Cleanup remote environment of gitlab-docs
review-docs-cleanup: review-docs-cleanup:
<<: *review-docs extends: .review-docs
stage: review
environment: environment:
name: review-docs/$CI_COMMIT_REF_SLUG name: review-docs/mr-${CI_MERGE_REQUEST_IID}
action: stop action: stop
script: script:
- gem install gitlab --no-document - ./scripts/trigger-build.rb docs cleanup
- ./$SCRIPT_NAME cleanup
when: manual
only:
- branches@gitlab-org/gitlab-ce
- branches@gitlab-org/gitlab-ee
docs lint: docs-lint links:
extends: .dedicated-runner extends:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" - .docs:rules:docs-lint
stage: test image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-html:alpine-3.17-ruby-3.2.1-f53af000
cache: {} stage: lint
dependencies: [] needs: []
before_script: []
script: script:
- scripts/lint-doc.sh # Prepare docs for build
- mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX # The path must be 'ee/' because we have hardcoded links relying on it
# https://gitlab.com/gitlab-org/gitlab-docs/-/blob/887850752fc0e72856da6632db132f005ba77f16/content/index.erb#L44-63
- mv doc/ /tmp/gitlab-docs/content/ee
- cd /tmp/gitlab-docs - cd /tmp/gitlab-docs
# Lint Markdown
- bundle exec mdl content/$DOCS_GITLAB_REPO_SUFFIX -c $CI_PROJECT_DIR/.mdlrc
# Build HTML from Markdown # Build HTML from Markdown
- bundle exec nanoc - bundle exec nanoc
# Check the internal links # Check the internal links and anchors (in parallel)
- bundle exec nanoc check internal_links - "parallel time bundle exec nanoc check ::: internal_links internal_anchors"
# Check the internal anchor links
- bundle exec nanoc check internal_anchors .docs-markdown-lint-image:
except: # When updating the image version here, update it in /scripts/lint-doc.sh too.
- /(^qa[\/-].*|.*-qa$)/ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-docs/lint-markdown:alpine-3.17-vale-2.24.0-markdownlint-0.33.0-markdownlint2-0.6.0
docs-lint markdown:
extends:
- .default-retry
- .docs:rules:docs-lint
- .docs-markdown-lint-image
- .yarn-cache
stage: lint
needs: []
script:
- source ./scripts/utils.sh
- yarn_install_script
- scripts/lint-doc.sh
docs-lint blueprint:
extends:
- .default-retry
- .docs:rules:docs-blueprints-lint
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-slim
stage: lint
needs: []
script:
- scripts/lint-docs-blueprints.rb
docs code_quality:
extends:
- .reports:rules:code_quality
- .docs-markdown-lint-image
stage: lint
needs: []
dependencies: []
allow_failure: true
script:
- vale --output=doc/.vale/vale-json.tmpl --minAlertLevel warning doc > gl-code-quality-report-docs.json || exit_code=$?
artifacts:
reports:
codequality: gl-code-quality-report-docs.json
paths:
- gl-code-quality-report-docs.json
expire_in: 2 weeks
when: always
ui-docs-links lint:
extends:
- .docs:rules:docs-lint
- .static-analysis-base
- .ruby-cache
stage: lint
needs: []
script:
- bundle exec haml-lint -i DocumentationLinks
docs-lint deprecations-and-removals:
variables:
SETUP_DB: "false"
extends:
- .default-retry
- .rails-cache
- .default-before_script
- .docs:rules:deprecations-and-removals
stage: lint
needs: []
script:
- bundle exec rake gitlab:docs:check_deprecations
- bundle exec rake gitlab:docs:check_removals

View file

@ -1,159 +1,255 @@
.assets-compile-cache: &assets-compile-cache .compile-assets-base:
cache: extends:
key: "assets-compile:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6" - .default-retry
paths: - .default-before_script
- vendor/ruby/ - .assets-compile-cache
- .yarn-cache/ image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-16.14:rubygems-${RUBYGEMS_VERSION}-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36
- tmp/cache/assets/sprockets
.use-pg: &use-pg
services:
- name: postgres:9.6.14
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
- name: redis:alpine
.gitlab:assets:compile-metadata:
<<: *assets-compile-cache
extends: .dedicated-no-docs-pull-cache-job
image: dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-git-2.22-chrome-73.0-node-12.x-yarn-1.16-graphicsmagick-1.3.33-docker-18.06.1
dependencies:
- setup-test-env
services:
- docker:19.03.0-dind
variables: variables:
NODE_ENV: "production"
RAILS_ENV: "production"
SETUP_DB: "false" SETUP_DB: "false"
SKIP_STORAGE_VALIDATION: "true" WEBPACK_VENDOR_DLL: "true"
WEBPACK_REPORT: "true" # Disable warnings in browserslist which can break on backports
# we override the max_old_space_size to prevent OOM errors # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384
NODE_OPTIONS: --max_old_space_size=3584 BROWSERSLIST_IGNORE_OLD_DATA: "true"
DOCKER_DRIVER: overlay2 WEBPACK_COMPILE_LOG_PATH: "tmp/webpack-output.log"
DOCKER_HOST: tcp://docker:2375 stage: prepare
script: script:
- node --version - yarn_install_script
- retry yarn install --frozen-lockfile --production --cache-folder .yarn-cache --prefer-offline - export GITLAB_ASSETS_HASH=$(bin/rake gitlab:assets:hash_sum)
- free -m - 'echo "CACHE_ASSETS_AS_PACKAGE: ${CACHE_ASSETS_AS_PACKAGE}"'
- retry bundle exec rake gitlab:assets:compile # The new strategy to cache assets as generic packages is experimental and can be disabled by removing the `CACHE_ASSETS_AS_PACKAGE` variable
- time scripts/build_assets_image - |
- scripts/clean-old-cached-assets if [[ "${CACHE_ASSETS_AS_PACKAGE}" == "true" ]]; then
- rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here source scripts/gitlab_component_helpers.sh
# Play dependent manual jobs
- install_api_client_dependencies_with_apt if ! gitlab_assets_archive_doesnt_exist; then
- play_job "review-build-cng" || true # this job might not exist so ignore the failure if it cannot be played # We remove all assets from the native cache as they could pollute the fresh assets from the package
- play_job "schedule:review-build-cng" || true # this job might not exist so ignore the failure if it cannot be played rm -rf public/assets/ app/assets/javascripts/locale/**/app.js
run_timed_command "download_and_extract_gitlab_assets"
fi
fi
- assets_compile_script
- echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
compile-production-assets:
extends:
- .compile-assets-base
- .production
- .frontend:rules:compile-production-assets
artifacts: artifacts:
name: webpack-report name: webpack-report
expire_in: 31d expire_in: 31d
paths: paths:
- webpack-report/ # These assets are used in multiple locations:
# - in `build-assets-image` job to create assets image for packaging systems
# - GitLab UI for integration tests: https://gitlab.com/gitlab-org/gitlab-ui/-/blob/e88493b3c855aea30bf60baee692a64606b0eb1e/.storybook/preview-head.pug#L1
- cached-assets-hash.txt
- public/assets/ - public/assets/
only: - "${WEBPACK_COMPILE_LOG_PATH}"
- /.+/@gitlab-org/gitlab-ce when: always
- /.+/@gitlab-org/gitlab-ee after_script:
- /.+/@gitlab/gitlabhq - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here
- /.+/@gitlab/gitlab-ee
tags:
- docker
- gitlab-org
gitlab:assets:compile: compile-production-assets as-if-foss:
extends: .gitlab:assets:compile-metadata extends:
cache: - compile-production-assets
policy: pull-push - .as-if-foss
only: - .frontend:rules:compile-production-assets-as-if-foss
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee
gitlab:assets:compile pull-cache: compile-test-assets:
extends: .gitlab:assets:compile-metadata extends:
cache: - .compile-assets-base
policy: pull - .frontend:rules:compile-test-assets
except:
refs:
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee
- /(^docs[\/-].+|.+-docs$)/
.compile-assets-metadata:
extends: .dedicated-runner
<<: *use-pg
<<: *assets-compile-cache
stage: prepare
script:
- node --version
- retry yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline
- free -m
- retry bundle exec rake gitlab:assets:compile
- scripts/clean-old-cached-assets
variables:
# we override the max_old_space_size to prevent OOM errors
NODE_OPTIONS: --max_old_space_size=3584
artifacts: artifacts:
expire_in: 7d expire_in: 7d
paths: paths:
- node_modules - public/assets/
- public/assets - node_modules/@gitlab/svgs/dist/icons.json # app/helpers/icons_helper.rb uses this file
- "${WEBPACK_COMPILE_LOG_PATH}"
when: always
compile-assets: compile-test-assets as-if-foss:
extends: .compile-assets-metadata extends:
cache: - compile-test-assets
policy: pull-push - .frontend:rules:compile-test-assets-as-if-foss
only: - .as-if-foss
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee
compile-assets pull-cache: update-assets-compile-production-cache:
extends: .compile-assets-metadata extends:
cache: - compile-production-assets
policy: pull - .assets-compile-cache-push
except: - .shared:rules:update-cache
refs: stage: prepare
- master@gitlab-org/gitlab-ce artifacts: {} # This job's purpose is only to update the cache.
- master@gitlab-org/gitlab-ee
- /(^docs[\/-].+|.+-docs$)/
karma: update-assets-compile-test-cache:
extends: .dedicated-no-docs-pull-cache-job extends:
<<: *use-pg - compile-test-assets
dependencies: - .assets-compile-cache-push
- compile-assets - .shared:rules:update-cache
- compile-assets pull-cache stage: prepare
- setup-test-env
variables:
# we override the max_old_space_size to prevent OOM errors
NODE_OPTIONS: --max_old_space_size=3584
script: script:
- export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - !reference [compile-test-assets, script]
- date - echo -n "${GITLAB_ASSETS_HASH}" > "cached-assets-hash.txt"
- scripts/gitaly-test-spawn artifacts: {} # This job's purpose is only to update the cache.
- date
- bundle exec rake karma update-storybook-yarn-cache:
coverage: '/^Statements *: (\d+\.\d+%)/' extends:
- .default-retry
- .default-utils-before_script
- .storybook-yarn-cache-push
- .shared:rules:update-cache
stage: prepare
script:
- yarn_install_script
retrieve-frontend-fixtures:
variables:
SETUP_DB: "false"
extends:
- .default-retry
- .frontend:rules:default-frontend-jobs
stage: prepare
script:
- source scripts/utils.sh
- source scripts/gitlab_component_helpers.sh
- install_gitlab_gem
- export_fixtures_sha_for_download
- |
if check_fixtures_download; then
run_timed_command "download_and_extract_fixtures"
fi
artifacts: artifacts:
name: coverage-javascript paths:
- tmp/tests/frontend/
# Download fixtures only when a merge request contains changes to only JS files
# and fixtures are present in the package registry.
.frontend-fixtures-base:
extends:
- .default-retry
- .default-before_script
- .rails-cache
- .use-pg13
stage: fixtures
needs: ["setup-test-env", "retrieve-tests-metadata", "retrieve-frontend-fixtures"]
variables:
# Don't add `CRYSTALBALL: "false"` here as we're enabling Crystalball for scheduled pipelines (in `.gitlab-ci.yml`), so that we get coverage data
# for the `frontend fixture RSpec files` that will be added to the Crystalball mapping in `update-tests-metadata`.
# More information in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74003.
WEBPACK_VENDOR_DLL: "true"
script:
- source scripts/gitlab_component_helpers.sh
- |
if check_fixtures_reuse; then
echoinfo "INFO: Reusing frontend fixtures from 'retrieve-frontend-fixtures'."
exit 0
fi
- run_timed_command "gem install knapsack --no-document"
- section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn"; # Do not use 'bundle exec' here
- source ./scripts/rspec_helpers.sh
- rspec_paralellized_job
artifacts:
name: frontend-fixtures
expire_in: 31d expire_in: 31d
when: always when: always
paths: paths:
- chrome_debug.log
- coverage-javascript/
- tmp/tests/frontend/ - tmp/tests/frontend/
reports: - knapsack/
junit: junit_karma.xml - crystalball/
# Builds FOSS, and EE fixtures in the EE project.
# Builds FOSS fixtures in the FOSS project.
rspec-all frontend_fixture:
extends:
- .frontend-fixtures-base
- .frontend:rules:default-frontend-jobs
needs:
- !reference [.frontend-fixtures-base, needs]
- "compile-test-assets"
parallel: 7
# Builds FOSS fixtures in the EE project, with the `ee/` folder removed (due to `as-if-foss`).
rspec-all frontend_fixture as-if-foss:
extends:
- .frontend-fixtures-base
- .frontend:rules:frontend_fixture-as-if-foss
- .as-if-foss
variables:
# We explicitely disable Crystalball here so as even in scheduled pipelines we don't need it since it's already enabled for `rspec-all frontend_fixture` there.
CRYSTALBALL: "false"
WEBPACK_VENDOR_DLL: "true"
KNAPSACK_GENERATE_REPORT: ""
FLAKY_RSPEC_GENERATE_REPORT: ""
needs:
- !reference [.frontend-fixtures-base, needs]
- "compile-test-assets as-if-foss"
# Uploads EE fixtures in the EE project.
# Uploads FOSS fixtures in the FOSS project.
upload-frontend-fixtures:
extends:
- .frontend-fixtures-base
- .frontend:rules:upload-frontend-fixtures
stage: fixtures
needs: ["rspec-all frontend_fixture"]
script:
- source scripts/utils.sh
- source scripts/gitlab_component_helpers.sh
- export_fixtures_sha_for_upload
- 'fixtures_archive_doesnt_exist || { echoinfo "INFO: Exiting early as package exists."; exit 0; }'
- run_timed_command "create_fixtures_package"
- run_timed_command "upload_fixtures_package"
artifacts: {}
graphql-schema-dump:
variables:
SETUP_DB: "false"
extends:
- .default-retry
- .rails-cache
- .default-before_script
- .frontend:rules:default-frontend-jobs
stage: fixtures
needs: []
script:
- bundle exec rake gitlab:graphql:schema:dump
artifacts:
name: graphql-schema
paths:
- tmp/tests/graphql/gitlab_schema.graphql
- tmp/tests/graphql/gitlab_schema.json
graphql-schema-dump as-if-foss:
extends:
- graphql-schema-dump
- .frontend:rules:default-frontend-jobs-as-if-foss
- .as-if-foss
.frontend-test-base:
extends:
- .default-retry
- .yarn-cache
variables:
# Disable warnings in browserslist which can break on backports
# https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384
BROWSERSLIST_IGNORE_OLD_DATA: "true"
USE_BUNDLE_INSTALL: "false"
SETUP_DB: "false"
before_script:
- !reference [.default-before_script, before_script]
- yarn_install_script
stage: test
.jest-base:
extends: .frontend-test-base
script:
- run_timed_command "yarn jest:ci"
jest: jest:
extends: .dedicated-no-docs-and-no-qa-pull-cache-job extends:
<<: *use-pg - .jest-base
dependencies: - .frontend:rules:jest
- compile-assets needs: ["rspec-all frontend_fixture"]
- compile-assets pull-cache
- setup-test-env
script:
- scripts/gitaly-test-spawn
- date
- bundle exec rake frontend:fixtures
- date
- yarn jest --ci --coverage
artifacts: artifacts:
name: coverage-frontend name: coverage-frontend
expire_in: 31d expire_in: 31d
@ -164,87 +260,165 @@ jest:
- tmp/tests/frontend/ - tmp/tests/frontend/
reports: reports:
junit: junit_jest.xml junit: junit_jest.xml
cache: parallel: 7
key: jest
jest predictive:
extends:
- jest
- .frontend:rules:jest:predictive
needs:
- !reference [jest, needs]
- "detect-tests"
script:
- if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive"; fi
jest as-if-foss:
extends:
- .jest-base
- .frontend:rules:jest:as-if-foss
- .as-if-foss
needs: ["rspec-all frontend_fixture as-if-foss"]
parallel: 4
jest predictive as-if-foss:
extends:
- .jest-base
- .frontend:rules:jest:predictive:as-if-foss
- .as-if-foss
needs:
- "rspec-all frontend_fixture as-if-foss"
- "detect-tests"
script:
- if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive"; fi
jest-integration:
extends:
- .frontend-test-base
- .frontend:rules:default-frontend-jobs
script:
- run_timed_command "yarn jest:integration --ci"
needs: ["rspec-all frontend_fixture", "graphql-schema-dump"]
coverage-frontend:
extends:
- .default-retry
- .default-utils-before_script
- .yarn-cache
- .frontend:rules:coverage-frontend
needs:
- job: "jest"
optional: true
- job: "jest predictive"
optional: true
stage: post-test
script:
- yarn_install_script
- run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js"
# Removing the individual coverage results, as we just merged them.
- if ls coverage-frontend/jest-* > /dev/null 2>&1; then
rm -r coverage-frontend/jest-*;
fi
coverage: '/^Statements\s*:\s*?(\d+(?:\.\d+)?)%/'
artifacts:
name: coverage-frontend
expire_in: 31d
paths: paths:
- tmp/jest/jest/ - coverage-frontend/
policy: pull-push reports:
coverage_report:
coverage_format: cobertura
path: coverage-frontend/cobertura-coverage.xml
qa:internal: webpack-dev-server:
extends: .dedicated-no-docs-no-db-pull-cache-job extends:
services: [] - .default-retry
script: - .default-utils-before_script
- cd qa/ - .yarn-cache
- bundle install - .frontend:rules:default-frontend-jobs
- bundle exec rspec
dependencies:
- setup-test-env
qa:selectors:
extends: .dedicated-no-docs-no-db-pull-cache-job
services: []
script:
- cd qa/
- bundle install
- bundle exec bin/qa Test::Sanity::Selectors
dependencies:
- setup-test-env
.qa-frontend-node: &qa-frontend-node
extends: .dedicated-no-docs-no-db-pull-cache-job
stage: test stage: test
cache: needs: []
key: "$CI_JOB_NAME" variables:
paths: WEBPACK_MEMORY_TEST: "true"
- .yarn-cache/ WEBPACK_VENDOR_DLL: "true"
policy: pull-push
dependencies: []
before_script: []
script: script:
- date - yarn_install_script
- yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline - run_timed_command "retry yarn webpack-vendor"
- date - run_timed_command "node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js"
- yarn run webpack-prod
qa-frontend-node:8:
<<: *qa-frontend-node
image: node:carbon
qa-frontend-node:10:
<<: *qa-frontend-node
image: node:dubnium
qa-frontend-node:latest:
<<: *qa-frontend-node
image: node:latest
allow_failure: true
lint:javascript:report:
extends: .dedicated-no-docs-no-db-pull-cache-job
stage: post-test
dependencies: []
before_script: []
script:
- date
- yarn run eslint-report || true # ignore exit code
artifacts: artifacts:
name: eslint-report name: webpack-dev-server
expire_in: 31d expire_in: 31d
paths: paths:
- eslint-report.html - webpack-dev-server.json
jsdoc: bundle-size-review:
extends: .dedicated-no-docs-no-db-pull-cache-job extends:
stage: post-test - .default-retry
dependencies: - .default-utils-before_script
- compile-assets - .assets-compile-cache
- compile-assets pull-cache - .frontend:rules:bundle-size-review
before_script: [] image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:danger
stage: test
needs: []
script: script:
- date - yarn_install_script
- yarn run jsdoc || true # ignore exit code - scripts/bundle_size_review
artifacts: artifacts:
name: jsdoc when: always
name: bundle-size-review
expire_in: 31d expire_in: 31d
paths: paths:
- jsdoc/ - bundle-size-review/
.startup-css-check-base:
extends:
- .frontend-test-base
script:
- run_timed_command "yarn generate:startup_css"
- yarn check:startup_css
startup-css-check:
extends:
- .startup-css-check-base
- .frontend:rules:default-frontend-jobs
needs: ["compile-test-assets", "rspec-all frontend_fixture"]
startup-css-check as-if-foss:
extends:
- .startup-css-check-base
- .as-if-foss
- .frontend:rules:default-frontend-jobs-as-if-foss
needs:
- job: "compile-test-assets as-if-foss"
- job: "rspec-all frontend_fixture as-if-foss"
.compile-storybook-base:
extends:
- .frontend-test-base
- .storybook-yarn-cache
script:
- run_timed_command "retry yarn run storybook:install --frozen-lockfile"
- run_timed_command "yarn run storybook:build"
needs: ["graphql-schema-dump"]
compile-storybook:
extends:
- .compile-storybook-base
- .frontend:rules:default-frontend-jobs
needs:
- !reference [.compile-storybook-base, needs]
- job: "rspec-all frontend_fixture"
artifacts:
name: storybook
expire_in: 31d
when: always
paths:
- storybook/public
compile-storybook as-if-foss:
extends:
- .compile-storybook-base
- .as-if-foss
- .frontend:rules:default-frontend-jobs-as-if-foss
needs:
- job: "graphql-schema-dump as-if-foss"
- job: "rspec-all frontend_fixture as-if-foss"

View file

@ -0,0 +1,16 @@
glfm-verify:
extends:
- .rails-job-base
- .glfm:rules:glfm-verify
- .use-pg13
stage: test
needs: ["setup-test-env"]
script:
- !reference [.base-script, script]
- bundle exec scripts/glfm/verify-all-generated-files-are-up-to-date.rb
artifacts:
name: changed-files
when: on_failure
expire_in: 31d
paths:
- glfm_specification/

View file

@ -1,78 +1,445 @@
.dedicated-runner: .default-retry:
retry: retry:
max: 2 # This is confusing but this means "3 runs at max". max: 2 # This is confusing but this means "3 runs at max".
when: when:
- unknown_failure
- api_failure - api_failure
- data_integrity_failure
- job_execution_timeout
- runner_system_failure - runner_system_failure
tags: - scheduler_failure
- gitlab-org - stuck_or_timeout_failure
- unknown_failure
.default-cache: &default-cache .default-utils-before_script:
key: "debian-stretch-ruby-2.6.3-node-12.x"
paths:
- vendor/ruby
- .yarn-cache/
- vendor/gitaly-ruby
.dedicated-runner-default-cache:
extends: .dedicated-runner
cache:
<<: *default-cache
# Jobs that only need to pull cache
.dedicated-pull-cache-job:
extends: .dedicated-runner
cache:
<<: *default-cache
policy: pull
stage: test
.no-docs:
except:
refs:
- /(^docs[\/-].+|.+-docs$)/
.no-docs-and-no-qa:
except:
refs:
- /(^docs[\/-].+|.+-docs$)/
- /(^qa[\/-].*|.*-qa$)/
.dedicated-no-docs-pull-cache-job:
extends:
- .dedicated-pull-cache-job
- .no-docs
.dedicated-no-docs-and-no-qa-pull-cache-job:
extends:
- .dedicated-pull-cache-job
- .no-docs-and-no-qa
# Jobs that do not need a DB
.dedicated-no-docs-no-db-pull-cache-job:
extends: .dedicated-no-docs-pull-cache-job
variables:
SETUP_DB: "false"
# Jobs that need a dedicated runner, with no cache
.dedicated-no-docs:
extends:
- .dedicated-runner
- .no-docs
.single-script-job-dedicated-runner:
extends: .dedicated-runner
image: ruby:2.6-alpine
stage: test
cache: {}
dependencies: []
variables:
GIT_STRATEGY: none
before_script: before_script:
# We don't clone the repo by using GIT_STRATEGY: none and only download the - echo $FOSS_ONLY
# single script we need here so it's much faster than cloning. - '[ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb'
- export SCRIPT_NAME="${SCRIPT_NAME:-$CI_JOB_NAME}" - export GOPATH=$CI_PROJECT_DIR/.go
- apk add --update openssl - mkdir -p $GOPATH
- wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/$SCRIPT_NAME - source scripts/utils.sh
- chmod 755 $(basename $SCRIPT_NAME)
.default-before_script:
before_script:
- !reference [.default-utils-before_script, before_script]
- source scripts/prepare_build.sh
.production:
variables:
RAILS_ENV: "production"
NODE_ENV: "production"
GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
.ruby-gems-cache: &ruby-gems-cache
key: "ruby-gems-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}"
paths:
- vendor/ruby/
policy: pull
.ruby-gems-cache-push: &ruby-gems-cache-push
<<: *ruby-gems-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.gitaly-binaries-cache: &gitaly-binaries-cache
key:
files:
- GITALY_SERVER_VERSION
- lib/gitlab/setup_helper.rb
prefix: "gitaly-binaries-debian-${DEBIAN_VERSION}"
paths:
- ${TMP_TEST_FOLDER}/gitaly/_build/bin/
- ${TMP_TEST_FOLDER}/gitaly/_build/deps/git/install/
- ${TMP_TEST_FOLDER}/gitaly/config.toml
- ${TMP_TEST_FOLDER}/gitaly/gitaly2.config.toml
- ${TMP_TEST_FOLDER}/gitaly/internal/
- ${TMP_TEST_FOLDER}/gitaly/run/
- ${TMP_TEST_FOLDER}/gitaly/run2/
- ${TMP_TEST_FOLDER}/gitaly/Makefile
- ${TMP_TEST_FOLDER}/gitaly/praefect.config.toml
- ${TMP_TEST_FOLDER}/gitaly/praefect-db.config.toml
policy: pull
.go-pkg-cache: &go-pkg-cache
key: "go-pkg-${DEBIAN_VERSION}"
paths:
- .go/pkg/mod/
policy: pull
.go-pkg-cache-push: &go-pkg-cache-push
<<: *go-pkg-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.node-modules-cache: &node-modules-cache
key: "node-modules-${DEBIAN_VERSION}-${NODE_ENV}"
paths:
- node_modules/
- tmp/cache/webpack-dlls/
policy: pull
.node-modules-cache-push: &node-modules-cache-push
<<: *node-modules-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.assets-tmp-cache: &assets-tmp-cache
key: "assets-tmp-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-${NODE_ENV}-v1"
paths:
- tmp/cache/assets/sprockets/
- tmp/cache/babel-loader/
- tmp/cache/vue-loader/
policy: pull
.assets-tmp-cache-push: &assets-tmp-cache-push
<<: *assets-tmp-cache
policy: push # We want to rebuild the cache from scratch to ensure we don't pile up outdated cache files.
.storybook-node-modules-cache: &storybook-node-modules-cache
key: "storybook-node-modules-${DEBIAN_VERSION}-${NODE_ENV}"
paths:
- storybook/node_modules/
policy: pull
.storybook-node-modules-cache-push: &storybook-node-modules-cache-push
<<: *storybook-node-modules-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.rubocop-cache: &rubocop-cache
key: "rubocop-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}"
paths:
- tmp/rubocop_cache/
policy: pull
.rubocop-cache-push: &rubocop-cache-push
<<: *rubocop-cache
# We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up but RuboCop has a mechanism
# for keeping only the N latest cache files, so we take advantage of it with `pull-push`.
policy: push
.qa-ruby-gems-cache: &qa-ruby-gems-cache
key:
prefix: "qa-ruby-gems-debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}"
files:
- qa/Gemfile.lock
paths:
- qa/vendor/ruby
policy: pull
.qa-ruby-gems-cache-push: &qa-ruby-gems-cache-push
<<: *qa-ruby-gems-cache
policy: pull-push
.setup-test-env-cache:
cache:
- *ruby-gems-cache
- *gitaly-binaries-cache
- *go-pkg-cache
.setup-test-env-cache-push:
cache:
- *ruby-gems-cache-push
- *go-pkg-cache-push
.gitaly-binaries-cache-push:
cache:
- <<: *gitaly-binaries-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.ruby-cache:
cache:
- *ruby-gems-cache
.rails-cache:
cache:
- *ruby-gems-cache
.static-analysis-cache:
cache:
- *ruby-gems-cache
- *node-modules-cache
- *rubocop-cache
.rubocop-job-cache:
cache:
- *ruby-gems-cache
- *rubocop-cache
.rubocop-job-cache-push:
cache:
- *ruby-gems-cache # We don't push this cache as it's already rebuilt by `update-setup-test-env-cache`
- *rubocop-cache-push
.coverage-cache:
cache:
- *ruby-gems-cache
.ruby-node-cache:
cache:
- *ruby-gems-cache
- *node-modules-cache
.qa-bundler-variables: &qa-bundler-variables
variables:
BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true"
BUNDLE_SILENCE_ROOT_WARNING: "true"
BUNDLE_PATH: vendor
.qa-cache:
<<: *qa-bundler-variables
cache:
- *qa-ruby-gems-cache
.qa-cache-push:
<<: *qa-bundler-variables
cache:
- *qa-ruby-gems-cache-push
.yarn-cache:
cache:
- *node-modules-cache
.assets-compile-cache:
cache:
- *ruby-gems-cache
- *node-modules-cache
- *assets-tmp-cache
.assets-compile-cache-push:
cache:
- *ruby-gems-cache # We don't push this cache as it's already rebuilt by `update-setup-test-env-cache`
- *node-modules-cache-push
- *assets-tmp-cache-push
.storybook-yarn-cache:
cache:
- *node-modules-cache
- *storybook-node-modules-cache
.storybook-yarn-cache-push:
cache:
- *node-modules-cache # We don't push this cache as it's already rebuilt by `update-assets-compile-*-cache`
- *storybook-node-modules-cache-push
.use-pg12:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "12"
.use-pg13:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.2-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "13"
.use-pg14:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.2-alpine
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
.use-pg12-es7-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-12-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "12"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg13-es7-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.2-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "13"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg14-es7-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.2-alpine
- name: elasticsearch:7.17.6
command: ["elasticsearch", "-E", "discovery.type=single-node", "-E", "xpack.security.enabled=false"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg13-es8-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: elasticsearch:8.6.2
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "13"
ES_SETTING_DISCOVERY_TYPE: "single-node"
ES_SETTING_XPACK_SECURITY_ENABLED: "false"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg14-es8-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: elasticsearch:8.6.2
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
ES_SETTING_DISCOVERY_TYPE: "single-node"
ES_SETTING_XPACK_SECURITY_ENABLED: "false"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg13-opensearch1-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "13"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg13-opensearch2-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-13-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "13"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg14-opensearch1-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:1.3.5
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-pg14-opensearch2-ee:
services:
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:postgres-14-pgvector-0.4.1
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
alias: postgres
- name: redis:6.0-alpine
- name: opensearchproject/opensearch:2.2.1
alias: elasticsearch
command: ["bin/opensearch", "-E", "discovery.type=single-node", "-E", "plugins.security.disabled=true"]
- name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:zoekt-ci-image-1.0
alias: zoekt-ci-image
variables:
POSTGRES_HOST_AUTH_METHOD: trust
PG_VERSION: "14"
ZOEKT_INDEX_BASE_URL: http://zoekt-ci-image:6060
ZOEKT_SEARCH_BASE_URL: http://zoekt-ci-image:6070
.use-kaniko:
image:
name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:kaniko
entrypoint: [""]
before_script:
- source scripts/utils.sh
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
.as-if-foss:
variables:
FOSS_ONLY: '1'
.use-docker-in-docker:
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}docker:${DOCKER_VERSION}
services:
- docker:${DOCKER_VERSION}-dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
tags:
# See https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/7019 for tag descriptions
- gitlab-org-docker
.use-buildx:
extends: .use-docker-in-docker
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-slim:docker-${DOCKER_VERSION}
variables:
QEMU_IMAGE: tonistiigi/binfmt:qemu-v7.0.0
before_script:
- !reference [.default-utils-before_script, before_script]
- echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
- |
if [[ "${ARCH}" =~ arm64 ]]; then
echo -e "\033[1;33mInstalling latest qemu emulators\033[0m"
docker pull -q ${QEMU_IMAGE};
docker run --rm --privileged ${QEMU_IMAGE} --uninstall qemu-*;
docker run --rm --privileged ${QEMU_IMAGE} --install all;
fi
- docker buildx create --use # creates and set's to active buildkit builder
.use-kube-context:
before_script:
- export KUBE_CONTEXT="gitlab-org/gitlab:review-apps"
- kubectl config use-context ${KUBE_CONTEXT}

View file

@ -0,0 +1,15 @@
graphql-verify:
variables:
SETUP_DB: "false"
extends:
- .default-retry
- .rails-cache
- .default-before_script
- .graphql:rules:graphql-verify
stage: test
needs: []
script:
- bundle exec rake gitlab:graphql:validate
- bundle exec rake gitlab:graphql:check_docs
- bundle exec rake gitlab:graphql:schema:dump
- node scripts/frontend/graphql_possible_types_extraction.js --check

View file

@ -1,42 +1,41 @@
memory-static: .only-code-memory-job-base:
extends: .dedicated-no-docs-no-db-pull-cache-job extends:
script: - .default-retry
# Uses two different reports from the 'derailed_benchmars' gem. - .rails-cache
- .default-before_script
# Loads each of gems in the Gemfile and checks how much memory they consume when they are required. - .memory:rules
# 'derailed_benchmarks' internally uses 'get_process_mem' variables:
- bundle exec derailed bundle:mem > tmp/memory_bundle_mem.txt METRICS_FILE: "metrics.txt"
- scripts/generate-gems-size-metrics-static tmp/memory_bundle_mem.txt >> 'tmp/memory_metrics.txt'
# Outputs detailed information about objects created while gems are loaded.
# 'derailed_benchmarks' internally uses 'memory_profiler'
- bundle exec derailed bundle:objects > tmp/memory_bundle_objects.txt
- scripts/generate-gems-memory-metrics-static tmp/memory_bundle_objects.txt >> 'tmp/memory_metrics.txt'
artifacts: artifacts:
paths:
- tmp/memory_*.txt
reports: reports:
metrics: tmp/memory_metrics.txt metrics: "${METRICS_FILE}"
expire_in: 62d
# Show memory usage caused by invoking require per gem. # Show memory usage caused by invoking require per gem.
# Unlike `memory-static`, it hits the app with one request to ensure that any last minute require-s have been called. # Hits the app with one request to ensure that any last minute require-s have been called.
# The application is booted in `production` environment. # The application is booted in `production` environment.
# All tests are run without a webserver (directly using Rack::Mock by default). # All tests are run without a webserver (directly using Rack::Mock by default).
memory-on-boot: memory-on-boot:
extends: .rspec-metadata-pg-10 extends:
- .only-code-memory-job-base
- .production
- .use-pg13
stage: test
needs: ["setup-test-env", "compile-test-assets"]
variables: variables:
NODE_ENV: "production"
RAILS_ENV: "production"
SETUP_DB: "true" SETUP_DB: "true"
SKIP_STORAGE_VALIDATION: "true" MEMORY_ON_BOOT_FILE_PREFIX: "tmp/memory_on_boot_"
# we override the max_old_space_size to prevent OOM errors TEST_COUNT: 5
NODE_OPTIONS: --max_old_space_size=3584
script: script:
# Both bootsnap and derailed monkey-patch Kernel#require, which leads to circular dependency - |
- ENABLE_BOOTSNAP=false PATH_TO_HIT="/users/sign_in" CUT_OFF=0.3 bundle exec derailed exec perf:mem >> 'tmp/memory_on_boot.txt' for i in $(seq 1 $TEST_COUNT)
- scripts/generate-memory-metrics-on-boot tmp/memory_on_boot.txt >> 'tmp/memory_on_boot_metrics.txt' do
echo "Starting run $i out of $TEST_COUNT"
PATH_TO_HIT="/users/sign_in" CUT_OFF=0.3 bundle exec derailed exec perf:mem >> "${MEMORY_ON_BOOT_FILE_PREFIX}$i.txt"
done
- scripts/generate-memory-metrics-on-boot "${MEMORY_ON_BOOT_FILE_PREFIX}" "$TEST_COUNT" >> "${METRICS_FILE}"
artifacts: artifacts:
paths: paths:
- tmp/memory_*.txt - "${METRICS_FILE}"
reports: - "${MEMORY_ON_BOOT_FILE_PREFIX}*.txt"
metrics: tmp/memory_on_boot_metrics.txt

View file

@ -0,0 +1,41 @@
.notify-defaults:
stage: notify
dependencies: []
cache: {}
create-issues-for-failing-tests:
extends:
- .notify-defaults
- .notify:rules:create-issues-for-failing-tests
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
variables:
FAILED_TESTS_DIR: "${CI_PROJECT_DIR}/tmp/failed_tests"
FAILING_ISSUES_PROJECT: "gitlab-org/quality/engineering-productivity/flaky-tests-playground"
FAILING_ISSUE_JSON_DIR: "${CI_PROJECT_DIR}/tmp/issues"
before_script:
- source ./scripts/utils.sh
- source ./scripts/rspec_helpers.sh
- install_gitlab_gem
script:
- mkdir -p "${FAILING_ISSUE_JSON_DIR}"
- retrieve_failed_tests "${FAILED_TESTS_DIR}" "json" "latest"
- scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}"
- scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_ee_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}"
artifacts:
paths:
- ${FAILED_TESTS_DIR}/
- ${FAILING_ISSUE_JSON_DIR}/
when: always
expire_in: 2 days
notify-package-and-test-failure:
extends:
- .notify-defaults
- .notify:rules:notify-package-and-test-failure
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
before_script:
- source scripts/utils.sh
- apt-get update
- install_gitlab_gem
script:
- scripts/generate-failed-package-and-test-mr-message.rb

View file

@ -0,0 +1,87 @@
include:
- local: .gitlab/ci/qa-common/main.gitlab-ci.yml
- local: .gitlab/ci/qa-common/rules.gitlab-ci.yml
- local: .gitlab/ci/qa-common/variables.gitlab-ci.yml
workflow:
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly"'
.ce:
variables:
RELEASE: ${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ce:${CI_COMMIT_SHA}
.ee:
variables:
RELEASE: ${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}
# ==========================================
# Prepare stage
# ==========================================
# TODO: enable once ee jobs are added
# trigger-omnibus-env:
# extends:
# - .trigger-omnibus-env
trigger-omnibus-env-ce:
extends:
- .trigger-omnibus-env-ce
variables:
FOSS_ONLY: "1" # set FOSS_ONLY because we don't pass it via trigger job
# TODO: enable once ee jobs are added
# trigger-omnibus:
# extends:
# - .trigger-omnibus
# needs:
# - trigger-omnibus-env
trigger-omnibus-ce:
extends:
- .trigger-omnibus-ce
needs:
- trigger-omnibus-env-ce
# TODO: enable when first parallel job is added
# download-knapsack-report:
# extends:
# - .download-knapsack-report
# - .rules:download-knapsack
# ==========================================
# Test stage
# ==========================================
update-ee-to-ce:
extends:
- .qa
- .update-script
- .ce
variables:
UPDATE_TYPE: minor
UPDATE_FROM_EDITION: ee
QA_RSPEC_TAGS: --tag smoke
# ==========================================
# Post test stage
# ==========================================
e2e-test-report:
extends:
- .e2e-test-report
# TODO: enable when first parallel job is added
# upload-knapsack-report:
# extends:
# - .upload-knapsack-report
# - .rules:report:process-results
export-test-metrics:
extends:
- .export-test-metrics
relate-test-failures:
extends:
- .relate-test-failures
notify-slack:
extends:
- .notify-slack

View file

@ -0,0 +1,525 @@
# E2E tests pipeline loaded dynamically by script: scripts/generate-e2e-pipeline
# For adding new tests, refer to: doc/development/testing_guide/end_to_end/package_and_test_pipeline.md
include:
- local: .gitlab/ci/qa-common/main.gitlab-ci.yml
- local: .gitlab/ci/qa-common/rules.gitlab-ci.yml
- local: .gitlab/ci/qa-common/variables.gitlab-ci.yml
# ==========================================
# Prepare stage
# ==========================================
check-release-set:
extends: .rules:prepare
stage: .pre
script:
- |
if [ -z "$RELEASE" ]; then
echo "E2E test pipeline requires omnibus installation docker image to be set via $RELEASE environment variable"
exit 1
else
echo "Omnibus installation image is set to '$RELEASE'"
fi
trigger-omnibus-env:
extends:
- .trigger-omnibus-env
- .rules:omnibus-build
trigger-omnibus-env-ce:
extends:
- .trigger-omnibus-env-ce
- .rules:omnibus-build-ce
trigger-omnibus:
extends:
- .trigger-omnibus
- .rules:omnibus-build
needs:
- trigger-omnibus-env
trigger-omnibus-ce:
extends:
- .trigger-omnibus-ce
- .rules:omnibus-build-ce
needs:
- trigger-omnibus-env-ce
download-knapsack-report:
extends:
- .download-knapsack-report
- .rules:download-knapsack
cache-gems:
extends:
- .qa-install
- .ruby-image
- .rules:update-cache
stage: .pre
tags:
- e2e
script:
- echo "Populated qa cache"
cache:
policy: pull-push
# ==========================================
# Test stage
# ==========================================
# ------------------------------------------
# Manual jobs
# ------------------------------------------
# Run manual quarantine job
# this job requires passing QA_SCENARIO variable
# and optionally QA_TESTS to run specific quarantined tests
_quarantine:
extends:
- .qa
- .rules:test:manual
needs:
- job: trigger-omnibus
optional: true
stage: test
variables:
QA_RSPEC_TAGS: --tag quarantine
# ------------------------------------------
# FF changes
# ------------------------------------------
# Run specs with feature flags set to the opposite of the default state
instance-ff-inverse:
extends:
- .qa
- .parallel
variables:
QA_SCENARIO: Test::Instance::Image
QA_KNAPSACK_REPORT_NAME: ee-instance
GITLAB_QA_OPTS: --set-feature-flags $QA_FEATURE_FLAGS
rules:
- !reference [.rules:test:feature-flags-set, rules]
# ------------------------------------------
# Jobs with parallel variant
# ------------------------------------------
instance-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
instance:
extends:
- .parallel
- instance-selective
rules:
- !reference [.rules:test:feature-flags-set, rules] # always run instance to validate ff change
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
praefect-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Praefect
QA_CAN_TEST_PRAEFECT: "true"
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
praefect:
extends:
- .parallel
- praefect-selective
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
relative-url-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::RelativeUrl
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
relative-url:
extends:
- .parallel
- relative-url-selective
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
decomposition-single-db-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
GITLAB_QA_OPTS: --omnibus-config decomposition_single_db $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
decomposition-single-db:
extends:
- .parallel
- decomposition-single-db-selective
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
decomposition-multiple-db-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
GITLAB_QA_OPTS: --omnibus-config decomposition_multiple_db $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
decomposition-multiple-db:
extends:
- .parallel
- decomposition-multiple-db-selective
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::All/
object-storage-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
QA_RSPEC_TAGS: --tag object_storage
GITLAB_QA_OPTS: --omnibus-config object_storage $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::ObjectStorage/
object-storage:
extends: object-storage-selective
parallel: 2
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::ObjectStorage/
object-storage-aws-selective:
extends: object-storage-selective
variables:
AWS_S3_ACCESS_KEY: $QA_AWS_S3_ACCESS_KEY
AWS_S3_BUCKET_NAME: $QA_AWS_S3_BUCKET_NAME
AWS_S3_KEY_ID: $QA_AWS_S3_KEY_ID
AWS_S3_REGION: $QA_AWS_S3_REGION
GITLAB_QA_OPTS: --omnibus-config object_storage_aws $EXTRA_GITLAB_QA_OPTS
object-storage-aws:
extends: object-storage-aws-selective
parallel: 2
rules:
- !reference [object-storage, rules]
object-storage-gcs-selective:
extends: object-storage-selective
variables:
GCS_BUCKET_NAME: $QA_GCS_BUCKET_NAME
GOOGLE_PROJECT: $QA_GOOGLE_PROJECT
GOOGLE_JSON_KEY: $QA_GOOGLE_JSON_KEY
GOOGLE_CLIENT_EMAIL: $QA_GOOGLE_CLIENT_EMAIL
GITLAB_QA_OPTS: --omnibus-config object_storage_gcs $EXTRA_GITLAB_QA_OPTS
object-storage-gcs:
extends: object-storage-gcs-selective
parallel: 2
rules:
- !reference [object-storage, rules]
packages-selective:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
QA_RSPEC_TAGS: --tag packages
GITLAB_QA_OPTS: --omnibus-config packages $EXTRA_GITLAB_QA_OPTS
rules:
- !reference [.rules:test:qa-selective, rules]
- if: $QA_SUITES =~ /Test::Instance::Packages/
packages:
extends: packages-selective
parallel: 2
rules:
- !reference [.rules:test:qa-parallel, rules]
- if: $QA_SUITES =~ /Test::Instance::Packages/
# ------------------------------------------
# Non parallel jobs
# ------------------------------------------
update-minor:
extends:
- .qa
- .update-script
variables:
UPDATE_TYPE: minor
QA_RSPEC_TAGS: --tag smoke
rules:
- !reference [.rules:test:update, rules]
- if: $QA_SUITES =~ /Test::Instance::Smoke/
- !reference [.rules:test:manual, rules]
update-major:
extends:
- .qa
- .update-script
variables:
UPDATE_TYPE: major
QA_RSPEC_TAGS: --tag smoke
rules:
- !reference [.rules:test:update, rules]
- if: $QA_SUITES =~ /Test::Instance::Smoke/
- !reference [.rules:test:manual, rules]
gitlab-pages:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::GitlabPages
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::GitlabPages/
- !reference [.rules:test:manual, rules]
gitaly-cluster:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::GitalyCluster
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::GitalyCluster/
- !reference [.rules:test:manual, rules]
group-saml:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::GroupSAML
rules:
- !reference [.rules:test:ee-only, rules]
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::GroupSAML/
- !reference [.rules:test:manual, rules]
oauth:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::OAuth
rules:
- !reference [.rules:test:qa-default-branch, rules]
- if: $QA_SUITES =~ /Test::Integration::OAuth/
- !reference [.rules:test:manual, rules]
instance-saml:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::InstanceSAML
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::InstanceSAML/
- !reference [.rules:test:manual, rules]
jira:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Jira
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Jira/
- !reference [.rules:test:manual, rules]
integrations:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Integrations
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Integrations/
- !reference [.rules:test:manual, rules]
ldap-no-server:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::LDAPNoServer
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPNoServer/
- !reference [.rules:test:manual, rules]
ldap-tls:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::LDAPTLS
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPTLS/
- !reference [.rules:test:manual, rules]
ldap-no-tls:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::LDAPNoTLS
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::LDAPNoTLS/
- !reference [.rules:test:manual, rules]
mtls:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::MTLS
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Mtls/
- !reference [.rules:test:manual, rules]
mattermost:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Mattermost
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Mattermost/
- !reference [.rules:test:manual, rules]
registry:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Registry
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Registry/
- !reference [.rules:test:manual, rules]
registry-with-cdn:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::RegistryWithCDN
GCS_CDN_BUCKET_NAME: $QA_GCS_CDN_BUCKET_NAME
GOOGLE_CDN_LB: $QA_GOOGLE_CDN_LB
GOOGLE_CDN_JSON_KEY: $QA_GOOGLE_CDN_JSON_KEY
GOOGLE_CDN_SIGNURL_KEY: $QA_GOOGLE_CDN_SIGNURL_KEY
GOOGLE_CDN_SIGNURL_KEY_NAME: $QA_GOOGLE_CDN_SIGNURL_KEY_NAME
before_script:
- unset GITLAB_QA_ADMIN_ACCESS_TOKEN
- !reference [.qa, before_script]
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::RegistryWithCDN/
- !reference [.rules:test:manual, rules]
repository-storage:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::RepositoryStorage
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::RepositoryStorage/
- !reference [.rules:test:manual, rules]
service-ping-disabled:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::ServicePingDisabled
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::ServicePingDisabled/
- !reference [.rules:test:manual, rules]
smtp:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::SMTP
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::SMTP/
- !reference [.rules:test:manual, rules]
cloud-activation:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
QA_RSPEC_TAGS: --tag cloud_activation
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::CloudActivation/
- !reference [.rules:test:manual, rules]
large-setup:
extends: .qa
variables:
QA_SCENARIO: Test::Instance::Image
QA_RSPEC_TAGS: --tag can_use_large_setup
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::LargeSetup/
- !reference [.rules:test:manual, rules]
metrics:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Metrics
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Instance::Metrics/
- !reference [.rules:test:manual, rules]
elasticsearch:
extends: .qa
variables:
QA_SCENARIO: "Test::Integration::Elasticsearch"
before_script:
- !reference [.qa, before_script]
rules:
- !reference [.rules:test:ee-only, rules]
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Elasticsearch/
- !reference [.rules:test:manual, rules]
registry-object-storage-tls:
extends: object-storage-aws-selective
variables:
QA_SCENARIO: Test::Integration::RegistryTLS
QA_RSPEC_TAGS: ""
GITLAB_TLS_CERTIFICATE: $QA_GITLAB_TLS_CERTIFICATE
GITLAB_QA_OPTS: --omnibus-config registry_object_storage $EXTRA_GITLAB_QA_OPTS
importers:
extends: .qa
variables:
QA_SCENARIO: Test::Integration::Import
QA_MOCK_GITHUB: "true"
rules:
- !reference [.rules:test:qa, rules]
- if: $QA_SUITES =~ /Test::Integration::Import/
- !reference [.rules:test:manual, rules]
# ==========================================
# Post test stage
# ==========================================
e2e-test-report:
extends:
- .e2e-test-report
- .rules:report:allure-report
upload-knapsack-report:
extends:
- .upload-knapsack-report
- .rules:report:process-results
export-test-metrics:
extends:
- .export-test-metrics
- .rules:report:process-results
relate-test-failures:
extends:
- .relate-test-failures
- .rules:report:process-results
generate-test-session:
extends:
- .generate-test-session
- .rules:report:process-results
notify-slack:
extends:
- .notify-slack
- .rules:report:process-results

View file

@ -1,26 +1,37 @@
.compress-public: &compress-public
- find public -type f -regex '.*\.\(htm\|html\|txt\|text\|js\|json\|css\|svg\|xml\)$' -exec gzip -f -k {} \;
- find public -type f -regex '.*\.\(htm\|html\|txt\|text\|js\|json\|css\|svg\|xml\)$' -exec brotli -f -k {} \;
pages: pages:
extends: .dedicated-no-docs-no-db-pull-cache-job extends:
before_script: [] - .default-retry
- .pages:rules
stage: pages stage: pages
dependencies: environment: pages
- coverage resource_group: pages
- karma needs:
- gitlab:assets:compile - "rspec:coverage"
- lint:javascript:report - "coverage-frontend"
- jsdoc - "compile-production-assets"
- "compile-storybook"
- "update-tests-metadata"
- "generate-frontend-fixtures-mapping"
before_script:
- apt-get update && apt-get -y install brotli gzip
script: script:
- mv public/ .public/ - mv public/ .public/
- mkdir public/ - mkdir public/
- mkdir -p public/$(dirname "$KNAPSACK_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$FLAKY_RSPEC_SUITE_REPORT_PATH") public/$(dirname "$RSPEC_PACKED_TESTS_MAPPING_PATH") public/$(dirname "$FRONTEND_FIXTURES_MAPPING_PATH")
- mv coverage/ public/coverage-ruby/ || true - mv coverage/ public/coverage-ruby/ || true
- mv coverage-javascript/ public/coverage-javascript/ || true - mv coverage-frontend/ public/coverage-frontend/ || true
- mv eslint-report.html public/ || true - mv storybook/public public/storybook || true
- mv webpack-report/ public/webpack-report/ || true
- cp .public/assets/application-*.css public/application.css || true - cp .public/assets/application-*.css public/application.css || true
- cp .public/assets/application-*.css.gz public/application.css.gz || true - mv $KNAPSACK_RSPEC_SUITE_REPORT_PATH public/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || true
- mv jsdoc/ public/jsdoc/ || true - mv $FLAKY_RSPEC_SUITE_REPORT_PATH public/$FLAKY_RSPEC_SUITE_REPORT_PATH || true
- mv $RSPEC_PACKED_TESTS_MAPPING_PATH.gz public/$RSPEC_PACKED_TESTS_MAPPING_PATH.gz || true
- mv $FRONTEND_FIXTURES_MAPPING_PATH public/$FRONTEND_FIXTURES_MAPPING_PATH || true
- *compress-public
artifacts: artifacts:
paths: paths:
- public - public
only: expire_in: 31d
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee

View file

@ -0,0 +1,66 @@
.preflight-job-base:
stage: preflight
extends:
- .default-retry
needs: []
.qa-preflight-job:
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
extends:
- .preflight-job-base
- .qa-cache
variables:
USE_BUNDLE_INSTALL: "false"
SETUP_DB: "false"
before_script:
- !reference [.default-before_script, before_script]
- cd qa && bundle install
rails-production-server-boot:
extends:
- .preflight-job-base
- .default-before_script
- .production
- .ruby-cache
- .setup:rules:rails-production-server-boot
- .use-pg13
variables:
BUNDLE_WITHOUT: "development:test"
BUNDLE_WITH: "production"
needs: []
script:
- source scripts/utils.sh
- cp config/puma.rb.example config/puma.rb
- sed --in-place "s:/home/git/gitlab:${PWD}:" config/puma.rb
- echo 'bind "tcp://127.0.0.1:3000"' >> config/puma.rb
- bundle exec puma --environment production --config config/puma.rb &
- sleep 40 # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114124#note_1309506358
- retry_times_sleep 10 5 "curl http://127.0.0.1:3000"
- kill $(jobs -p)
no-ee-check:
extends:
- .preflight-job-base
- .setup:rules:no-ee-check
script:
- scripts/no-dir-check ee
no-jh-check:
extends:
- .preflight-job-base
- .setup:rules:no-jh-check
script:
- scripts/no-dir-check jh
qa:selectors:
extends:
- .qa-preflight-job
- .qa:rules:ee-and-foss
script:
- bundle exec bin/qa Test::Sanity::Selectors
qa:selectors-as-if-foss:
extends:
- qa:selectors
- .qa:rules:as-if-foss
- .as-if-foss

View file

@ -0,0 +1,280 @@
default:
interruptible: true
workflow:
name: $PIPELINE_NAME
include:
- project: gitlab-org/quality/pipeline-common
ref: 5.1.1
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
- /ci/knapsack-report.yml
stages:
- test
- report
- notify
# ==========================================
# Templates
# ==========================================
.parallel:
parallel: 5
variables:
QA_KNAPSACK_REPORT_PATH: $CI_PROJECT_DIR/qa/knapsack
.ruby-image:
# Because this pipeline template can be included directly in other projects,
# image path and registry needs to be defined explicitly
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3
.qa-install:
variables:
BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true"
BUNDLE_SILENCE_ROOT_WARNING: "true"
extends:
- .gitlab-qa-install
.update-script:
script:
- !reference [.bundle-prefix]
- export QA_COMMAND="$BUNDLE_PREFIX gitlab-qa Test::Omnibus::UpdateFromPrevious $RELEASE $GITLAB_SEMVER_VERSION $UPDATE_TYPE $UPDATE_FROM_EDITION -- $QA_RSPEC_TAGS $RSPEC_REPORT_OPTS"
- echo "Running - '$QA_COMMAND'"
- eval "$QA_COMMAND"
.qa:
extends:
- .qa-base
- .qa-install
- .gitlab-qa-report
stage: test
tags:
- e2e
variables:
QA_GENERATE_ALLURE_REPORT: "true"
QA_CAN_TEST_PRAEFECT: "false"
QA_INTERCEPT_REQUESTS: "true"
GITLAB_LICENSE_MODE: test
GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
GITLAB_QA_OPTS: $EXTRA_GITLAB_QA_OPTS
# todo: remove in 16.1 milestone when not needed for backwards compatibility anymore
EE_LICENSE: $QA_EE_LICENSE
GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN
# Allow QA jobs to fail as they are flaky. The top level `package-and-e2e:ee`
# pipeline is not allowed to fail, so without allowing QA to fail, we will be
# blocking merges due to flaky tests.
allow_failure: true
.trigger-omnibus-env:
stage: .pre
needs:
# We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream omnibus-gitlab pipeline.
- pipeline: $PARENT_PIPELINE_ID
job: build-assets-image
variables:
BUILD_ENV: build.env
before_script:
- |
# This is duplicating the function from `scripts/utils.sh` since `.gitlab/ci/package-and-test/main.gitlab-ci.yml` can be included in other projects.
function assets_image_tag() {
local cache_assets_hash_file="cached-assets-hash.txt"
if [[ -n "${CI_COMMIT_TAG}" ]]; then
echo -n "${CI_COMMIT_REF_NAME}"
elif [[ -f "${cache_assets_hash_file}" ]]; then
echo -n "assets-hash-$(cat ${cache_assets_hash_file} | cut -c1-10)"
else
echo -n "${CI_COMMIT_SHA}"
fi
}
script:
- |
SECURITY_SOURCES=$([[ ! "$CI_PROJECT_NAMESPACE" =~ ^gitlab-org\/security ]] || echo "true")
echo "SECURITY_SOURCES=${SECURITY_SOURCES:-false}" > $BUILD_ENV
echo "OMNIBUS_GITLAB_CACHE_UPDATE=${OMNIBUS_GITLAB_CACHE_UPDATE:-false}" >> $BUILD_ENV
for version_file in *_VERSION; do echo "$version_file=$(cat $version_file)" >> $BUILD_ENV; done
echo "OMNIBUS_GITLAB_RUBY3_BUILD=${OMNIBUS_GITLAB_RUBY3_BUILD:-false}" >> $BUILD_ENV
echo "OMNIBUS_GITLAB_RUBY2_BUILD=${OMNIBUS_GITLAB_RUBY2_BUILD:-false}" >> $BUILD_ENV
echo "OMNIBUS_GITLAB_CACHE_EDITION=${OMNIBUS_GITLAB_CACHE_EDITION:-GITLAB}" >> $BUILD_ENV
echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV
echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV
target_branch_name="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_REF_NAME}}"
echo "TRIGGER_BRANCH=$([[ "${target_branch_name}" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${target_branch_name%-ee} || echo 'master')" >> $BUILD_ENV
- |
echo "Built environment file for omnibus build:"
cat $BUILD_ENV
artifacts:
expire_in: 3 days
reports:
dotenv: $BUILD_ENV
paths:
- $BUILD_ENV
.trigger-omnibus-env-ce:
extends: .trigger-omnibus-env
needs:
- pipeline: $PARENT_PIPELINE_ID
job: build-assets-image as-if-foss
.trigger-omnibus:
stage: .pre
inherit:
variables: false
variables:
GITALY_SERVER_VERSION: $GITALY_SERVER_VERSION
GITLAB_ELASTICSEARCH_INDEXER_VERSION: $GITLAB_ELASTICSEARCH_INDEXER_VERSION
GITLAB_KAS_VERSION: $GITLAB_KAS_VERSION
GITLAB_METRICS_EXPORTER_VERSION: $GITLAB_METRICS_EXPORTER_VERSION
GITLAB_PAGES_VERSION: $GITLAB_PAGES_VERSION
GITLAB_SHELL_VERSION: $GITLAB_SHELL_VERSION
GITLAB_WORKHORSE_VERSION: $GITLAB_WORKHORSE_VERSION
GITLAB_VERSION: $CI_COMMIT_SHA
GITLAB_ASSETS_TAG: $GITLAB_ASSETS_TAG
IMAGE_TAG: $CI_COMMIT_SHA
TOP_UPSTREAM_SOURCE_PROJECT: $CI_PROJECT_PATH
SECURITY_SOURCES: $SECURITY_SOURCES
CACHE_UPDATE: $OMNIBUS_GITLAB_CACHE_UPDATE
RUBY3_BUILD: $OMNIBUS_GITLAB_RUBY3_BUILD
RUBY2_BUILD: $OMNIBUS_GITLAB_RUBY2_BUILD
CACHE_EDITION: $OMNIBUS_GITLAB_CACHE_EDITION
BUILD_ON_ALL_OS: $OMNIBUS_GITLAB_BUILD_ON_ALL_OS
SKIP_QA_TEST: "true"
ee: $EE
trigger:
project: gitlab-org/build/omnibus-gitlab-mirror
branch: $TRIGGER_BRANCH
strategy: depend
.trigger-omnibus-ce:
extends:
- .trigger-omnibus
variables:
# Override gitlab repository so that omnibus doesn't use foss repository for CE build
GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL
.download-knapsack-report:
extends:
- .gitlab-qa-image
stage: .pre
variables:
KNAPSACK_DIR: ${CI_PROJECT_DIR}/qa/knapsack
GIT_STRATEGY: none
script:
# when using qa-image, code runs in /home/gitlab/qa folder
- bundle exec rake "knapsack:download[test]"
- mkdir -p "$KNAPSACK_DIR" && cp knapsack/*.json "${KNAPSACK_DIR}/"
allow_failure: true
artifacts:
paths:
- qa/knapsack/*.json
expire_in: 1 day
.e2e-test-report:
extends:
- .generate-allure-report-base
stage: report
variables:
GITLAB_AUTH_TOKEN: $PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE
ALLURE_PROJECT_PATH: $CI_PROJECT_PATH
ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID
.upload-knapsack-report:
extends:
- .generate-knapsack-report-base
- .qa-install
- .ruby-image
stage: report
when: always
.export-test-metrics:
extends:
- .qa-install
- .ruby-image
stage: report
when: always
variables:
QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/gitlab-qa-run-*/**/test-metrics-*.json
script:
- bundle exec rake "ci:export_test_metrics[$QA_METRICS_REPORT_FILE_PATTERN]"
.relate-test-failures:
extends:
- .qa-install
- .ruby-image
stage: report
when: always
variables:
QA_RSPEC_JSON_FILE_PATTERN: "${CI_PROJECT_DIR}/gitlab-qa-run-*/**/rspec-*.json"
script:
- |
if [ "$SUITE_FAILED" != "true" ] && [ "$SUITE_RAN" == "true" ]; then
echo "Test suite passed. Exiting..."
exit 0
fi
- |
bundle exec relate-failure-issue \
--input-files "${QA_RSPEC_JSON_FILE_PATTERN}" \
--project "gitlab-org/gitlab" \
--token "${QA_RELATE_FAILURE_ISSUE_TOKEN}"
.generate-test-session:
extends:
- .qa-install
- .ruby-image
stage: report
when: always
variables:
QA_RSPEC_JSON_FILE_PATTERN: "${CI_PROJECT_DIR}/gitlab-qa-run-*/**/rspec-*.json"
script:
- |
bundle exec generate-test-session \
--input-files "${QA_RSPEC_JSON_FILE_PATTERN}" \
--project "gitlab-org/quality/testcase-sessions" \
--token "${QA_TEST_SESSION_TOKEN}" \
--ci-project-token "${GENERATE_TEST_SESSION_READ_API_REPORTER_TOKEN}" \
--issue-url-file report_issue_url.txt
artifacts:
when: always
expire_in: 1d
paths:
- qa/report_issue_url.txt
.notify-slack:
extends:
- .notify-slack-qa
- .qa-install
- .ruby-image
stage: notify
variables:
QA_RSPEC_XML_FILE_PATTERN: "${CI_PROJECT_DIR}/gitlab-qa-run-*/**/rspec-*.xml"
SLACK_ICON_EMOJI: ci_failing
STATUS_SYM: ☠️
STATUS: failed
TYPE: "($QA_RUN_TYPE) "
when: always
script:
- |
if [ "$SUITE_FAILED" != "true" ] && [ "$SUITE_RAN" == "true" ]; then
echo "Test suite passed. Exiting..."
exit 0
fi
- bundle exec prepare-stage-reports --input-files "${QA_RSPEC_XML_FILE_PATTERN}"
- !reference [.notify-slack-qa, script]
# ==========================================
# Pre stage
# ==========================================
dont-interrupt-me:
stage: .pre
interruptible: false
script:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
rules:
- if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_MERGE_REQUEST_IID == null'
allow_failure: true
- if: '$CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached"'
when: manual
allow_failure: true

View file

@ -0,0 +1,154 @@
# Specific specs passed
.specific-specs: &specific-specs
if: $QA_TESTS != ""
# No specific specs passed
.all-specs: &all-specs
if: $QA_TESTS == ""
# FF changes
.feature-flags-set: &feature-flags-set
if: $QA_FEATURE_FLAGS =~ /enabled|disabled/
# Manually trigger job on ff changes but with default ff state instead of inverted
.feature-flags-set-manual: &feature-flags-set-manual
<<: *feature-flags-set
when: manual
allow_failure: true
# Run the job on master pipeline
.default-branch: &default-branch
if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
# Run all tests when QA framework changes present, full suite execution is explicitly enabled or a feature flag file is removed
.qa-run-all-tests: &qa-run-all-tests
if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_RUN_ALL_E2E_LABEL == "true" || $QA_FEATURE_FLAGS =~ /deleted/
# Run job when MR has pipeline:run-all-e2e label
.qa-run-all-e2e-label: &qa-run-all-e2e-label
if: $QA_RUN_ALL_E2E_LABEL == "true"
# Process test results (notify failure to slack, create test session report, relate test failures)
.process-test-results: &process-test-results
if: $PROCESS_TEST_RESULTS == "true"
.not-canonical-project: &not-canonical-project
if: '$CI_PROJECT_PATH != "gitlab-org/gitlab" && $CI_PROJECT_PATH != "gitlab-cn/gitlab"'
# Selective test execution against omnibus instance have following execution scenarios:
# * only e2e spec files changed - runs only changed specs
# * qa framework changes - runs full test suite
# * feature flag changed - runs full test suite with base gitlab instance configuration with both ff states
# * quarantined e2e spec - skips execution of e2e tests by creating a no-op pipeline
# ------------------------------------------
# Prepare
# ------------------------------------------
.rules:prepare:
rules:
- when: always
.rules:omnibus-build:
rules:
- if: $SKIP_OMNIBUS_TRIGGER == "true"
when: never
- if: $FOSS_ONLY != "1"
.rules:omnibus-build-ce:
rules:
- if: $SKIP_OMNIBUS_TRIGGER == "true"
when: never
- if: $FOSS_ONLY == "1"
.rules:update-cache:
rules:
- if: '$UPDATE_QA_CACHE == "true"'
.rules:download-knapsack:
rules:
- when: always
# ------------------------------------------
# Test
# ------------------------------------------
.rules:test:manual:
rules:
- when: manual
allow_failure: true
variables:
QA_TESTS: ""
.rules:test:feature-flags-set:
rules:
# unset specific specs if pipeline has feature flag changes and run full suite
- <<: *feature-flags-set
variables:
QA_TESTS: ""
# parallel and non parallel rules are used for jobs that require parallel execution and thus need to switch
# between parallel and non parallel when only certain specs are executed
.rules:test:qa-selective:
rules:
# always run parallel with full suite when framework changes present or ff state changed
- <<: *qa-run-all-tests
when: never
- <<: *all-specs
when: never
- <<: *feature-flags-set
when: never
.rules:test:qa-parallel:
rules:
- *qa-run-all-tests
- <<: *specific-specs
when: manual
allow_failure: true
variables:
QA_TESTS: ""
- *feature-flags-set-manual
# general qa job rule for jobs without the need to run in parallel
.rules:test:qa:
rules:
- *qa-run-all-tests
- *feature-flags-set-manual
.rules:test:ee-only:
rules:
- if: $FOSS_ONLY == "1"
when: never
.rules:test:update:
rules:
# skip upgrade jobs if gitlab version is not in semver compatible format
# these jobs need gitlab version because we can't reliably detect it from just the image
- if: $GITLAB_SEMVER_VERSION !~ /^\d+\.\d+\.\d+/
when: never
# update type tests are used to check if gitlab upgrade can be performed correctly (mainly migrations)
# there isn't much benefit in running tests after update with new sidebar enabled and there
# is also an issue to properly pass feature toggle to this job due to how gitlab-qa parses cli args
- if: $QA_SUPER_SIDEBAR_ENABLED == "true"
when: never
- !reference [.rules:test:ee-only, rules]
- !reference [.rules:test:qa, rules]
.rules:test:qa-default-branch:
rules:
- *qa-run-all-e2e-label
- *default-branch
- *feature-flags-set-manual
# ------------------------------------------
# Report
# ------------------------------------------
.rules:report:allure-report:
rules:
- if: $SKIP_ALLURE_REPORT == "true"
when: never
- when: always
.rules:report:process-results:
rules:
- <<: *not-canonical-project
when: never
- *process-test-results

View file

@ -0,0 +1,20 @@
# Default variables for package-and-test
variables:
REGISTRY_HOST: "registry.gitlab.com"
REGISTRY_GROUP: "gitlab-org"
SKIP_REPORT_IN_ISSUES: "true"
SKIP_OMNIBUS_TRIGGER: "true"
OMNIBUS_GITLAB_CACHE_UPDATE: "false"
OMNIBUS_GITLAB_RUBY3_BUILD: "false"
OMNIBUS_GITLAB_RUBY2_BUILD: "false"
OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB"
OMNIBUS_GITLAB_BUILD_ON_ALL_OS: "false"
ALLURE_JOB_NAME: $CI_PROJECT_NAME
COLORIZED_LOGS: "true"
QA_LOG_LEVEL: "info"
QA_TESTS: ""
QA_FEATURE_FLAGS: ""
# run all tests by default when package-and-test is included natively in other projects
# this will be overridden when selective test execution is used in gitlab canonical project
QA_RUN_ALL_TESTS: "true"

View file

@ -1,29 +1,166 @@
.package-and-qa-base: .qa-job-base:
image: ruby:2.6-alpine image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
stage: review # So even if review-deploy failed we can still run this extends:
before_script: [] - .default-retry
dependencies: [] - .qa-cache
cache: {} stage: test
needs: []
variables: variables:
GIT_DEPTH: "1" USE_BUNDLE_INSTALL: "false"
retry: 0 SETUP_DB: "false"
before_script:
- !reference [.default-before_script, before_script]
- cd qa && bundle install
.e2e-trigger-base:
extends: .production # this makes sure GITLAB_ALLOW_SEPARATE_CI_DATABASE is passed to the child pipeline
stage: qa
needs:
- build-assets-image
- build-qa-image
- e2e-test-pipeline-generate
variables:
# This is needed by `trigger-omnibus-env` (`.gitlab/ci/package-and-test/main.gitlab-ci.yml`).
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
SKIP_MESSAGE: Skipping package-and-test due to mr containing only quarantine changes!
GITLAB_QA_IMAGE: "${CI_REGISTRY_IMAGE}/gitlab-ee-qa:${CI_COMMIT_SHA}"
RUN_WITH_BUNDLE: "true" # instructs pipeline to install and run gitlab-qa gem via bundler
QA_PATH: qa # sets the optional path for bundler to run from
DYNAMIC_PIPELINE_YML: package-and-test-pipeline.yml # yml files are generated by scripts/generate-e2e-pipeline script
inherit:
variables:
- CHROME_VERSION
- RUBY_VERSION
- DOCKER_VERSION
- REGISTRY_GROUP
- REGISTRY_HOST
- OMNIBUS_GITLAB_CACHE_EDITION
- OMNIBUS_GITLAB_RUBY3_BUILD
- OMNIBUS_GITLAB_RUBY2_BUILD
trigger:
strategy: depend
forward:
yaml_variables: true
pipeline_variables: true
include:
- artifact: $DYNAMIC_PIPELINE_YML
job: e2e-test-pipeline-generate
qa:internal:
extends:
- .qa-job-base
- .qa:rules:internal
script: script:
- source scripts/utils.sh - bundle exec rspec -O .rspec_internal
- install_gitlab_gem
- ./scripts/trigger-build omnibus
only:
- branches@gitlab-org/gitlab-ce
- branches@gitlab-org/gitlab-ee
package-and-qa: qa:internal-as-if-foss:
extends: .package-and-qa-base extends:
when: manual - qa:internal
except: - .qa:rules:internal-as-if-foss
- /(^qa[\/-].*|.*-qa$)/ - .as-if-foss
package-and-qa-always: qa:master-auto-quarantine-dequarantine:
extends: .package-and-qa-base extends:
- .qa-job-base
rules:
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
script:
- bundle exec confiner -r .confiner/master.yml
allow_failure: true
qa:nightly-auto-quarantine-dequarantine:
extends:
- .qa-job-base
rules:
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
script:
- bundle exec confiner -r .confiner/nightly.yml
allow_failure: true
qa:update-qa-cache:
extends:
- .qa-job-base
- .qa-cache-push
- .shared:rules:update-cache
stage: prepare
script:
- echo "Cache has been updated and ready to be uploaded."
e2e:package-and-test-ee:
extends:
- .e2e-trigger-base
- .qa:rules:package-and-test-ee
needs:
- build-assets-image
- build-qa-image
- e2e-test-pipeline-generate
variables:
RELEASE: "${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ee:${CI_COMMIT_SHA}"
QA_RUN_TYPE: e2e-package-and-test
ALLURE_JOB_NAME: e2e-package-and-test
PIPELINE_NAME: E2E Omnibus GitLab EE
e2e:package-and-test-ce:
extends:
- e2e:package-and-test-ee
- .qa:rules:package-and-test-ce
needs:
- build-assets-image as-if-foss
- build-qa-image as-if-foss
- e2e-test-pipeline-generate
variables:
FOSS_ONLY: "1"
RELEASE: ${REGISTRY_HOST}/${REGISTRY_GROUP}/build/omnibus-gitlab-mirror/gitlab-ce:${CI_COMMIT_SHA}
GITLAB_QA_IMAGE: ${CI_REGISTRY_IMAGE}/gitlab-ce-qa:${CI_COMMIT_SHA}
QA_RUN_TYPE: e2e-package-and-test-ce
ALLURE_JOB_NAME: e2e-package-and-test-ce
PIPELINE_NAME: E2E Omnibus GitLab CE
e2e:package-and-test-super-sidebar:
extends:
- e2e:package-and-test-ee
- .qa:rules:package-and-test-sidebar
when: manual
variables:
QA_SUPER_SIDEBAR_ENABLED: "true"
EXTRA_GITLAB_QA_OPTS: --set-feature-flags super_sidebar_nav=enabled
QA_RUN_TYPE: e2e-package-and-test-super-sidebar
ALLURE_JOB_NAME: e2e-package-and-test-super-sidebar
PIPELINE_NAME: E2E Omnibus Super Sidebar
e2e:package-and-test-nightly:
extends:
- .e2e-trigger-base
- .qa:rules:package-and-test-nightly
needs:
- build-assets-image
- build-assets-image as-if-foss
- build-qa-image
- build-qa-image as-if-foss
- e2e-test-pipeline-generate
variables:
GITLAB_SEMVER_VERSION: $GITLAB_SEMVER_VERSION
QA_RUN_TYPE: nightly
ALLURE_JOB_NAME: nightly
PIPELINE_NAME: E2E Omnibus GitLab Nightly
DYNAMIC_PIPELINE_YML: package-and-test-nightly-pipeline.yml
e2e:test-on-gdk:
extends:
- .e2e-trigger-base
- .qa:rules:e2e:test-on-gdk
stage: qa
needs:
# In scheduled master pipelines we wait for the image to be built.
# In MRs we assume the last scheduled master pipeline built the image already.
- job: build-qa-on-gdk-master-image
optional: true
- job: e2e-test-pipeline-generate
artifacts: true
variables:
ALLURE_JOB_NAME: e2e-test-on-gdk
QA_RUN_TYPE: e2e-test-on-gdk
PIPELINE_NAME: E2E GDK
DYNAMIC_PIPELINE_YML: test-on-gdk-pipeline.yml
SKIP_MESSAGE: Skipping test-on-gdk due to mr containing only quarantine changes!
allow_failure: true allow_failure: true
only:
- /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ce
- /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ee

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,90 @@
# RSpec FOSS impact pipeline loaded dynamically by script: scripts/generate_rspec_pipeline.rb
include:
- local: .gitlab/ci/rails/shared.gitlab-ci.yml
default:
image: $DEFAULT_CI_IMAGE
tags:
- gitlab-org
# Default job timeout set to 90m https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10520
timeout: 90m
interruptible: true
stages:
- test
dont-interrupt-me:
extends: .rules:dont-interrupt
stage: .pre
interruptible: false
script:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
.base-rspec-foss-impact:
extends: .rspec-base-pg13-as-if-foss
needs:
- pipeline: $PARENT_PIPELINE_ID
job: detect-tests
- pipeline: $PARENT_PIPELINE_ID
job: setup-test-env
- pipeline: $PARENT_PIPELINE_ID
job: retrieve-tests-metadata
- pipeline: $PARENT_PIPELINE_ID
job: compile-test-assets as-if-foss
rules:
- when: always
variables:
RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
RSPEC_TESTS_MAPPING_ENABLED: "true"
script:
- !reference [.base-script, script]
- rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration --tag ~zoekt"
artifacts:
expire_in: 7d
paths:
- "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
- tmp/capybara/
<% if rspec_files_per_test_level[:migration][:files].size > 0 %>
rspec migration foss-impact:
extends: .base-rspec-foss-impact
<% if rspec_files_per_test_level[:migration][:parallelization] > 1 %>
parallel: <%= rspec_files_per_test_level[:migration][:parallelization] %>
<% end %>
script:
- !reference [.base-script, script]
- rspec_paralellized_job "--tag ~quarantine --tag ~zoekt"
<% end %>
<% if rspec_files_per_test_level[:background_migration][:files].size > 0 %>
rspec background_migration foss-impact:
extends: .base-rspec-foss-impact
<% if rspec_files_per_test_level[:background_migration][:parallelization] > 1 %>
parallel: <%= rspec_files_per_test_level[:background_migration][:parallelization] %>
<% end %>
<% end %>
<% if rspec_files_per_test_level[:unit][:files].size > 0 %>
rspec unit foss-impact:
extends: .base-rspec-foss-impact
<% if rspec_files_per_test_level[:unit][:parallelization] > 1 %>
parallel: <%= rspec_files_per_test_level[:unit][:parallelization] %>
<% end %>
<% end %>
<% if rspec_files_per_test_level[:integration][:files].size > 0 %>
rspec integration foss-impact:
extends: .base-rspec-foss-impact
<% if rspec_files_per_test_level[:integration][:parallelization] > 1 %>
parallel: <%= rspec_files_per_test_level[:integration][:parallelization] %>
<% end %>
<% end %>
<% if rspec_files_per_test_level[:system][:files].size > 0 %>
rspec system foss-impact:
extends: .base-rspec-foss-impact
<% if rspec_files_per_test_level[:system][:parallelization] > 1 %>
parallel: <%= rspec_files_per_test_level[:system][:parallelization] %>
<% end %>
<% end %>

View file

@ -0,0 +1,153 @@
# RSpec preditive pipeline loaded dynamically by script: scripts/generate_rspec_pipeline.rb
include:
- local: .gitlab/ci/rails/shared.gitlab-ci.yml
default:
image: $DEFAULT_CI_IMAGE
tags:
- gitlab-org
# Default job timeout set to 90m https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10520
timeout: 90m
interruptible: true
stages:
- test
dont-interrupt-me:
extends: .rules:dont-interrupt
stage: .pre
interruptible: false
script:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
.base-predictive:
needs:
- pipeline: $PARENT_PIPELINE_ID
job: detect-tests
- pipeline: $PARENT_PIPELINE_ID
job: setup-test-env
- pipeline: $PARENT_PIPELINE_ID
job: retrieve-tests-metadata
- pipeline: $PARENT_PIPELINE_ID
job: compile-test-assets
rules:
- when: always
variables:
RSPEC_TESTS_MAPPING_ENABLED: "true"
<% if test_suite_prefix.nil? %>
.base-rspec-predictive:
extends:
- .rspec-base-pg12
- .base-predictive
variables:
# We're using the FOSS one here because we want to exclude EE-only ones
# For EE-only ones, we have EE-only jobs.
RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_FOSS_PATH}"
<% if rspec_files_per_test_level.dig(:migration, :files).size > 0 %>
rspec migration predictive:
extends:
- .base-rspec-predictive
- .rspec-base-migration
<% if rspec_files_per_test_level.dig(:migration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:migration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:background_migration, :files).size > 0 %>
rspec background_migration predictive:
extends:
- .base-rspec-predictive
- .rspec-base-migration
<% if rspec_files_per_test_level.dig(:background_migration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:background_migration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:unit, :files).size > 0 %>
rspec unit predictive:
extends:
- .base-rspec-predictive
<% if rspec_files_per_test_level.dig(:unit, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:unit, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:integration, :files).size > 0 %>
rspec integration predictive:
extends:
- .base-rspec-predictive
<% if rspec_files_per_test_level.dig(:integration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:integration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:system, :files).size > 0 %>
rspec system predictive:
extends:
- .base-rspec-predictive
<% if rspec_files_per_test_level.dig(:system, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:system, :parallelization) %>
<% end %>
<% end %>
<% end %>
<% if test_suite_prefix == 'ee/' %>
.base-rspec-ee-predictive:
extends:
- .rspec-ee-base-pg12
- .base-predictive
variables:
RSPEC_TESTS_FILTER_FILE: "${RSPEC_MATCHING_TESTS_EE_PATH}"
<% if rspec_files_per_test_level.dig(:migration, :files).size > 0 %>
rspec-ee migration predictive:
extends:
- .base-rspec-ee-predictive
- .rspec-base-migration
<% if rspec_files_per_test_level.dig(:migration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:migration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:background_migration, :files).size > 0 %>
rspec-ee background_migration predictive:
extends:
- .base-rspec-ee-predictive
- .rspec-base-migration
<% if rspec_files_per_test_level.dig(:background_migration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:background_migration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:unit, :files).size > 0 %>
rspec-ee unit predictive:
extends:
- .base-rspec-ee-predictive
<% if rspec_files_per_test_level.dig(:unit, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:unit, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:integration, :files).size > 0 %>
rspec-ee integration predictive:
extends:
- .base-rspec-ee-predictive
<% if rspec_files_per_test_level.dig(:integration, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:integration, :parallelization) %>
<% end %>
<% end %>
<% if rspec_files_per_test_level.dig(:system, :files).size > 0 %>
rspec-ee system predictive:
extends:
- .base-rspec-ee-predictive
<% if rspec_files_per_test_level.dig(:system, :parallelization) > 1 %>
parallel: <%= rspec_files_per_test_level.dig(:system, :parallelization) %>
<% end %>
<% end %>
<% end %>

View file

@ -0,0 +1,218 @@
include:
- local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/rules.gitlab-ci.yml
.rules:dont-interrupt:
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
allow_failure: true
- if: $CI_MERGE_REQUEST_IID
when: manual
allow_failure: true
#######################
# rspec job base specs
.rails-job-base:
extends:
- .default-retry
- .default-before_script
- .rails-cache
.base-script:
script:
- source ./scripts/rspec_helpers.sh
# Only install knapsack after bundle install! Otherwise oddly some native
# gems could not be found under some circumstance. No idea why, hours wasted.
- run_timed_command "gem install knapsack --no-document"
- echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"
- section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn" # Do not use 'bundle exec' here
- echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"
.single-db:
variables:
DECOMPOSED_DB: "false"
.single-db-ci-connection:
extends: .single-db
variables:
CI_CONNECTION_DB: "true"
.single-db-rspec:
extends: .single-db
.single-db-ci-connection-rspec:
extends: .single-db-ci-connection
.praefect-with-db:
variables:
GITALY_PRAEFECT_WITH_DB: '1'
.rspec-base:
extends:
- .rails-job-base
- .base-artifacts
stage: test
variables:
RUBY_GC_MALLOC_LIMIT: 67108864
RUBY_GC_MALLOC_LIMIT_MAX: 134217728
RECORD_DEPRECATIONS: "true"
GEO_SECONDARY_PROXY: 0
SUCCESSFULLY_RETRIED_TEST_EXIT_CODE: 137
needs:
- job: "setup-test-env"
- job: "retrieve-tests-metadata"
- job: "compile-test-assets"
- job: "detect-tests"
optional: true
script:
- !reference [.base-script, script]
# We need to exclude background migration because unit tests run with
# spec/lib, yet background migration tests are also sitting there,
# and they should run on their own jobs so we don't need to run them
# in unit tests again.
- rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration"
allow_failure:
exit_codes: !reference [.rspec-base, variables, SUCCESSFULLY_RETRIED_TEST_EXIT_CODE]
.base-artifacts:
artifacts:
expire_in: 31d
when: always
paths:
- coverage/
- crystalball/
- deprecations/
- knapsack/
- query_recorder/
- rspec/
- tmp/capybara/
- log/*.log
reports:
junit: ${JUNIT_RESULT_FILE}
.rspec-base-migration:
script:
- !reference [.base-script, script]
- rspec_paralellized_job "--tag ~quarantine --tag ~zoekt"
.rspec-base-pg12:
extends:
- .rspec-base
- .use-pg12
.rspec-base-pg13:
extends:
- .rspec-base
- .use-pg13
.rspec-base-pg13-as-if-foss:
extends:
- .rspec-base
- .as-if-foss
- .use-pg13
needs:
- job: "setup-test-env"
- job: "retrieve-tests-metadata"
- job: "compile-test-assets as-if-foss"
- job: "detect-tests"
optional: true
.rspec-base-pg14:
extends:
- .rspec-base
- .use-pg14
.rspec-ee-base-pg12:
extends:
- .rspec-base
- .use-pg12-es7-ee
.rspec-ee-base-pg13:
extends:
- .rspec-base
- .use-pg13-es7-ee
.rspec-ee-base-pg13-es8:
extends:
- .rspec-base
- .use-pg13-es8-ee
- .rails:rules:run-search-tests
.rspec-ee-base-pg13-opensearch1:
extends:
- .rspec-base
- .use-pg13-opensearch1-ee
- .rails:rules:run-search-tests
.rspec-ee-base-pg13-opensearch2:
extends:
- .rspec-base
- .use-pg13-opensearch2-ee
- .rails:rules:run-search-tests
.rspec-ee-base-pg14:
extends:
- .rspec-base
- .use-pg14-es7-ee
.rspec-ee-base-pg14-es8:
extends:
- .rspec-base
- .use-pg14-es8-ee
- .rails:rules:run-search-tests
.rspec-ee-base-pg14-opensearch1:
extends:
- .rspec-base
- .use-pg14-opensearch1-ee
- .rails:rules:run-search-tests
.rspec-ee-base-pg14-opensearch2:
extends:
- .rspec-base
- .use-pg14-opensearch2-ee
- .rails:rules:run-search-tests
.db-job-base:
extends:
- .rails-job-base
- .rails:rules:ee-and-foss-migration
- .use-pg13
stage: test
needs: ["setup-test-env"]
# rspec job base specs
######################
############################
# rspec job parallel configs
.rspec-migration-parallel:
parallel: 8
.rspec-background-migration-parallel:
parallel: 4
.rspec-ee-migration-parallel:
parallel: 2
.rspec-ee-background-migration-parallel:
parallel: 2
.rspec-unit-parallel:
parallel: 28
.rspec-ee-unit-parallel:
parallel: 18
.rspec-integration-parallel:
parallel: 12
.rspec-ee-integration-parallel:
parallel: 6
.rspec-system-parallel:
parallel: 28
.rspec-ee-system-parallel:
parallel: 10
# rspec job parallel configs
############################

View file

@ -0,0 +1,23 @@
---
start-release-environments-pipeline:
allow_failure: true
extends:
- .release-environments:rules:start-release-environments-pipeline
stage: release-environments
# We do not want to have ALL global variables passed as trigger variables,
# as they cannot be overridden. See this issue for more context:
#
# https://gitlab.com/gitlab-org/gitlab/-/issues/387183
inherit:
variables:
- RUBY_VERSION
# These variables are set in the pipeline schedules.
# They need to be explicitly passed on to the child pipeline.
# https://docs.gitlab.com/ee/ci/pipelines/multi_project_pipelines.html#pass-cicd-variables-to-a-downstream-pipeline-by-using-the-variables-keyword
variables:
# This is needed by `release-environments-build-cng-env` (`.gitlab/ci/release-environments/main.gitlab-ci.yml`).
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
trigger:
strategy: depend
include: .gitlab/ci/release-environments/main.gitlab-ci.yml

View file

@ -0,0 +1,94 @@
---
default:
interruptible: true
stages:
- prepare
- deploy
include:
- local: .gitlab/ci/global.gitlab-ci.yml
release-environments-build-cng-env:
allow_failure: true
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
stage: prepare
needs:
# We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream CNG pipeline.
- pipeline: $PARENT_PIPELINE_ID
job: build-assets-image
variables:
BUILD_ENV: build.env
before_script:
- source ./scripts/utils.sh
- install_gitlab_gem
script:
- 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > $BUILD_ENV'
- echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
- ruby -e 'puts "FULL_RUBY_VERSION=#{RUBY_VERSION}"' >> build.env
- cat $BUILD_ENV
artifacts:
reports:
dotenv: $BUILD_ENV
paths:
- $BUILD_ENV
expire_in: 7 days
when: always
release-environments-build-cng:
allow_failure: true
stage: prepare
needs: ["release-environments-build-cng-env"]
inherit:
variables: false
variables:
GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}"
# CNG pipeline specific variables
GITLAB_VERSION: "${GITLAB_VERSION}"
GITLAB_TAG: "${GITLAB_TAG}"
GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}"
FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}"
CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty
EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty
GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}"
GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}"
GITLAB_METRICS_EXPORTER_VERSION: "${GITLAB_METRICS_EXPORTER_VERSION}"
GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}"
GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}"
GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}"
RUBY_VERSION: "${FULL_RUBY_VERSION}"
IMAGE_TAG_EXT: "-${CI_COMMIT_SHORT_SHA}"
trigger:
project: gitlab-org/build/CNG-mirror
branch: $TRIGGER_BRANCH
strategy: depend
release-environments-deploy-env:
allow_failure: true
stage: deploy
needs: ["release-environments-build-cng"]
variables:
DEPLOY_ENV: deploy.env
script:
- ./scripts/construct-release-environments-versions.rb > $DEPLOY_ENV
artifacts:
reports:
dotenv: $DEPLOY_ENV
paths:
- $DEPLOY_ENV
expire_in: 7 days
when: always
release-environments-deploy:
allow_failure: true
stage: deploy
needs: ["release-environments-deploy-env"]
inherit:
variables: false
variables:
VERSIONS: "${VERSIONS}"
ENVIRONMENT: "${ENVIRONMENT}"
trigger:
project: gitlab-com/gl-infra/release-environments
branch: main
strategy: depend

View file

@ -0,0 +1,28 @@
# Syncs any changes pushed to a stable branch to the corresponding
# gitlab-foss/CE stable branch. We run this prior to any tests so that random
# failures don't prevent a sync.
.merge-train-sync:
# We don't need/want any global before/after commands, so we overwrite these
# settings.
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:edge
stage: sync
before_script:
- apk add --no-cache --update curl bash jq
script:
- bash scripts/sync-stable-branch.sh
sync-stable-branch:
extends:
- .releases:rules:canonical-dot-com-gitlab-stable-branch-only
- .merge-train-sync
variables:
SOURCE_PROJECT: gitlab-org/gitlab
TARGET_PROJECT: gitlab-org/gitlab-foss
sync-security-branch:
extends:
- .releases:rules:canonical-dot-com-security-gitlab-stable-branch-only
- .merge-train-sync
variables:
SOURCE_PROJECT: gitlab-org/security/gitlab
TARGET_PROJECT: gitlab-org/security/gitlab-foss

View file

@ -1,26 +1,127 @@
include: include:
- template: Code-Quality.gitlab-ci.yml - template: Jobs/Code-Quality.gitlab-ci.yml
- template: Security/SAST.gitlab-ci.yml - template: Jobs/SAST.gitlab-ci.yml
- template: Security/Dependency-Scanning.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
code_quality: code_quality:
extends: .dedicated-no-docs extends:
# gitlab-org runners set `privileged: false` but we need to have it set to true - .default-retry
# since we're using Docker in Docker - .use-docker-in-docker
tags: [] stage: lint
before_script: [] artifacts:
cache: {} paths:
- gl-code-quality-report.json # GitLab-specific
# extends generated values cannot overwrite values from included files
# Use !reference as a workaround here
rules: !reference [".reports:rules:code_quality", rules]
allow_failure: true
sast: .sast-analyzer:
extends: .dedicated-no-docs # We need to re-`extends` from `sast` as the `extends` here overrides the one from the template.
tags: [] extends:
before_script: [] - .default-retry
cache: {} - sast
stage: lint
needs: []
artifacts:
paths:
- gl-sast-report.json # GitLab-specific
expire_in: 1 week # GitLab-specific
variables: variables:
SAST_BRAKEMAN_LEVEL: 2 SAST_BRAKEMAN_LEVEL: 2 # GitLab-specific
SAST_EXCLUDED_PATHS: "qa, spec, doc, ee/spec, config/gitlab.yml.example, tmp" # GitLab-specific
SAST_EXCLUDED_ANALYZERS: bandit, flawfinder, phpcs-security-audit, pmd-apex, security-code-scan, spotbugs, eslint, nodejs-scan, sobelow
dependency_scanning: brakeman-sast:
extends: .dedicated-no-docs rules: !reference [".reports:rules:brakeman-sast", rules]
tags: []
before_script: [] semgrep-sast:
cache: {} rules: !reference [".reports:rules:semgrep-sast", rules]
.secret-analyzer:
extends: .default-retry
stage: lint
needs: []
artifacts:
paths:
- gl-secret-detection-report.json # GitLab-specific
expire_in: 1 week # GitLab-specific
secret_detection:
rules: !reference [".reports:rules:secret_detection", rules]
.ds-analyzer:
# We need to re-`extends` from `dependency_scanning` as the `extends` here overrides the one from the template.
extends:
- .default-retry
- dependency_scanning
stage: lint
needs: []
variables:
DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports, spec, ee/spec, tmp" # GitLab-specific
DS_EXCLUDED_ANALYZERS: "gemnasium-maven"
artifacts:
paths:
- gl-dependency-scanning-report.json # GitLab-specific
expire_in: 1 week # GitLab-specific
gemnasium-dependency_scanning:
variables:
DS_REMEDIATE: "false"
rules: !reference [".reports:rules:gemnasium-dependency_scanning", rules]
gemnasium-python-dependency_scanning:
rules: !reference [".reports:rules:gemnasium-python-dependency_scanning", rules]
yarn-audit-dependency_scanning:
extends: .ds-analyzer
image: "${REGISTRY_HOST}/${REGISTRY_GROUP}/security-products/analyzers/npm-audit:1"
variables:
TOOL: yarn
rules: !reference [".reports:rules:yarn-audit-dependency_scanning", rules]
# Analyze dependencies for malicious behavior
# See https://gitlab.com/gitlab-com/gl-security/security-research/package-hunter
.package_hunter-base:
extends: .default-retry
stage: test
image:
name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/security-products/package-hunter-cli:v1.3.3@sha256:1d3af9a61aa01549a62be17fa655fcf06271ac9e1b1e822c2a7930fa1d4a8a6b
entrypoint: [""]
variables:
HTR_user: '$PACKAGE_HUNTER_USER'
HTR_pass: '$PACKAGE_HUNTER_PASS'
needs: []
allow_failure: true
before_script:
- rm -r spec locale .git app/assets/images doc/
- cd .. && tar -I "gzip --best" -cf gitlab.tgz gitlab/
script:
- DEBUG=* node /usr/src/app/cli.js analyze --format gitlab --manager ${PACKAGE_MANAGER} gitlab.tgz | tee ${CI_PROJECT_DIR}/gl-dependency-scanning-report.json
after_script:
- mkdir ~/.aws
- '[[ -z "${AWS_SIEM_REPORT_INGESTION_CREDENTIALS_FILE}" ]] || mv "${AWS_SIEM_REPORT_INGESTION_CREDENTIALS_FILE}" ~/.aws/credentials'
- npm install --no-save --ignore-scripts @aws-sdk/client-s3@3.49.0
- scripts/ingest-reports-to-siem || true # Allow legacy report to fail as we'll remove it in the future anyway
- scripts/ingest-reports-to-siem-devo
artifacts:
paths:
- gl-dependency-scanning-report.json
reports:
dependency_scanning: gl-dependency-scanning-report.json
expire_in: 1 week
package_hunter-yarn:
extends:
- .package_hunter-base
- .reports:rules:package_hunter-yarn
variables:
PACKAGE_MANAGER: yarn
package_hunter-bundler:
extends:
- .package_hunter-base
- .reports:rules:package_hunter-bundler
variables:
PACKAGE_MANAGER: bundler

View file

@ -0,0 +1,35 @@
include:
- template: DAST-API.gitlab-ci.yml
dast_api:
needs: ["review-deploy"]
# Uncomment resource_group if DAST_API_PROFILE is changed to an active scan
# resource_group: dast_api_scan
rules:
- when: never
dast_api_graphql:
extends: dast_api
variables:
DAST_API_GRAPHQL: /api/graphql
DAST_API_PROFILE: Passive
DAST_API_TARGET_URL: ${CI_ENVIRONMENT_URL}
DAST_API_OVERRIDES_ENV: "{\"headers\":{\"Authorization\":\"Bearer $REVIEW_APPS_ROOT_TOKEN\"}}"
rules:
- !reference [".reports:rules:schedule-dast", rules]
#
# To run this job in an MR pipeline, use this rule:
# - !reference [".reports:rules:test-dast", rules]
dast_api_rest:
extends: dast_api
variables:
DAST_API_OPENAPI: doc/api/openapi/openapi_v2.yaml
DAST_API_PROFILE: Passive
DAST_API_TARGET_URL: ${CI_ENVIRONMENT_URL}
DAST_API_OVERRIDES_ENV: "{\"headers\":{\"Authorization\":\"Bearer $REVIEW_APPS_ROOT_TOKEN\"}}"
rules:
- !reference [".reports:rules:schedule-dast", rules]
#
# To run this job in an MR pipeline, use this rule:
# - !reference [".reports:rules:test-dast", rules]

View file

@ -0,0 +1,106 @@
.dast_conf:
tags:
- prm
# For scheduling dast job
extends:
- .reports:rules:schedule-dast
image:
name: "${CI_TEMPLATE_REGISTRY_HOST}/security-products/dast:$DAST_VERSION"
resource_group: dast_scan
variables:
DAST_USERNAME_FIELD: "name:user[login]"
DAST_PASSWORD_FIELD: "name:user[password]"
DAST_SUBMIT_FIELD: "css:.js-sign-in-button"
DAST_FULL_SCAN_ENABLED: "true"
DAST_VERSION: 3
GIT_STRATEGY: none
# -Xmx is used to set the JVM memory to 6GB to prevent DAST OutOfMemoryError.
DAST_ZAP_CLI_OPTIONS: "-Xmx6144m"
before_script:
- 'export DAST_WEBSITE="${DAST_WEBSITE:-$(cat environment_url.txt)}"'
- 'export DAST_AUTH_URL="${DAST_WEBSITE}/users/sign_in"'
- 'export DAST_PASSWORD="${REVIEW_APPS_ROOT_PASSWORD}"'
# Help pages are excluded from scan as they are static pages.
# profile/two_factor_auth is excluded from scan to prevent 2FA from being turned on from user profile, which will reduce coverage.
- 'DAST_EXCLUDE_URLS="${DAST_WEBSITE}/help/.*,${DAST_WEBSITE}/-/profile/two_factor_auth,${DAST_WEBSITE}/users/sign_out"'
# Exclude the automatically generated monitoring project from being tested due to https://gitlab.com/gitlab-org/gitlab/-/issues/260362
- 'export DAST_EXCLUDE_URLS="${DAST_EXCLUDE_URLS},${DAST_WEBSITE}/gitlab-instance-.*"'
needs: ["review-deploy"]
stage: dast
# Default job timeout set to 90m and dast rules needs 2h to so that it won't timeout.
timeout: 3h
# Add retry because of intermittent connection problems. See https://gitlab.com/gitlab-org/gitlab/-/issues/244313
retry: 1
artifacts:
paths:
- gl-dast-report.json # GitLab-specific
reports:
dast: gl-dast-report.json
expire_in: 1 week # GitLab-specific
allow_failure: true
# DAST scan with a subset of Release scan rules.
# ZAP rule details can be found at https://www.zaproxy.org/docs/alerts/
dast:anti-clickjacking-header:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user1"
DAST_ONLY_INCLUDE_RULES: "10020"
script:
- /analyze
dast:xss-persistant:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user2"
DAST_ONLY_INCLUDE_RULES: "40014"
script:
- /analyze
dast:insecure-http-method:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user3"
DAST_ONLY_INCLUDE_RULES: "90028"
script:
- /analyze
dast:server-side-template-inj:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user4"
DAST_ONLY_INCLUDE_RULES: "90035"
script:
- /analyze
dast:server-side-template-inj-blind:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user5"
DAST_ONLY_INCLUDE_RULES: "90035"
script:
- /analyze
dast:session-fixation:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user6"
DAST_ONLY_INCLUDE_RULES: "40013"
script:
- /analyze
dast:xss-dombased:
extends:
- .dast_conf
variables:
DAST_USERNAME: "user10"
DAST_ONLY_INCLUDE_RULES: "40026"
script:
- /analyze

View file

@ -0,0 +1,203 @@
default:
interruptible: true
stages:
- prepare
- deploy
- post-deploy
- qa
- post-qa
- dast
include:
- local: .gitlab/ci/global.gitlab-ci.yml
- local: .gitlab/ci/review-apps/rules.gitlab-ci.yml
- local: .gitlab/ci/review-apps/qa.gitlab-ci.yml
- local: .gitlab/ci/review-apps/dast.gitlab-ci.yml
- local: .gitlab/ci/review-apps/dast-api.gitlab-ci.yml
.base-before_script: &base-before_script
- source ./scripts/utils.sh
- source ./scripts/review_apps/review-apps.sh
dont-interrupt-me:
extends: .rules:dont-interrupt
stage: prepare
interruptible: false
script:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
review-build-cng-env:
extends:
- .default-retry
- .review:rules:review-build-cng
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
stage: prepare
needs:
# We need this job because we need its `cached-assets-hash.txt` artifact, so that we can pass the assets image tag to the downstream CNG pipeline.
- pipeline: $PARENT_PIPELINE_ID
job: build-assets-image
variables:
BUILD_ENV: build.env
before_script:
- source ./scripts/utils.sh
- install_gitlab_gem
script:
- 'ruby -r./scripts/trigger-build.rb -e "puts Trigger.variables_for_env_file(Trigger::CNG.new.variables)" > $BUILD_ENV'
- echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV
- ruby -e 'puts "FULL_RUBY_VERSION=#{RUBY_VERSION}"' >> build.env
- cat $BUILD_ENV
artifacts:
reports:
dotenv: $BUILD_ENV
paths:
- $BUILD_ENV
expire_in: 7 days
when: always
review-build-cng:
extends: .review:rules:review-build-cng
stage: prepare
needs: ["review-build-cng-env"]
inherit:
variables: false
variables:
TOP_UPSTREAM_SOURCE_PROJECT: "${TOP_UPSTREAM_SOURCE_PROJECT}"
TOP_UPSTREAM_SOURCE_REF: "${TOP_UPSTREAM_SOURCE_REF}"
TOP_UPSTREAM_SOURCE_JOB: "${TOP_UPSTREAM_SOURCE_JOB}"
TOP_UPSTREAM_SOURCE_SHA: "${TOP_UPSTREAM_SOURCE_SHA}"
TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID: "${TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID}"
TOP_UPSTREAM_MERGE_REQUEST_IID: "${TOP_UPSTREAM_MERGE_REQUEST_IID}"
GITLAB_REF_SLUG: "${GITLAB_REF_SLUG}"
# CNG pipeline specific variables
GITLAB_VERSION: "${GITLAB_VERSION}"
GITLAB_TAG: "${GITLAB_TAG}"
GITLAB_ASSETS_TAG: "${GITLAB_ASSETS_TAG}"
FORCE_RAILS_IMAGE_BUILDS: "${FORCE_RAILS_IMAGE_BUILDS}"
CE_PIPELINE: "${CE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$CE_PIPELINE'` will evaluate to `false` when this variable is empty
EE_PIPELINE: "${EE_PIPELINE}" # Based on https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-exists, `if: '$EE_PIPELINE'` will evaluate to `false` when this variable is empty
GITLAB_ELASTICSEARCH_INDEXER_VERSION: "${GITLAB_ELASTICSEARCH_INDEXER_VERSION}"
GITLAB_KAS_VERSION: "${GITLAB_KAS_VERSION}"
GITLAB_METRICS_EXPORTER_VERSION: "${GITLAB_METRICS_EXPORTER_VERSION}"
GITLAB_PAGES_VERSION: "${GITLAB_PAGES_VERSION}"
GITLAB_SHELL_VERSION: "${GITLAB_SHELL_VERSION}"
GITLAB_WORKHORSE_VERSION: "${GITLAB_WORKHORSE_VERSION}"
GITALY_SERVER_VERSION: "${GITALY_SERVER_VERSION}"
RUBY_VERSION: "${FULL_RUBY_VERSION}"
trigger:
project: gitlab-org/build/CNG-mirror
branch: $TRIGGER_BRANCH
strategy: depend
.review-workflow-base:
image: ${REVIEW_APPS_IMAGE}
retry:
max: 2 # This is confusing but this means "3 runs at max"
variables:
HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}"
DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}"
GITLAB_HELM_CHART_REF: "febc4ad69acb7bba0eeb4a62daa577d0b7c3ee71" # 6.9.1: https://gitlab.com/gitlab-org/charts/gitlab/-/commit/febc4ad69acb7bba0eeb4a62daa577d0b7c3ee71
environment:
name: review/${CI_COMMIT_REF_SLUG}${SCHEDULE_TYPE} # No separator for SCHEDULE_TYPE so it's compatible as before and looks nice without it
url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}
on_stop: trigger-review-stop
review-deploy:
extends:
- .review-workflow-base
- .review:rules:review-deploy
stage: deploy
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}dtzar/helm-kubectl:3.9.3
needs:
- review-build-cng
- review-delete-deployment # We always want to start from a clean slate (i.e. no helm release, no k8s namespace)
cache:
key: "review-deploy-dependencies-charts-${GITLAB_HELM_CHART_REF}-v1"
paths:
- "gitlab-${GITLAB_HELM_CHART_REF}"
environment:
action: start
before_script:
- export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION)
- export GITALY_VERSION=$(<GITALY_SERVER_VERSION)
- export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION)
- echo "${CI_ENVIRONMENT_URL}" > environment_url.txt
- echo "QA_GITLAB_URL=${CI_ENVIRONMENT_URL}" > environment.env
- *base-before_script
- !reference [".use-kube-context", before_script]
script:
- run_timed_command "retry delete_helm_release"
- run_timed_command "check_kube_domain"
- run_timed_command "download_chart"
- run_timed_command "deploy" || (display_deployment_debug && exit 1)
- run_timed_command "verify_deploy" || (display_deployment_debug && exit 1)
- run_timed_command "disable_sign_ups" || (display_deployment_debug && exit 1)
- run_timed_command "verify_commit_sha" || (display_deployment_debug && exit 1)
after_script:
# Run seed-dast-test-data.sh only when DAST_RUN is set to true. This is to pupulate review app with data for DAST scan.
# Set DAST_RUN to true when jobs are manually scheduled.
- if [ "$DAST_RUN" == "true" ]; then source scripts/review_apps/seed-dast-test-data.sh; TRACE=1 trigger_proj_user_creation; fi
artifacts:
paths:
- environment_url.txt
- curl-logs/
reports:
dotenv: environment.env
expire_in: 7 days
when: always
review-deploy-sample-projects:
extends:
- .review-workflow-base
- .review:rules:review-deploy
stage: deploy
needs: ["review-deploy"]
environment:
action: prepare
before_script:
- export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION)
- export GITALY_VERSION=$(<GITALY_SERVER_VERSION)
- export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION)
- echo "${CI_ENVIRONMENT_URL}" > environment_url.txt
- *base-before_script
- !reference [".use-kube-context", before_script]
script:
- date
- create_sample_projects
.review-stop-base:
extends: .review-workflow-base
environment:
action: stop
variables:
# We're cloning the repo instead of downloading the script for now
# because some repos are private and CI_JOB_TOKEN cannot access files.
# See https://gitlab.com/gitlab-org/gitlab/issues/191273
GIT_DEPTH: 1
review-delete-deployment:
extends:
- .review-stop-base
- .review:rules:review-delete-deployment
dependencies: []
stage: prepare
before_script:
- source ./scripts/utils.sh
- source ./scripts/review_apps/review-apps.sh
- !reference [".use-kube-context", before_script]
script:
- retry delete_helm_release
trigger-review-stop:
extends:
- .review-stop-base
- .review:rules:trigger-review-stop
stage: deploy
needs: []
before_script:
- source ./scripts/utils.sh
- install_gitlab_gem
script:
- review_stop_job_id="$(scripts/api/get_job_id.rb --pipeline-id "${PARENT_PIPELINE_ID}" --job-name "review-stop")"
- |
curl --request POST --header "Private-Token: ${PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${review_stop_job_id}/play"

View file

@ -0,0 +1,182 @@
include:
- project: gitlab-org/quality/pipeline-common
ref: 5.1.1
file:
- /ci/base.gitlab-ci.yml
- /ci/allure-report.yml
- /ci/knapsack-report.yml
- template: Verify/Browser-Performance.gitlab-ci.yml
.test-variables:
variables:
QA_GENERATE_ALLURE_REPORT: "true"
QA_CAN_TEST_PRAEFECT: "false"
GITLAB_USERNAME: "root"
GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITLAB_ADMIN_USERNAME: "root"
GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITLAB_QA_ADMIN_ACCESS_TOKEN: "${REVIEW_APPS_ROOT_TOKEN}"
GITHUB_ACCESS_TOKEN: "${QA_GITHUB_ACCESS_TOKEN}"
.bundle-base:
extends:
- .qa-cache
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3
before_script:
- cd qa && bundle install
.review-qa-base:
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-git-2.36-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23
extends:
- .use-docker-in-docker
- .bundle-base
- .test-variables
stage: qa
needs:
- review-deploy
- download-knapsack-report
variables:
GIT_LFS_SKIP_SMUDGE: 1
WD_INSTALL_DIR: /usr/local/bin
RSPEC_REPORT_OPTS: --force-color --order random --format documentation --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml
script:
- QA_COMMAND="bundle exec bin/qa ${QA_SCENARIO} ${QA_GITLAB_URL} -- ${QA_TESTS} ${RSPEC_REPORT_OPTS}"
- echo "Running - '${QA_COMMAND}'"
- eval "$QA_COMMAND"
after_script:
- |
echo "Sentry errors for the current review-app test run can be found via following url:"
echo "https://sentry.gitlab.net/gitlab/gitlab-review-apps/releases/$(echo "${CI_COMMIT_SHA}" | cut -c1-11)/all-events/."
artifacts:
paths:
- qa/tmp
reports:
junit: qa/tmp/rspec-*.xml
expire_in: 7 days
when: always
# Store knapsack report as artifact so the same report is reused across all jobs
download-knapsack-report:
extends:
- .bundle-base
- .rules:prepare-report
stage: prepare
script:
- bundle exec rake "knapsack:download[qa]"
allow_failure: true
artifacts:
paths:
- qa/knapsack/review-qa-*.json
expire_in: 1 day
review-qa-smoke:
extends:
- .review-qa-base
- .rules:qa-smoke
variables:
QA_SCENARIO: Test::Instance::Smoke
QA_RUN_TYPE: review-qa-smoke
retry: 1
review-qa-blocking:
extends:
- .review-qa-base
- .rules:qa-blocking
variables:
QA_SCENARIO: Test::Instance::ReviewBlocking
QA_RUN_TYPE: review-qa-blocking
retry: 1
review-qa-blocking-parallel:
extends:
- review-qa-blocking
- .rules:qa-blocking-parallel
parallel: 10
review-qa-non-blocking:
extends:
- .review-qa-base
- .rules:qa-non-blocking
variables:
QA_SCENARIO: Test::Instance::ReviewNonBlocking
QA_RUN_TYPE: review-qa-non-blocking
when: manual
allow_failure: true
review-qa-non-blocking-parallel:
extends:
- review-qa-non-blocking
- .rules:qa-non-blocking-parallel
parallel: 5
browser_performance:
extends:
- .default-retry
- .review:rules:review-performance
stage: qa
needs: ["review-deploy"]
variables:
URL: environment_url.txt
e2e-test-report:
extends:
- .generate-allure-report-base
- .rules:prepare-report
stage: post-qa
variables:
ALLURE_JOB_NAME: e2e-review-qa
ALLURE_PROJECT_PATH: $CI_PROJECT_PATH
ALLURE_RESULTS_GLOB: qa/tmp/allure-results
ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID
GITLAB_AUTH_TOKEN: $PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE
GIT_STRATEGY: none
allow_failure: true
when: always
upload-knapsack-report:
extends:
- .generate-knapsack-report-base
- .bundle-base
stage: post-qa
variables:
QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/knapsack/*/*.json
delete-test-resources:
extends:
- .bundle-base
- .rules:prepare-report
stage: post-qa
variables:
QA_TEST_RESOURCES_FILE_PATTERN: $CI_PROJECT_DIR/qa/tmp/test-resources-*.json
GITLAB_QA_ACCESS_TOKEN: $REVIEW_APPS_ROOT_TOKEN
script:
- export GITLAB_ADDRESS="$QA_GITLAB_URL"
- bundle exec rake "test_resources:delete[$QA_TEST_RESOURCES_FILE_PATTERN]"
allow_failure: true
when: always
notify-slack:
extends:
- .notify-slack-qa
- .qa-cache
- .rules:main-run
stage: post-qa
variables:
RUN_WITH_BUNDLE: "true"
QA_PATH: qa
ALLURE_JOB_NAME: e2e-review-qa
SLACK_ICON_EMOJI: ci_failing
STATUS_SYM: ☠️
STATUS: failed
TYPE: "(review-app) "
when: on_failure
script:
- bundle exec prepare-stage-reports --input-files "${CI_PROJECT_DIR}/qa/tmp/rspec-*.xml"
- !reference [.notify-slack-qa, script]
export-test-metrics:
extends:
- .bundle-base
- .rules:main-run
stage: post-qa
when: always
script:
- bundle exec rake "ci:export_test_metrics[tmp/test-metrics-*.json]"

View file

@ -0,0 +1,170 @@
# ------------------------------------------
# Conditions
# ------------------------------------------
# Specific specs passed
.specific-specs: &specific-specs
if: $QA_TESTS != ""
# No specific specs passed
.all-specs: &all-specs
if: $QA_TESTS == ""
# No specific specs in mr pipeline
.all-specs-mr: &all-specs-mr
if: '($CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached") && $QA_TESTS == ""'
when: manual
# Triggered by change pattern
.app-changes: &app-changes
if: $APP_CHANGE_TRIGGER == "true"
# Run all tests when framework changes present or explicitly enabled full suite execution
.qa-run-all-tests: &qa-run-all-tests
if: $QA_FRAMEWORK_CHANGES == "true" || $QA_RUN_ALL_TESTS == "true" || $QA_RUN_ALL_E2E_LABEL == "true"
.default-branch: &default-branch
if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
.if-merge-request: &if-merge-request
if: '$CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached"'
.if-merge-request-labels-run-review-app: &if-merge-request-labels-run-review-app
if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-review-app/'
.if-dot-com-ee-schedule-nightly-child-pipeline: &if-dot-com-ee-schedule-nightly-child-pipeline
if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab" && $CI_PIPELINE_SOURCE == "parent_pipeline" && $SCHEDULE_TYPE == "nightly"'
# ------------------------------------------
# Changes patterns
# ------------------------------------------
.ci-review-patterns: &ci-review-patterns
- ".gitlab-ci.yml"
- ".gitlab/ci/frontend.gitlab-ci.yml"
- ".gitlab/ci/build-images.gitlab-ci.yml"
- ".gitlab/ci/review.gitlab-ci.yml"
- ".gitlab/ci/review-apps/**/*"
- "scripts/review_apps/**/*"
- "scripts/trigger-build.rb"
- "{,ee/,jh/}{bin,config}/**/*.rb"
# ------------------------------------------
# Conditions set
# ------------------------------------------
.qa-manual: &qa-manual
when: manual
allow_failure: true
variables:
QA_TESTS: ""
.never-when-qa-run-all-tests-or-no-specific-specs:
- <<: *qa-run-all-tests
when: never
- <<: *all-specs
when: never
.never-when-specific-specs-always-when-qa-run-all-tests:
- *qa-run-all-tests
- <<: *specific-specs
when: manual
allow_failure: true
variables:
QA_TESTS: ""
# ------------------------------------------
# Prepare
# ------------------------------------------
.rules:dont-interrupt:
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
allow_failure: true
- if: $CI_MERGE_REQUEST_IID
when: manual
allow_failure: true
.review:rules:review-build-cng:
rules:
- when: always
.review:rules:review-delete-deployment:
rules:
- when: on_success
# ------------------------------------------
# Deploy
# ------------------------------------------
.review:rules:review-deploy:
rules:
- when: on_success
.review:rules:trigger-review-stop:
rules:
- when: manual
allow_failure: true
# ------------------------------------------
# Test
# ------------------------------------------
.rules:qa-smoke:
rules:
# always trigger smoke suite if review pipeline got triggered by specific changes in application code
- <<: *app-changes
variables:
QA_TESTS: "" # unset QA_TESTS even if specific tests were inferred from stage label
- *qa-run-all-tests
- if: $QA_SUITES =~ /Test::Instance::Smoke/
- *qa-manual
.rules:qa-blocking:
rules:
- <<: *app-changes
when: never
- !reference [.never-when-qa-run-all-tests-or-no-specific-specs]
- if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/
.rules:qa-blocking-parallel:
rules:
# always trigger blocking suite if review pipeline got triggered by specific changes in application code
- <<: *app-changes
variables:
QA_TESTS: "" # unset QA_TESTS even if specific tests were inferred from stage label
- !reference [.never-when-specific-specs-always-when-qa-run-all-tests]
- if: $QA_SUITES =~ /Test::Instance::ReviewBlocking/
.rules:qa-non-blocking:
rules:
- !reference [.never-when-qa-run-all-tests-or-no-specific-specs]
- if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/
.rules:qa-non-blocking-parallel:
rules:
- !reference [.never-when-specific-specs-always-when-qa-run-all-tests]
- *all-specs-mr # set full suite to manual when no specific specs passed in mr
- if: $QA_SUITES =~ /Test::Instance::ReviewNonBlocking/
.review:rules:review-performance:
rules:
- if: '$DAST_RUN == "true"' # Skip this job when DAST is run
when: never
- <<: *if-merge-request-labels-run-review-app # we explicitly don't allow the job to fail in that case
- <<: *if-merge-request # we explicitly don't allow the job to fail in that case
changes: *ci-review-patterns
- when: on_success
allow_failure: true
# ------------------------------------------
# DAST
# ------------------------------------------
.reports:rules:schedule-dast:
rules:
- if: '$DAST_DISABLED || $GITLAB_FEATURES !~ /\bdast\b/'
when: never
- <<: *if-dot-com-ee-schedule-nightly-child-pipeline
# ------------------------------------------
# Prepare/Report
# ------------------------------------------
.rules:prepare-report:
rules:
- when: always
.rules:main-run:
rules:
- *default-branch

View file

@ -1,277 +1,135 @@
.review-only: &review-only review-cleanup:
only: extends:
refs: - .default-retry
- branches@gitlab-org/gitlab-ce - .review:rules:review-cleanup
- branches@gitlab-org/gitlab-ee image: ${REVIEW_APPS_IMAGE}
kubernetes: active stage: prepare
except: needs: []
refs: environment:
- master name: review/regular-cleanup
- /^\d+-\d+-auto-deploy-\d+$/ action: access
- /(^docs[\/-].+|.+-docs$)/
.review-schedules-only: &review-schedules-only
only:
refs:
- schedules@gitlab-org/gitlab-ce
- schedules@gitlab-org/gitlab-ee
kubernetes: active
variables:
- $REVIEW_APP_CLEANUP
except:
refs:
- tags
- /(^docs[\/-].+|.+-docs$)/
.review-base: &review-base
extends: .dedicated-runner
<<: *review-only
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base
cache: {}
dependencies: []
before_script:
- source scripts/utils.sh
.review-docker: &review-docker
<<: *review-base
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine
services:
- docker:19.03.0-dind
tags:
- gitlab-org
- docker
variables: &review-docker-variables
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly"
QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}"
build-qa-image:
<<: *review-docker
stage: test
script:
- time docker build --cache-from ${LATEST_QA_IMAGE} --tag ${QA_IMAGE} --file ./qa/Dockerfile ./
- echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY}
- time docker push ${QA_IMAGE}
.review-build-cng-base: &review-build-cng-base
image: ruby:2.6-alpine
stage: test
when: manual
before_script:
- source scripts/utils.sh
- install_api_client_dependencies_with_apk
- install_gitlab_gem
dependencies: []
cache: {}
script:
- BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng
review-build-cng:
<<: *review-only
<<: *review-build-cng-base
schedule:review-build-cng:
<<: *review-schedules-only
<<: *review-build-cng-base
.review-deploy-base: &review-deploy-base
<<: *review-base
allow_failure: true
retry: 1
stage: review
variables: variables:
HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" GIT_DEPTH: 1
DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}"
GITLAB_HELM_CHART_REF: "master"
environment: &review-environment
name: review/${CI_COMMIT_REF_NAME}
url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}
on_stop: review-stop
before_script: before_script:
- export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION)
- export GITALY_VERSION=$(<GITALY_SERVER_VERSION)
- export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION)
- echo "${CI_ENVIRONMENT_URL}" > review_app_url.txt
- source scripts/utils.sh - source scripts/utils.sh
- install_api_client_dependencies_with_apk - !reference [".use-kube-context", before_script]
- source scripts/review_apps/review-apps.sh - install_gitlab_gem
- setup_gcloud
script: script:
- check_kube_domain - scripts/review_apps/automated_cleanup.rb --dry-run="${DRY_RUN:-false}" || (scripts/slack review-apps-monitoring "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL} - <https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/review-apps.md#review-cleanup-job-failed|📗 RUNBOOK 📕>" warning "GitLab Bot" && exit 1);
- ensure_namespace
- install_tiller
- install_external_dns
- download_chart
- deploy || (display_deployment_debug && exit 1)
- add_license
artifacts:
paths: [review_app_url.txt]
expire_in: 2 days
when: always
review-deploy:
<<: *review-deploy-base
schedule:review-deploy:
<<: *review-deploy-base
<<: *review-schedules-only
review-stop: review-stop:
<<: *review-only extends:
extends: .single-script-job-dedicated-runner - review-cleanup
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base - .review:rules:review-stop
environment:
name: review/${CI_COMMIT_REF_SLUG}${SCHEDULE_TYPE} # No separator for SCHEDULE_TYPE so it's compatible as before and looks nice without it
action: stop
resource_group: review/${CI_COMMIT_REF_SLUG}${SCHEDULE_TYPE} # CI_ENVIRONMENT_SLUG is not available here and we want this to be the same as the environment
before_script:
- source ./scripts/utils.sh
- source ./scripts/review_apps/review-apps.sh
- !reference [".use-kube-context", before_script]
script:
- retry delete_helm_release
.base-review-checks:
extends:
- .default-retry
image: ${REVIEW_APPS_IMAGE}
stage: prepare
before_script:
- source scripts/utils.sh
- setup_gcloud
- !reference [".use-kube-context", before_script]
review-k8s-resources-count-checks:
extends:
- .base-review-checks
- .review:rules:review-k8s-resources-count-checks
needs:
- job: review-cleanup
optional: true
environment:
name: review/k8s-resources-count-checks
action: verify
script:
- scripts/review_apps/k8s-resources-count-checks.sh || (scripts/slack review-apps-monitoring "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL} - <https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/review-apps.md#review-k8s-resources-count-checks-job-failed|📗 RUNBOOK 📕>" warning "GitLab Bot" && exit 1);
review-gcp-quotas-checks:
extends:
- .base-review-checks
- .review:rules:review-gcp-quotas-checks
needs: []
environment:
name: review/gcp-quotas-checks
action: verify
script:
- ruby scripts/review_apps/gcp-quotas-checks.rb || (scripts/slack review-apps-monitoring "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL} - <https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/review-apps.md#review-gcp-quotas-checks-job-failed|📗 RUNBOOK 📕>" warning "GitLab Bot" && exit 1);
start-review-app-pipeline:
extends:
- .review:rules:start-review-app-pipeline
resource_group: review/${CI_COMMIT_REF_SLUG}${SCHEDULE_TYPE} # CI_ENVIRONMENT_SLUG is not available here and we want this to be the same as the environment
stage: review stage: review
when: manual needs:
allow_failure: true - job: e2e-test-pipeline-generate
- job: build-assets-image
artifacts: false
# We do not want to have ALL global variables passed as trigger variables,
# as they cannot be overridden. See this issue for more context:
#
# https://gitlab.com/gitlab-org/gitlab/-/issues/387183
inherit:
variables:
- CHROME_VERSION
- REGISTRY_GROUP
- REGISTRY_HOST
- REVIEW_APPS_DOMAIN
- REVIEW_APPS_GCP_PROJECT
- REVIEW_APPS_GCP_REGION
- REVIEW_APPS_IMAGE
- RUBY_VERSION
# These variables are set in the pipeline schedules.
# They need to be explicitly passed on to the child pipeline.
# https://docs.gitlab.com/ee/ci/pipelines/multi_project_pipelines.html#pass-cicd-variables-to-a-downstream-pipeline-by-using-the-variables-keyword
variables: variables:
SCRIPT_NAME: review_apps/review-apps.sh # This is needed by `review-build-cng-env` (`.gitlab/ci/review-apps/main.gitlab-ci.yml`).
environment: PARENT_PIPELINE_ID: $CI_PIPELINE_ID
<<: *review-environment SCHEDULE_TYPE: $SCHEDULE_TYPE
action: stop DAST_RUN: $DAST_RUN
script: SKIP_MESSAGE: Skipping review-app due to mr containing only quarantine changes!
- wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/utils.sh trigger:
- source utils.sh strategy: depend
- source $(basename $SCRIPT_NAME) include:
- delete - artifact: review-app-pipeline.yml
job: e2e-test-pipeline-generate
.review-qa-base: &review-qa-base
<<: *review-docker
allow_failure: true
retry: 2
stage: qa
variables:
<<: *review-docker-variables
QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa"
QA_CAN_TEST_GIT_PROTOCOL_V2: "false"
GITLAB_USERNAME: "root"
GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITLAB_ADMIN_USERNAME: "root"
GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}"
EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}"
QA_DEBUG: "true"
dependencies:
- review-deploy
artifacts:
paths:
- ./qa/gitlab-qa-run-*
expire_in: 7 days
when: always
before_script:
- export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)"
- echo "${CI_ENVIRONMENT_URL}"
- echo "${QA_IMAGE}"
- source scripts/utils.sh
- install_api_client_dependencies_with_apk
- gem install gitlab-qa --no-document ${GITLAB_QA_VERSION:+ --version ${GITLAB_QA_VERSION}}
review-qa-smoke:
<<: *review-qa-base
script:
- gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}"
review-qa-all:
<<: *review-qa-base
allow_failure: true
when: manual
parallel: 5
script:
- export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/review-qa-all_master_report.json
- export KNAPSACK_TEST_FILE_PATTERN=qa/specs/features/**/*_spec.rb
- gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" -- --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec.htm --color --format documentation
parallel-spec-reports:
extends: .dedicated-runner
dependencies:
- review-qa-all
image: ruby:2.6-alpine
services: []
before_script: []
variables:
SETUP_DB: "false"
NEW_PARALLEL_SPECS_REPORT: qa/report-new.html
BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/"
stage: post-test
allow_failure: true
when: manual
retry: 0
artifacts:
when: always
paths:
- qa/report-new.html
- qa/gitlab-qa-run-*
reports:
junit: qa/gitlab-qa-run-*/**/rspec-*.xml
script:
- apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/*
- gem install nokogiri
- cd qa/gitlab-qa-run-*/gitlab-*
- ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_)
- cd ../../..
- '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}'
- scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm
.review-performance-base: &review-performance-base
<<: *review-qa-base
allow_failure: true
before_script:
- export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)"
- echo "${CI_ENVIRONMENT_URL}"
- mkdir -p gitlab-exporter
- wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js
- mkdir -p sitespeed-results
script:
- docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}"
after_script:
- mv sitespeed-results/data/performance.json performance.json
artifacts:
paths:
- sitespeed-results/
reports:
performance: performance.json
review-performance:
<<: *review-performance-base
schedule:review-performance:
<<: *review-performance-base
<<: *review-schedules-only
dependencies:
- schedule:review-deploy
schedule:review-cleanup:
<<: *review-base
<<: *review-schedules-only
stage: build
allow_failure: true
environment:
name: review/auto-cleanup
action: stop
before_script:
- source scripts/utils.sh
- install_gitlab_gem
script:
- ruby -rrubygems scripts/review_apps/automated_cleanup.rb
danger-review: danger-review:
extends: .dedicated-pull-cache-job extends:
image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger - .default-retry
- .ruby-node-cache
- .review:rules:danger
stage: test stage: test
dependencies: [] needs: []
before_script: [] before_script:
only: - source scripts/utils.sh
variables: - bundle_install_script "--with danger"
- $DANGER_GITLAB_API_TOKEN - yarn_install_script
except:
refs:
- master
- /^\d+-\d+-auto-deploy-\d+$/
- /^[\d-]+-stable(-ee)?$/
variables:
- $CI_COMMIT_REF_NAME =~ /^ce-to-ee-.*/
- $CI_COMMIT_REF_NAME =~ /.*-stable(-ee)?-prepare-.*/
script: script:
- git version # ${DANGER_DANGERFILE} is used by Jihulab for customizing danger support: https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/.gitlab-ci.yml
- node --version - >
- yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline if [ -z "$DANGER_GITLAB_API_TOKEN" ]; then
- danger --fail-on-errors=true run_timed_command danger_as_local
else
danger_id=$(echo -n ${DANGER_GITLAB_API_TOKEN} | md5sum | awk '{print $1}' | cut -c5-10)
run_timed_command "bundle exec danger --fail-on-errors=true --verbose --danger_id=\"${danger_id}\" --dangerfile=\"${DANGER_DANGERFILE:-Dangerfile}\""
fi
danger-review-local:
extends:
- danger-review
- .review:rules:danger-local
script:
- run_timed_command danger_as_local

File diff suppressed because it is too large Load diff

View file

@ -1,41 +1,173 @@
# Insurance in case a gem needed by one of our releases gets yanked from # Insurance in case a gem needed by one of our releases gets yanked from
# rubygems.org in the future. # rubygems.org in the future.
cache gems: cache gems:
extends: .dedicated-no-docs-no-db-pull-cache-job extends:
- .default-retry
- .ruby-cache
- .default-before_script
- .setup:rules:cache-gems
stage: prepare
needs: []
variables:
BUNDLE_WITHOUT: ""
BUNDLE_WITH: "production:development:test"
SETUP_DB: "false"
script: script:
- bundle package --all --all-platforms - echo -e "\e[0Ksection_start:`date +%s`:bundle-package[collapsed=true]\r\e[0KPackaging gems"
- bundle config set cache_all true
- run_timed_command "bundle package --all-platforms"
- echo -e "\e[0Ksection_end:`date +%s`:bundle-package\r\e[0K"
artifacts: artifacts:
paths: paths:
- vendor/cache - vendor/cache
only: expire_in: 31d
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee .predictive-job:
- tags extends:
dependencies: - .default-retry
- setup-test-env needs: []
.absolutely-predictive-job:
extends:
- .predictive-job
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:edge
variables:
GIT_STRATEGY: none
dont-interrupt-me:
extends:
- .absolutely-predictive-job
- .setup:rules:dont-interrupt-me
stage: sync
interruptible: false
script:
- echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible."
gitlab_git_test: gitlab_git_test:
extends: extends:
- .dedicated-runner - .predictive-job
- .no-docs-and-no-qa - .setup:rules:gitlab_git_test
variables: stage: test
SETUP_DB: "false"
before_script: []
dependencies: []
cache: {}
script: script:
- spec/support/prepare-gitlab-git-test-for-commit --check-for-changes - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes
no_ee_check: verify-ruby-3.0:
extends: extends:
- .dedicated-runner - .absolutely-predictive-job
- .no-docs-and-no-qa - .setup:rules:verify-ruby-3.0
variables: stage: prepare
SETUP_DB: "false"
before_script: []
dependencies: []
cache: {}
script: script:
- scripts/no-ee-check - echo 'Please remove label ~"pipeline:run-in-ruby2" so we do test against Ruby 3.0 (default version) before merging the merge request'
only: - exit 1
- /.+/@gitlab-org/gitlab-ce
verify-tests-yml:
extends:
- .setup:rules:verify-tests-yml
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-alpine3.16
stage: test
needs: []
script:
- source scripts/utils.sh
- install_tff_gem
- scripts/verify-tff-mapping
verify-approvals:
extends:
- .predictive-job
- .setup:rules:jh-contribution
script:
- source scripts/utils.sh
- install_gitlab_gem
- tooling/bin/find_app_sec_approval
generate-frontend-fixtures-mapping:
extends:
- .setup:rules:generate-frontend-fixtures-mapping
- .use-pg13
- .rails-cache
needs: ["setup-test-env"]
stage: prepare
before_script:
- !reference [.default-before_script, before_script]
- source ./scripts/rspec_helpers.sh
- section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn"; # Do not use 'bundle exec' here
script:
- generate_frontend_fixtures_mapping
artifacts:
expire_in: 7d
paths:
- ${FRONTEND_FIXTURES_MAPPING_PATH}
detect-tests:
extends: .rails:rules:detect-tests
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-slim
needs: []
stage: prepare
variables:
RSPEC_TESTS_MAPPING_ENABLED: "true"
before_script:
- apt-get update && apt-get install -y curl # Not present in ruby-slim, so we add it manually
script:
- source ./scripts/utils.sh
- source ./scripts/rspec_helpers.sh
- install_gitlab_gem
- install_tff_gem
- install_activesupport_gem
- retrieve_tests_mapping
- retrieve_frontend_fixtures_mapping
- |
if [ -n "$CI_MERGE_REQUEST_IID" ]; then
mkdir -p $(dirname "$RSPEC_CHANGED_FILES_PATH")
tooling/bin/predictive_tests
filter_rspec_matched_foss_tests ${RSPEC_MATCHING_TESTS_PATH} ${RSPEC_MATCHING_TESTS_FOSS_PATH};
filter_rspec_matched_ee_tests ${RSPEC_MATCHING_TESTS_PATH} ${RSPEC_MATCHING_TESTS_EE_PATH};
echoinfo "Changed files: $(cat $RSPEC_CHANGED_FILES_PATH)";
echoinfo "Related FOSS RSpec tests: $(cat $RSPEC_MATCHING_TESTS_FOSS_PATH)";
echoinfo "Related EE RSpec tests: $(cat $RSPEC_MATCHING_TESTS_EE_PATH)";
echoinfo "Related JS files: $(cat $RSPEC_MATCHING_JS_FILES_PATH)";
fi
artifacts:
expire_in: 7d
paths:
- ${FRONTEND_FIXTURES_MAPPING_PATH}
- ${RSPEC_CHANGED_FILES_PATH}
- ${RSPEC_MATCHING_JS_FILES_PATH}
- ${RSPEC_MATCHING_TESTS_EE_PATH}
- ${RSPEC_MATCHING_TESTS_FOSS_PATH}
- ${RSPEC_MATCHING_TESTS_PATH}
- ${RSPEC_VIEWS_INCLUDING_PARTIALS_PATH}
detect-previous-failed-tests:
extends:
- detect-tests
- .rails:rules:detect-previous-failed-tests
variables:
PREVIOUS_FAILED_TESTS_DIR: tmp/previous_failed_tests/
script:
- source ./scripts/utils.sh
- source ./scripts/rspec_helpers.sh
- retrieve_failed_tests "${PREVIOUS_FAILED_TESTS_DIR}" "oneline" "previous"
artifacts:
expire_in: 7d
paths:
- ${PREVIOUS_FAILED_TESTS_DIR}
e2e-test-pipeline-generate:
extends:
- .qa-job-base
- .predictive-job
- .qa:rules:determine-e2e-tests
stage: prepare
variables:
ENV_FILE: $CI_PROJECT_DIR/qa_tests_vars.env
COLORIZED_LOGS: "true"
script:
- bundle exec rake "ci:detect_changes[$ENV_FILE]"
- cd $CI_PROJECT_DIR && scripts/generate-e2e-pipeline
artifacts:
expire_in: 1 day
paths:
- '*-pipeline.yml'

View file

@ -0,0 +1,219 @@
.static-analysis-base:
extends:
- .default-retry
- .default-before_script
stage: lint
needs: []
variables:
SETUP_DB: "false"
ENABLE_SPRING: "1"
# Disable warnings in browserslist which can break on backports
# https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384
BROWSERSLIST_IGNORE_OLD_DATA: "true"
GRAPHQL_SCHEMA_APOLLO_FILE: "tmp/tests/graphql/gitlab_schema_apollo.graphql"
update-static-analysis-cache:
extends:
- .static-analysis-base
- .rubocop-job-cache-push
- .shared:rules:update-cache
stage: prepare
script:
# Silence cop offenses for rules with "grace period".
# This will notify Slack if offenses were silenced.
# For the moment we only cache `tmp/rubocop_cache` so we don't need to run all the tasks.
- run_timed_command "fail_on_warnings bundle exec rake rubocop:check:graceful"
static-analysis:
extends:
- .static-analysis-base
- .static-analysis-cache
- .static-analysis:rules:static-analysis
parallel: 2
script:
- yarn_install_script
- fail_on_warnings scripts/static-analysis
static-analysis as-if-foss:
extends:
- static-analysis
- .static-analysis:rules:static-analysis-as-if-foss
- .as-if-foss
static-verification-with-database:
extends:
- .static-analysis-base
- .rubocop-job-cache
- .static-analysis:rules:static-verification-with-database
- .use-pg13
script:
- bundle exec rake lint:static_verification_with_database
variables:
SETUP_DB: "true"
generate-apollo-graphql-schema:
extends:
- .static-analysis-base
- .frontend:rules:default-frontend-jobs
image:
name: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:apollo
entrypoint: [""]
needs: ['graphql-schema-dump']
variables:
USE_BUNDLE_INSTALL: "false"
script:
- apollo client:download-schema --config=config/apollo.config.js ${GRAPHQL_SCHEMA_APOLLO_FILE}
artifacts:
name: graphql-schema-apollo
paths:
- "${GRAPHQL_SCHEMA_APOLLO_FILE}"
generate-apollo-graphql-schema as-if-foss:
extends:
- generate-apollo-graphql-schema
- .frontend:rules:eslint-as-if-foss
- .as-if-foss
needs: ['graphql-schema-dump as-if-foss']
eslint:
extends:
- .static-analysis-base
- .yarn-cache
- .frontend:rules:default-frontend-jobs
needs: ['generate-apollo-graphql-schema']
variables:
USE_BUNDLE_INSTALL: "false"
script:
- yarn_install_script
- run_timed_command "yarn run lint:eslint:all"
eslint as-if-foss:
extends:
- eslint
- .frontend:rules:eslint-as-if-foss
- .as-if-foss
needs: ['generate-apollo-graphql-schema as-if-foss']
haml-lint:
extends:
- .static-analysis-base
- .ruby-cache
- .static-analysis:rules:haml-lint
script:
- run_timed_command "bundle exec haml-lint --parallel app/views"
artifacts:
expire_in: 31d
when: always
paths:
- tmp/feature_flags/
haml-lint ee:
extends:
- "haml-lint"
- .static-analysis:rules:haml-lint-ee
script:
- run_timed_command "bundle exec haml-lint --parallel ee/app/views"
rubocop:
extends:
- .static-analysis-base
- .rubocop-job-cache
- .static-analysis:rules:rubocop
needs:
- job: detect-tests
optional: true
variables:
RUBOCOP_TARGET_FILES: "tmp/rubocop_target_files.txt"
script:
- |
# For non-merge request, or when RUN_ALL_RUBOCOP is 'true', run all RuboCop rules
if [ -z "${CI_MERGE_REQUEST_IID}" ] || [ "${RUN_ALL_RUBOCOP}" == "true" ]; then
# Silence cop offenses for rules with "grace period".
# We won't notify Slack if offenses were silenced to avoid frequent messages.
# Job `update-static-analysis-cache` takes care of Slack notifications every 2 hours.
unset CI_SLACK_WEBHOOK_URL
run_timed_command "fail_on_warnings bundle exec rake rubocop:check:graceful"
else
cat "${RSPEC_CHANGED_FILES_PATH}" | ruby -e 'print $stdin.read.split(" ").select { |f| File.exist?(f) }.join(" ")' > "$RUBOCOP_TARGET_FILES"
# Skip running RuboCop if there's no target files
if [ -s "${RUBOCOP_TARGET_FILES}" ]; then
run_timed_command "fail_on_warnings bundle exec rubocop --parallel --force-exclusion $(cat ${RUBOCOP_TARGET_FILES})"
else
echoinfo "Nothing interesting changed for RuboCop. Skipping."
fi
fi
qa:metadata-lint:
extends:
- .static-analysis-base
- .static-analysis:rules:qa:metadata-lint
before_script:
- !reference [.default-before_script, before_script]
- cd qa/
- bundle_install_script
script:
- run_timed_command "bundle exec bin/qa Test::Instance::All http://localhost:3000 --test-metadata-only"
- cd ..
- run_timed_command "./scripts/qa/testcases-check qa/tmp/test-metadata.json"
- run_timed_command "./scripts/qa/quarantine-types-check qa/tmp/test-metadata.json"
variables:
USE_BUNDLE_INSTALL: "false"
SETUP_DB: "false"
QA_EXPORT_TEST_METRICS: "false"
# Disable warnings in browserslist which can break on backports
# https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384
BROWSERSLIST_IGNORE_OLD_DATA: "true"
artifacts:
expire_in: 31d
when: always
paths:
- qa/tmp/
feature-flags-usage:
extends:
- .static-analysis-base
- .rubocop-job-cache
- .static-analysis:rules:rubocop
script:
# We need to disable the cache for this cop since it creates files under tmp/feature_flags/*.used,
# the cache would prevent these files from being created.
- run_timed_command "fail_on_warnings bundle exec rubocop --only Gitlab/MarkUsedFeatureFlags --cache false"
artifacts:
expire_in: 31d
when: always
paths:
- tmp/feature_flags/
semgrep-appsec-custom-rules:
stage: lint
extends:
- .semgrep-appsec-custom-rules:rules
image: returntocorp/semgrep
needs: []
script:
# Required to avoid a timeout https://github.com/returntocorp/semgrep/issues/5395
- git fetch origin master
# Include/exclude list isn't ideal https://github.com/returntocorp/semgrep/issues/5399
- |
semgrep ci --gitlab-sast --metrics off --config $CUSTOM_RULES_URL \
--include app --include lib --include workhorse \
--exclude '*_test.go' --exclude spec --exclude qa > gl-sast-report.json || true
variables:
CUSTOM_RULES_URL: https://gitlab.com/gitlab-com/gl-security/appsec/sast-custom-rules/-/raw/main/appsec-pings/rules.yml
artifacts:
paths:
- gl-sast-report.json
ping-appsec-for-sast-findings:
stage: lint
image: alpine:latest
extends:
- .ping-appsec-for-sast-findings:rules
variables:
# Project Access Token bot ID for /gitlab-com/gl-security/appsec/sast-custom-rules
BOT_USER_ID: 13559989
needs:
- semgrep-appsec-custom-rules
script:
- apk add jq curl
- scripts/process_custom_semgrep_results.sh

View file

@ -1,83 +1,51 @@
.tests-metadata-state: &tests-metadata-state .tests-metadata-state:
extends: .dedicated-runner image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}
variables:
TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache"
before_script: before_script:
- source scripts/utils.sh - source scripts/utils.sh
artifacts: artifacts:
expire_in: 31d expire_in: 31d
paths: paths:
- knapsack/ - knapsack/
- rspec_flaky/ - rspec/
- rspec_profiling/ - crystalball/
when: always
retrieve-tests-metadata: retrieve-tests-metadata:
extends: extends:
- .tests-metadata-state - .tests-metadata-state
- .no-docs-and-no-qa - .test-metadata:rules:retrieve-tests-metadata
# We use a smaller image for this job only (update-tests-metadata compiles some gems)
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION}-slim
stage: prepare stage: prepare
cache:
key: tests_metadata
policy: pull
script: script:
- mkdir -p knapsack/${CI_PROJECT_NAME}/ - apt-get update && apt-get install -y curl # Not present in ruby-slim, so we add it manually
- wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH - install_gitlab_gem
- '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}' - source ./scripts/rspec_helpers.sh
- mkdir -p rspec_flaky/ - retrieve_tests_metadata
- mkdir -p rspec_profiling/
- wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH
- '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}'
update-tests-metadata: update-tests-metadata:
<<: *tests-metadata-state extends:
- .tests-metadata-state
- .test-metadata:rules:update-tests-metadata
stage: post-test stage: post-test
cache: dependencies:
key: tests_metadata - retrieve-tests-metadata
paths: - generate-frontend-fixtures-mapping
- knapsack/ - setup-test-env
- rspec_flaky/ - rspec migration pg13
policy: push - rspec-all frontend_fixture
- rspec unit pg13
- rspec integration pg13
- rspec system pg13
- rspec background_migration pg13
- rspec-ee migration pg13
- rspec-ee unit pg13
- rspec-ee integration pg13
- rspec-ee system pg13
- rspec-ee background_migration pg13
script: script:
- retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - run_timed_command "retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document"
- echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} - source ./scripts/rspec_helpers.sh
- scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json - test -f "${FLAKY_RSPEC_SUITE_REPORT_PATH}" || echo -e "\e[31m" 'Consider add ~"pipeline:run-all-rspec" to run full rspec jobs' "\e[0m"
- '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - update_tests_metadata
- rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - update_tests_mapping
- scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json
- FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH}
- '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH'
- rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json
- scripts/insert-rspec-profiling-data
only:
- master@gitlab-org/gitlab-ce
- master@gitlab-org/gitlab-ee
- master@gitlab/gitlabhq
- master@gitlab/gitlab-ee
flaky-examples-check:
extends: .dedicated-runner
image: ruby:2.6-alpine
services: []
before_script: []
variables:
SETUP_DB: "false"
USE_BUNDLE_INSTALL: "false"
NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json
stage: post-test
allow_failure: true
retry: 0
only:
- branches
except:
refs:
- master
- /(^docs[\/-].+|.+-docs$)/
- /(^qa[\/-].*|.*-qa$)/
artifacts:
expire_in: 30d
paths:
- rspec_flaky/
script:
- '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}'
- scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json
- scripts/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT

View file

@ -0,0 +1,129 @@
include:
- local: .gitlab/ci/qa-common/main.gitlab-ci.yml
- local: .gitlab/ci/qa-common/rules.gitlab-ci.yml
- local: .gitlab/ci/qa-common/variables.gitlab-ci.yml
.run-tests:
stage: test
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-${RUBY_VERSION}:bundler-2.3-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}
services:
- docker:${DOCKER_VERSION}-dind
tags:
- e2e
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- sysctl -n -w fs.inotify.max_user_watches=524288
- echo "SUITE_RAN=true" > suite_status.env
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
QA_GDK_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-qa-gdk:master"
QA_GENERATE_ALLURE_REPORT: "true"
QA_CAN_TEST_PRAEFECT: "false"
QA_INTERCEPT_REQUESTS: "false"
TEST_LICENSE_MODE: $QA_TEST_LICENSE_MODE
EE_LICENSE: $QA_EE_LICENSE
GITHUB_ACCESS_TOKEN: $QA_GITHUB_ACCESS_TOKEN
GITLAB_QA_ADMIN_ACCESS_TOKEN: $QA_ADMIN_ACCESS_TOKEN
RSPEC_REPORT_OPTS: "--format QA::Support::JsonFormatter --out tmp/rspec-${CI_JOB_ID}.json --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec-${CI_JOB_ID}.htm --color --format documentation"
timeout: 2 hours
artifacts:
when: always
paths:
- test_output
- logs
expire_in: 7 days
reports:
junit: test_output/**/rspec-*.xml
dotenv: suite_status.env
script:
- echo -e "\e[0Ksection_start:`date +%s`:pull_image\r\e[0KPull GDK QA image"
- docker pull ${QA_GDK_IMAGE}
- echo -e "\e[0Ksection_end:`date +%s`:pull_image\r\e[0K"
- echo -e "\e[0Ksection_start:`date +%s`:launch_gdk_and_tests\r\e[0KLaunch GDK and run QA tests"
- cd qa && bundle install --jobs=$(nproc) --retry=3 --quiet
- mkdir -p $CI_PROJECT_DIR/test_output $CI_PROJECT_DIR/logs/gdk $CI_PROJECT_DIR/logs/gitlab
# This command matches the permissions of the user that runs GDK inside the container.
- chown -R 1000:1000 $CI_PROJECT_DIR/test_output $CI_PROJECT_DIR/logs $CI_PROJECT_DIR/qa/knapsack
- |
docker run --rm --name gdk --add-host gdk.test:127.0.0.1 --shm-size=2gb \
--env-file <(bundle exec rake ci:env_var_name_list) \
--volume /var/run/docker.sock:/var/run/docker.sock:z \
--volume $CI_PROJECT_DIR/test_output:/home/gdk/gdk/gitlab/qa/tmp:z \
--volume $CI_PROJECT_DIR/logs/gdk:/home/gdk/gdk/log \
--volume $CI_PROJECT_DIR/logs/gitlab:/home/gdk/gdk/gitlab/log \
--volume $CI_PROJECT_DIR/qa/knapsack:/home/gdk/gdk/gitlab/qa/knapsack \
${QA_GDK_IMAGE} "${CI_COMMIT_SHA}" "$RSPEC_REPORT_OPTS $TEST_GDK_TAGS --tag ~requires_praefect"
# The above image's launch script takes two arguments only - first one is the commit sha and the second one Rspec Args
allow_failure: true
after_script:
- |
if [ "$CI_JOB_STATUS" == "failed" ]; then
echo "SUITE_FAILED=true" >> suite_status.env
fi
download-knapsack-report:
extends:
- .download-knapsack-report
- .rules:download-knapsack
test-on-gdk-smoke:
extends:
- .run-tests
parallel: 2
variables:
TEST_GDK_TAGS: "--tag smoke"
rules:
- when: always
test-on-gdk-full:
extends:
- .run-tests
parallel: 5
rules:
- when: manual
# ==========================================
# Post test stage
# ==========================================
e2e-test-report:
extends:
- .e2e-test-report
- .rules:report:allure-report
variables:
ALLURE_RESULTS_GLOB: test_output/allure-results
upload-knapsack-report:
extends:
- .upload-knapsack-report
- .rules:report:process-results
variables:
QA_KNAPSACK_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/test_output/knapsack/*/*.json
export-test-metrics:
extends:
- .export-test-metrics
- .rules:report:process-results
variables:
QA_METRICS_REPORT_FILE_PATTERN: $CI_PROJECT_DIR/test_output/test-metrics-*.json
relate-test-failures:
extends:
- .relate-test-failures
- .rules:report:process-results
variables:
QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.json
generate-test-session:
extends:
- .generate-test-session
- .rules:report:process-results
variables:
QA_RSPEC_JSON_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.json
notify-slack:
extends:
- .notify-slack
- .rules:report:process-results
variables:
QA_RSPEC_XML_FILE_PATTERN: $CI_PROJECT_DIR/test_output/rspec-*.xml

View file

@ -0,0 +1,103 @@
vendor mail-smtp_pool:
extends:
- .vendor:rules:mail-smtp_pool
needs: []
trigger:
include: vendor/gems/mail-smtp_pool/.gitlab-ci.yml
strategy: depend
vendor attr_encrypted:
extends:
- .vendor:rules:attr_encrypted
needs: []
trigger:
include: vendor/gems/attr_encrypted/.gitlab-ci.yml
strategy: depend
vendor microsoft_graph_mailer:
extends:
- .vendor:rules:microsoft_graph_mailer
needs: []
trigger:
include: vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml
strategy: depend
vendor ipynbdiff:
extends:
- .vendor:rules:ipynbdiff
needs: []
trigger:
include: vendor/gems/ipynbdiff/.gitlab-ci.yml
strategy: depend
vendor omniauth-azure-oauth2:
extends:
- .vendor:rules:omniauth-azure-oauth2
needs: []
trigger:
include: vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml
strategy: depend
vendor omniauth_crowd:
extends:
- .vendor:rules:omniauth_crowd
needs: []
trigger:
include: vendor/gems/omniauth_crowd/.gitlab-ci.yml
strategy: depend
vendor omniauth-gitlab:
extends:
- .vendor:rules:omniauth-gitlab
needs: []
trigger:
include: vendor/gems/omniauth-gitlab/.gitlab-ci.yml
strategy: depend
vendor omniauth-salesforce:
extends:
- .vendor:rules:omniauth-salesforce
needs: []
trigger:
include: vendor/gems/omniauth-salesforce/.gitlab-ci.yml
strategy: depend
vendor devise-pbkdf2-encryptable:
extends:
- .vendor:rules:devise-pbkdf2-encryptable
needs: []
trigger:
include: vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml
strategy: depend
vendor bundler-checksum:
extends:
- .vendor:rules:bundler-checksum
needs: []
trigger:
include: vendor/gems/bundler-checksum/.gitlab-ci.yml
strategy: depend
vendor gitlab_active_record:
extends:
- .vendor:rules:gitlab_active_record
needs: []
trigger:
include: vendor/gems/gitlab_active_record/.gitlab-ci.yml
strategy: depend
vendor cloud_profiler_agent:
extends:
- .vendor:rules:cloud_profiler_agent
needs: []
trigger:
include: vendor/gems/cloud_profiler_agent/.gitlab-ci.yml
strategy: depend
vendor sidekiq-reliable-fetch:
extends:
- .vendor:rules:sidekiq-reliable-fetch
needs: []
trigger:
include: vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
strategy: depend

View file

@ -0,0 +1,49 @@
workhorse:verify:
extends: .workhorse:rules:workhorse
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}golang:${GO_VERSION}
stage: test
needs: []
script:
- go version
- make -C workhorse # test build
- make -C workhorse verify
.workhorse:test:
extends: .workhorse:rules:workhorse
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-exiftool-12.60
variables:
GITALY_ADDRESS: "tcp://127.0.0.1:8075"
stage: test
needs:
- setup-test-env
before_script:
- go version
- scripts/gitaly-test-build
script:
- make -C workhorse test
workhorse:test go:
extends: .workhorse:test
parallel:
matrix:
- GO_VERSION: ["1.18", "1.19"]
script:
- make -C workhorse test-coverage
coverage: '/\d+.\d+%/'
artifacts:
paths:
- workhorse/coverage.html
workhorse:test fips:
extends: .workhorse:test
parallel:
matrix:
- GO_VERSION: ["1.18", "1.19"]
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/ubi-${UBI_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-2.36-exiftool-12.60
variables:
FIPS_MODE: 1
workhorse:test race:
extends: .workhorse:test
script:
- make -C workhorse test-race

View file

@ -1,9 +1,40 @@
# Yamllint of *.yml for .gitlab-ci.yml. # Yamllint of yaml files.
# This uses rules from project root `.yamllint`. # This uses rules from project root `.yamllint`.
lint-ci-gitlab: lint-yaml:
extends: .dedicated-runner extends:
before_script: [] - .default-retry
dependencies: [] - .yaml-lint:rules
image: sdesbure/yamllint:latest image: pipelinecomponents/yamllint:latest
stage: lint
needs: []
script: script:
- yamllint .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs - yamllint --strict -f colored .
# The jobs below will not use the configuration present in `.yamllint` (it's because of the -d option)
#
# Docs: https://yamllint.readthedocs.io/en/stable/configuration.html#custom-configuration-without-a-config-file
lint-pipeline-yaml:
extends:
- .default-retry
- .lint-pipeline-yaml:rules
image: pipelinecomponents/yamllint:latest
stage: lint
needs: []
variables:
LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates data/deprecations data/removals data/whats_new
script:
- 'yamllint -d "{extends: default, rules: {line-length: disable, document-start: disable}}" $LINT_PATHS'
lint-metrics-yaml:
extends:
- .default-retry
- .lint-metrics-yaml:rules
image: pipelinecomponents/yamllint:latest
stage: lint
needs: []
variables:
LINT_PATHS: config/metrics
script:
- 'yamllint --strict -f colored -d "{extends: default, rules: {line-length: disable, document-start: disable, indentation: {spaces: 2, indent-sequences: whatever}}}" $LINT_PATHS'

View file

@ -0,0 +1,147 @@
<!--
HOW TO USE THIS TEMPLATE
To propose an AI experiment, focus on completing the “Experiment” section first. As you refine the idea and gather feedback on your experiment, use the “Feature release” section to define how it will evolve as a Beta or GA capability. It's important that we link experiment to feature release. Feel free to add sections, but keep the existing ones.
You can choose how to get started with this template. For example, the proposal can start as an issue, and then be promoted to an epic to house all the work related to the experiment/prototype and feature release. If you prefer to start with an epic, you have to manually apply the proposal template. Regardless, if the experiment is eventually prioritized for development, the template content will need to appear in a top-level epic so it can be tracked alongside other prioritized AI experiments.
TITLE FORMAT
🤖 [AI Proposal] {Need/outcome} {Beneficiary} {Job/Small Job}
The title should be something that is easily understood that quickly communicates the intent of the project allowing team members to easily understand and recognize the expected work that will be done. A proposal title should combine the beneficiary of the feature/UI, the job it will allow them to accomplish (see https://about.gitlab.com/handbook/product/ux/jobs-to-be-done/#how-to-write-a-jtbd), and their expected outcome when the work is delivered. Well-defined statements are concise without sacrificing the substance of the proposal so that anyone can understand it at a glance. (e.g. {Reduce the effort} {for security teams} {when prioritizing business-critical risks in their assets}).
-->
# Experiment
This section should be completed prior to work on the Experiment beginning.
# [Experiment](https://docs.gitlab.com/ee/policy/alpha-beta-support.html#experiment)
## Problem to be solved
### User problem
_What user problem will this solve?_
### Solution hypothesis
_Why do you believe this AI solution is a good way to solve this problem?_
### Assumption
_What assumptions are you making about this problem and the solution?_
### Personas
_What [personas](https://about.gitlab.com/handbook/product/personas/#list-of-user-personas) have this problem, who is the intended user?_
## Proposal
<!-- Explain the proposed changes, including details around usage and business drivers. -->
### Success
_How will you measure whether this experiment is a success?_
# Feature release
<!-- DO NOT REMOVE THIS SECTION
Although the initial focus is on the “Experiment” section, do not remove this “Feature release” section. It's important that we link experiment to feature release. Fill this section as you progress.
-->
### Main Job story
_What job to be done will this solve?_
<!-- What is the [Main Job story](https://about.gitlab.com/handbook/product/ux/jobs-to-be-done/#how-to-write-a-jtbd) that this proposal was derived from? (e.g. When I am on triage rotation, I want to address all the business-critical risks in my assets, So I can minimize the likelihood of my organization being compromised by a security breach.) -->
## Proposal updates/additions
<!-- Explain any changes or updates to the original proposal from the experiment, including details around usage, business drivers, and reasonings that drove the updates/additions. -->
### Problem validation
_What validation exists that customers have this problem?_
<!-- Refer to https://about.gitlab.com/handbook/product/ux/ux-research/research-in-the-AI-space/#guideline-1-problem-validation --- to help identify and understand user needs -->
### Business objective
_What business objective will be achieved with this proposal?_
<!-- Objectives (from a business point of view) that will be achieved upon completion. (For instance, Increase engagement by making the experience efficient while reducing the chances of users overlooking high-priority items. -->
### Confidence
_Has this proposal been derived from research?_
<!-- How well do we understand the user's problem and their need? Refer to https://about.gitlab.com/handbook/product/ux/product-design/ux-roadmaps/#confidence to assess confidence -->
| Confidence | Research |
| ----------------- | ------------------------------ |
| [High/Medium/Low] | [research/insight issue](Link) |
### Requirements
_What tasks or actions should the user be capable of performing with this feature?_
<!-- Requirements can be taken from existing features or design issues used to build this proposal. Any related issues should be linked with this issue in the Feature/solution issues section below. They are more granular validated needs, goals, and additional details that the proposal encompasses. -->
> ⚠️ Related feature and research issues should be linked in the related issues section (Delete this line when this is done)
#### The user needs to be able to:
- ...
- ...
## Checklist
### Experiment
<details> <summary> Issue information </summary>
- [ ] Add information to the issue body about:
- [ ] The user problem being solved
- [ ] Your assumptions
- [ ] Who it's for, list of personas impacted
- [ ] Your proposal
- [ ] Add relevant designs to the Design Management area of the issue if available
- [ ] Confirm that an unexpected outage of this feature will not negatively impact the application or other features
- [ ] Add a feature flag so that this feature can be quickly disabled if/when needed
- [ ] If this experiment introduces a new service or data store, ensure it is not processing or storing [red data](https://about.gitlab.com/handbook/security/data-classification-standard.html#data-classification-levels) without a security and if needed legal review
- *NOTE*: We recommend using one of the already adopted models or data stores. If you need to use something else, be aware that using other models or data stores will require additional review during the feature stage for operational fitness and compliance.
- [ ] Ensure this issue has the ~wg-ai-integration label to ensure visibility to various teams working on this
</details>
### Feature release
<details> <summary> Issue information </summary>
- [ ] Add information to the issue body about:
- [ ] Your proposal
- [ ] The Job Statement it's expected to satisfy
- [ ] Details about the user problem and provide any research or problem validation
- [ ] List the personas impacted by the proposal.
- [ ] Add all relevant solution validation issues to the Linked items section that shows this proposal will solve the customer problem, or details explaining why it's not possible to provide that validation.
- [ ] Add relevant designs to the Design Management area of the issue.
- [ ] You have adhered to our [Definition of Done](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#definition-of-done) standards
- [ ] Ensure this issue has the ~wg-ai-integration label to ensure visibility to various teams working on this
</details>
<details> <summary> Technical needs </summary>
- [ ] Please consider the operational aspects of the feature you are creating. A list of things to think about is in: https://gitlab.com/gitlab-org/gitlab/-/issues/403859. We will be improving this process in the future: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117637#note_1353253349.
- [ ] @ mention your [AppSec Stable Counterpart](https://about.gitlab.com/handbook/product/categories/) and read the [AI secure coding guidelines](https://docs.gitlab.com/ee/development/secure_coding_guidelines.html#artificial-intelligence-ai-features)
1. Work estimate and skills needs to build an ML viable feature: To build any ML feature depending on the work, there are many personas that contribute including, Data Scientist, NLP engineer, ML Engineer, MLOps Engineer, ML Infra engineers, and Fullstack engineer to integrate the ML Services with Gitlab. Post-prototype we would assess the skills needed to build a production-grade ML feature for the prototype.
2. Data Limitation: We would like to upfront validate if we have viable data for the feature including whether we can use the DataOps pipeline of ModelOps or create a custom one. We would want to understand the training data, test data, and feedback data to dial up the accuracy and the limitations of the data.
3. Model Limitation: We would want to understand if we can use an open-source pre-trained model, tune and customize it or start a model from scratch as well. Further, we would assess based on the ModelOps model evaluation framework which would be the right model to use based on the use case.
4. Cost, Scalability, Reliability: We would want to estimate the cost of hosting, serving, inference of the model, and the full end-to-end infrastructure including monitoring and observability.
5. Legal and Ethical Framework: We would want to align with legal and ethical framework like any other ModelOps features to cover across the nine principles of responsible ML and any legal support needed.
</details>
<details> <summary> Dependency needs </summary>
- [ ] Please consider the operational aspects of the service you are creating. A list of things to think about is in: https://gitlab.com/gitlab-org/gitlab/-/issues/403859. We will be improving this process in the future: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117637#note_1353253349.
</details>
<details> <summary> Legal needs </summary>
- [ ] TBD
</details>
## Additional resources
- If you'd like help with technical validation, or would like to discuss UX considerations for AI mention the AI Assisted group using `@gitlab-org/modelops/applied-ml`.
- Read about our [AI Integration strategy](https://internal-handbook.gitlab.io/handbook/product/ai-strategy/ai-integration-effort/)
- Slack channels
- `#wg_ai_integration` - Slack channel for the working group and the high level alignment on getting AI ready for Production (Development, Product, UX, Legal, etc.) But from the other channels fell free to reach out and post progress here
- `#ai_integration_dev_lobby` - Channel for all implementation related topics and discussions of actual AI features (e.g. explain the code)
- `#ai_enablement_team` - Channel for the AI Enablement Team which is building the base for all features (experimentation API, Abstraction Layer, Embeddings, etc.)
/label ~wg-ai-integration
/cc @tmccaslin @hbenson @wayne @pedroms @jmandell
/confidential

View file

@ -0,0 +1,100 @@
## Details
- **Feature Toggle Name**: `FEATURE_NAME`
- **Required GitLab Version**: `vX.X`
--------------------------------------------------------------------------------
## 1. Preparation
- [ ] **Controllers and workers**:
1. Please link to dashboards of the workers, and the controllers and actions that can be impacted
2. ...
3. ...
## 2. Development Trial
#### Check Dev Server Versions
- [ ] GitLab: https://dev.gitlab.org/help
#### Enable on `dev.gitlab.org`:
- [ ] `/chatops feature set FEATURE_NAME true --dev` in [`#dev-gitlab`](https://gitlab.slack.com/messages/C6WQ87MU3)
Then leave running while monitoring and performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved)
## 3. Staging Trial
#### Check Staging Server Versions
- [ ] GitLab: https://staging.gitlab.com/help
#### Enable on `staging.gitlab.com`
- [ ] `/chatops run feature set FEATURE_NAME true --staging` in [`#development`](https://gitlab.slack.com/messages/C02PF508L/)
Then leave running while monitoring for at least **15 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 4. Production Server Version Check
- [ ] GitLab: https://gitlab.com/help
## 5. Initial Impact Check
- [ ] Enable for a subset of users, when using percentage gates: 1%.
Then leave running while monitoring for at least **15 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 6. Low Impact Check
- [ ] Enable for a bigger subset of users, when using percentage gates: 10%.
Then leave running while monitoring for at least **30 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 7. Mid Impact Trial
- [ ] Enable for a big subset of users, when using percentage gates: 50%.
Then leave running while monitoring for at least **12 hours** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved)
## 8. Full Impact Trial
- [ ] Enable for all users: `/chatops run feature set FEATURE_NAME true
Then leave running while monitoring for at least **1 week**.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved)
#### Success?
- [ ] Remove the feature gate from the code, and close this issue with that MR.

View file

@ -1,100 +0,0 @@
## Details
- **Feature Toggle Name**: `FEATURE_NAME`
- **Required GitLab Version**: `vX.X`
--------------------------------------------------------------------------------
## 1. Preparation
- [ ] **Controllers and workers**:
1. Please link to dashboards of the workers, and the controllers and actions that can be impacted
2. ...
3. ...
## 2. Development Trial
#### Check Dev Server Versions
- [ ] GitLab: https://dev.gitlab.org/help
#### Enable on `dev.gitlab.org`:
- [ ] `/chatops feature set FEATURE_NAME true --dev` in [`#dev-gitlab`](https://gitlab.slack.com/messages/C6WQ87MU3)
Then leave running while monitoring and performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved)
## 2. Staging Trial
#### Check Staging Server Versions
- [ ] GitLab: https://staging.gitlab.com/help
#### Enable on `staging.gitlab.com`
- [ ] `/chatops run feature set FEATURE_NAME true --staging` in [`#development`](https://gitlab.slack.com/messages/C02PF508L/)
Then leave running while monitoring for at least **15 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
## 4. Production Server Version Check
- [ ] GitLab: https://gitlab.com/help
## 5. Initial Impact Check
- [ ] Enable for a subset of users, when using percentage gates: 1%.
Then leave running while monitoring for at least **15 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
## 6. Low Impact Check
- [ ] Enable for a bigger subset of users, when using percentage gates: 10%.
Then leave running while monitoring for at least **30 minutes** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
## 7. Mid Impact Trial
- [ ] Enable for a big subset of users, when using percentage gates: 50%.
Then leave running while monitoring for at least **12 hours** while performing some testing through web, api or SSH.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved)
## 8. Full Impact Trial
- [ ] Enable for all users: `/chatops run feature set FEATURE_NAME true
Then leave running while monitoring for at least **1 week**.
#### Monitor
- [ ] [Monitor Using Grafana](https://dashboards.gitlab.net)
- [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana)
- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved)
#### Success?
- [ ] Remove the feature gate from the code, and close this issue with that MR.

View file

@ -0,0 +1,32 @@
<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/product/ux/ux-research-training/research-insights/#actionable-insights
This issue template is for an actionable insight that requires further exploration.-->
### Insight
<!-- Describe the insight itself: often the problem, finding, or observation.-->
### Supporting evidence
<!-- Describe why the problem is happening, or more details behind the finding or observation. Try to include quotes or specific data collected. Feel free to link the Actionable insight from Dovetail here if applicable instead of retyping details. -->
### Action
<!--Since this is an actionable insight that requires further exploration, ensure the action is algned to that. Describe the next step or action that needs to take place as a result of the research. The action should be clearly defined, achievable, and directly tied back to the insight. Make sure to use directive terminology, such as: conduct, explore, redesign, etc. -->
### Resources
<!--Add resources as links below or as related issues. -->
- :dove: [Dovetail project](Paste URL for Dovetail project here)
- :mag: [Research issue](Paste URL for research issue here)
- :footprints: [Follow-up issue or epic](Paste URL for follow-up issue or epic here)
### Tasks
<!--Fill out these tasks in order to consider an Actionable Insight complete. Actionable Insights are created as confidential by default, but can be made non-confidential if the insight does not include information about competitors from a Competitor Evaluation or any other confidential information. -->
- [ ] Assign this issue to the appropriate Product Manager, Product Designer, or UX Researcher.
- [ ] Add the appropriate `Group` (such as `~"group::source code"`) label to the issue. This helps identify and track actionable insights at the group level.
- [ ] Link this issue back to the original research issue in the GitLab UX Research project and the Dovetail project.
- [ ] Adjust confidentiality of this issue if applicable
/confidential
/label ~"Actionable Insight::Exploration needed"

View file

@ -0,0 +1,33 @@
<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Please follow the tasks outlined in this issue for best results. Learn more in the handbook here: https://about.gitlab.com/handbook/product/ux/ux-research-training/research-insights/#actionable-insights
This issue template is for an actionable insight that requires a change in the product.-->
### Insight
<!-- Describe the insight itself: often the problem, finding, or observation.-->
### Supporting evidence
<!-- Describe why the problem is happening, or more details behind the finding or observation. Try to include quotes or specific data collected. Feel free to link the Actionable insight from Dovetail here if applicable instead of retyping details. -->
### Action
<!--Since this is an actionable insight that requires a change in the product, ensure the action is algned to that. Describe the next step or action that needs to take place as a result of the research. The action should be clearly defined, achievable, and directly tied back to the insight. Make sure to use directive terminology, such as: change, update, add/remove, etc. -->
### Resources
<!--Add resources as links below or as related issues. -->
- :dove: [Dovetail project](Paste URL for Dovetail project here)
- :mag: [Research issue](Paste URL for research issue here)
- :footprints: [Follow-up issue or epic](Paste URL for follow-up issue or epic here)
### Tasks
<!--Fill out these tasks in order to consider an Actionable Insight complete. Actionable Insights are created as confidential by default, but can be made non-confidential if the insight does not include information about competitors from a Competitor Evaluation or any other confidential information. -->
- [ ] Assign this issue to the appropriate Product Manager, Product Designer, or UX Researcher.
- [ ] Add the appropriate `Group` (such as `~"group::source code"`) label to the issue. This helps identify and track actionable insights at the group level.
- [ ] Link this issue back to the original research issue in the GitLab UX Research project and the Dovetail project.
- [ ] Adjust confidentiality of this issue if applicable
/confidential
/label ~"Actionable Insight::Product change"
/label ~"SUS"

View file

@ -0,0 +1,19 @@
<!-- Audit Event documentation: See https://docs.gitlab.com/ee/administration/audit_events.html -->
<!-- Streaming Audit Event documentation: See https://docs.gitlab.com/ee/administration/audit_event_streaming.html -->
## Audit need
<!-- Describe the real-world use case for the audit event you want to introduce, and explain the closest thing that GitLab already captures. -->
## Proposal
<!-- Describe the audit event you are proposing should be added, including any details of what should be captured, how, and why. -->
### Streaming-only event or normal event?
<!-- Should this event be a streaming-only audit event or also logged to GitLab's database? Consider the
volume of data that will be generated by the event when answering this. -->
/label ~"Category:Audit Events"
/label ~"type::feature"
/label ~"group::compliance"

View file

@ -0,0 +1,30 @@
<!---
This issue template is for a master pipeline is failing for a flaky reason that cannot be reliably reproduced.
Please read the below documentations for a workflow of triaging and resolving broken master.
- https://about.gitlab.com/handbook/engineering/workflow/#triage-broken-master
- https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/master-broken.md
- https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/testing_guide/flaky_tests.md
--->
### Summary
<!-- Link to the failing master build and add the build failure output in the below code block section. -->
### Steps to reproduce
<!-- If the pipeline failure is reproducible, provide steps to recreate the issue locally. Please use an ordered list. -->
Please refer to [Flaky tests documentation](https://docs.gitlab.com/ee/development/testing_guide/flaky_tests.html) to
learn more about how to reproduce them.
### Proposed Resolution
<!-- Describe the proposed change to restore master stability. -->
Please refer to the [Resolution guidance](https://about.gitlab.com/handbook/engineering/workflow/#resolution-of-broken-master) to learn more about resolution of broken master.
Once the flaky failure has been fixed on the default branch, open merge requests to cherry-pick the fix to the active stable branches.
/label ~"type::maintenance" ~"failure::flaky-test" ~"priority::3" ~"severity::3"

View file

@ -0,0 +1,24 @@
<!---
This issue template is for a master pipeline is failing for a non-flaky reason.
Please read the below documentations for a workflow of triaging and resolving broken master.
- https://about.gitlab.com/handbook/engineering/workflow/#triage-broken-master
- https://gitlab.com/gitlab-org/quality/engineering-productivity/team/-/blob/main/runbooks/master-broken.md
--->
### Summary
<!-- Link to the failing master build and add the build failure output in the below code block section. -->
### Steps to reproduce
<!-- If the pipeline failure is reproducible, provide steps to recreate the issue locally. Please use an ordered list. -->
### Proposed Resolution
<!-- Describe the proposed change to restore master stability. -->
Please refer to the [Resolution guidance](https://about.gitlab.com/handbook/engineering/workflow/#resolution-of-broken-master) to learn more about resolution of broken master.
/label ~"master:broken" ~"Engineering Productivity" ~"priority::1" ~"severity::1" ~"type::maintenance" ~"maintenance::pipelines"

View file

@ -2,56 +2,55 @@
Please read this! Please read this!
Before opening a new issue, make sure to search for keywords in the issues Before opening a new issue, make sure to search for keywords in the issues
filtered by the "regression" or "bug" label. filtered by the "regression" or "type::bug" label:
For the Community Edition issue tracker: - https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=regression
- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=type::bug
- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=regression
- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=bug
For the Enterprise Edition issue tracker:
- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=regression
- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=bug
and verify the issue you're about to submit isn't a duplicate. and verify the issue you're about to submit isn't a duplicate.
---> --->
### Summary ### Summary
(Summarize the bug encountered concisely) <!-- Summarize the bug encountered concisely. -->
### Steps to reproduce ### Steps to reproduce
(How one can reproduce the issue - this is very important) <!-- Describe how one can reproduce the issue - this is very important. Please use an ordered list. -->
### Example Project ### Example Project
(If possible, please create an example project here on GitLab.com that exhibits the problematic behavior, and link to it here in the bug report) <!-- If possible, please create an example project here on GitLab.com that exhibits the problematic
behavior, and link to it here in the bug report. If you are using an older version of GitLab, this
(If you are using an older version of GitLab, this will also determine whether the bug is fixed in a more recent version) will also determine whether the bug is fixed in a more recent version. -->
### What is the current *bug* behavior? ### What is the current *bug* behavior?
(What actually happens) <!-- Describe what actually happens. -->
### What is the expected *correct* behavior? ### What is the expected *correct* behavior?
(What you should see instead) <!-- Describe what you should see instead. -->
### Relevant logs and/or screenshots ### Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output, <!-- Paste any relevant logs - please use code blocks (```) to format console output, logs, and code
logs, and code as it's tough to read otherwise.) as it's tough to read otherwise. -->
### Output of checks ### Output of checks
(If you are reporting a bug on GitLab.com, write: This bug happens on GitLab.com) <!-- If you are reporting a bug on GitLab.com, uncomment below -->
<!-- This bug happens on GitLab.com -->
<!-- /label ~"reproduced on GitLab.com" -->
#### Results of GitLab environment info #### Results of GitLab environment info
<!-- Input any relevant GitLab environment information if needed. -->
<details> <details>
<summary>Expand for output related to GitLab environment info</summary> <summary>Expand for output related to GitLab environment info</summary>
<pre> <pre>
(For installations with omnibus-gitlab package run and paste the output of: (For installations with omnibus-gitlab package run and paste the output of:
@ -65,6 +64,8 @@ logs, and code as it's tough to read otherwise.)
#### Results of GitLab application Check #### Results of GitLab application Check
<!-- Input any relevant GitLab application check information if needed. -->
<details> <details>
<summary>Expand for output related to the GitLab application check</summary> <summary>Expand for output related to the GitLab application check</summary>
<pre> <pre>
@ -82,6 +83,6 @@ logs, and code as it's tough to read otherwise.)
### Possible fixes ### Possible fixes
(If you can, link to the line of code that might be responsible for the problem) <!-- If you can, link to the line of code that might be responsible for the problem. -->
/label ~bug /label ~"type::bug"

View file

@ -1,16 +0,0 @@
## Description of the proposal
<!--
Please describe the proposal and add a link to the source (for example, http://www.betterspecs.org/).
-->
- [ ] Mention the proposal in the next backend weekly call and the #backend channel to encourage contribution
- [ ] Proceed with the proposal once 50% of the maintainers have weighed in, and 80% of the votes are :+1:
- [ ] Once approved, mention it again in the next backend weekly call and the #backend channel
/label ~"development guidelines"
/label ~"Style decision"
/label ~Documentation
/cc @gitlab-org/maintainers/rails-backend

View file

@ -0,0 +1,13 @@
Before raising an issue to the GitLab issue tracker, please read through our guide for finding help to determine the best place to post:
* https://about.gitlab.com/getting-help/
If you are experiencing an issue when using GitLab.com, your first port of call should be the Community Forum. Your issue may have already been reported there by another user. Please check:
* https://forum.gitlab.com/
If you feel that your issue can be categorized as a reproducible bug or a feature proposal, please use one of the issue templates provided and include as much information as possible.
Thank you for helping to make GitLab a better product.
<!-- template sourced from https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Default.md -->

View file

@ -0,0 +1,101 @@
For guidance on the overall deprecations, removals and breaking changes workflow, please visit [Breaking changes, deprecations, and removing features](https://about.gitlab.com/handbook/product/gitlab-the-product/#deprecations-removals-and-breaking-changes)
<!-- Use this template as a starting point for deprecations. -->
### Deprecation Summary
<!--
This should contain a brief description of the feature or functionality that is deprecated. The description should clearly state the potential impact of the deprecation to end users.
It is recommended that you link to the documentation.
The description of the deprecation should state what actions the user should take to rectify the behavior. If the deprecation is scheduled for an upcoming release, the content should remain in the deprecations documentation page until it has been completed. For example, if a deprecation is announced in 14.9 and scheduled to be completed in 15.0, the same content would be included in the documentation for 14.9, 14.10, and 15.0.
**If this issue proposes a breaking change outside a major release XX.0, you need to get approval from your manager and request collaboration from Product Operations on communication. Be sure to follow the guidance [here](https://about.gitlab.com/handbook/product/gitlab-the-product/#deprecations-removals-and-breaking-changes.)**
-->
### Breaking Change
<!-- Does this MR contain a breaking change? If yes:
- Add the ~"breaking change" label to this issue.
- Add instructions for how users can update their workflow. -->
### Affected Topology
<!--
Who is affected by this deprecation, Self-managed users, SaaS users, or both? This is especially important when nearing the annual major release where breaking changes and removals are typically introduced. These changes might be seen on GitLab.com before the official release date.
-->
### Affected Tier
<!--
Which tier is this feature available in?
* Free
* Premium
* Ultimate
-->
### Checklists
**Labels**
- [ ] This issue is labeled ~deprecation, and with the relevant `~devops::`, `~group::`, and `~Category:` labels.
- [ ] This issue is labeled ~"breaking change" if the removal of the deprecated item will be a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#examples-of-breaking-changes).
**Timeline**
Please add links to the relevant merge requests.
- As soon as possible, but no later than the third milestone preceding the major release (for example, given the following release schedule: `14.8, 14.9, 14.10, 15.0` `14.8` is the third milestone preceding the major release):
- [ ] A [deprecation announcement entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-the-announcement) has been created so the deprecation will appear in release posts and on the [general deprecation page](https://docs.gitlab.com/ee/update/deprecations).
- [ ] Documentation has been updated to mark the feature as [deprecated](https://docs.gitlab.com/ee/development/documentation/versions.html#deprecations-and-removals).
- [ ] On or before the major milestone: A [removal entry](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-the-announcement-1) has been created so the removal will appear on the [removals by milestones](https://docs.gitlab.com/ee/update/removals) page and be announced in the release post.
- On the major milestone:
- [ ] The deprecated item has been removed.
- [ ] If the removal of the deprecated item is a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#examples-of-breaking-changes), the merge request is labeled ~"breaking change".
**Mentions**
- [ ] Your stage's stable counterparts have been `@mentioned` on this issue. For example, Customer Support, Customer Success (Technical Account Manager), Product Marketing Manager.
- To see who the stable counterparts are for a product team visit [product categories](https://about.gitlab.com/handbook/product/categories/)
- If there is no stable counterpart listed for Sales/CS please mention `@timtams`
- If there is no stable counterpart listed for Support please mention `@gitlab-com/support/managers`
- If there is no stable counterpart listed for Marketing please mention `@cfoster3`
- [ ] Your GPM has been `@mentioned` so that they are aware of planned deprecations. The goal is to have reviews happen at least two releases before the final removal of the feature or introduction of a breaking change.
### Deprecation Milestone
<!-- In which milestone will this deprecation be announced ? -->
### Planned Removal Milestone
<!-- In which milestone will the feature or functionality be removed and announced? -->
### Links
<!--
Add links to any relevant documentation or code that will provide additional details or clarity regarding the planned change.
This issue is the main SSOT for the deprecations and removals process. Be sure to link all
issues and MRs related to this deprecation/removal to this issue. This can include removal
issues that were created ahead of time, and the MRs doing the actual deprecation/removal work.
-->
<!-- Label reminders - you should have one of each of the following labels.
Use the following resources to find the appropriate labels:
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/
-->
<!-- Populate the Section, Group, and Category -->
/label ~devops:: ~group: ~Category:
<!-- Choose the Pricing Tier(s) -->
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
<!-- Identifies that this Issue is related to deprecating a feature -->
/label ~"deprecation"
<!-- Add the ~"breaking change" label to this issue if necessary -->

View file

@ -0,0 +1,210 @@
<!-- Title: Design Sprint -->
This template outlines a sample set-up process, activities and deliverables for running a Remote Design Sprint. The specific activities and deliverables should be customized based on your objectives and timeline.
Please refer to the [Remote Design Sprint Handbook page](#anchor-tag-to-handbook-page) for additional recommendations.
## Design Sprint Focus
* [ ] Have you [determined that a Design Sprint is appropriate for this project](#anchor-tag-to-handbook-page)?
<!-- What is the focus of the [Design Sprint](https://about.gitlab.com/handbook/product/product-processes/#design-sprint)? What problem area will you be solving for and who is the target user? -->
## Objectives
<!-- Try to describe the objectives of the Sprint in detail. eg "We want to introduce a new feature but we are unsure that we are thinking about the solution from the customer's perspective and through the Sprint we want to rethink the solution, prototype it and validate it with our customers" or "We are unhappy with the direction of one of our categories and we want to explore new directions with different stakeholders, reach to one solution and test it with users" or "Among the team we have different visions for a specific category and we want to work towards a solution we all support and test it with users". -->
## Outputs
- [ ] A User testing flow.
- [ ] A Prototype to be tested with users.
- [ ] User testing analysis.
- [ ] (If the solution is viable) An epic or issue that describes the direction in details and the next steps
- [ ] Necessary updates to the Handbook.
## Design Sprint Details
| Start | End |
| ------ | ------ |
| YYYY-MM-DD | YYYY-MM-DD |
| TT:TT PST | TT:TT PST |
### WHEN
**Start date:**
**End date:**
**Reference time zone:**
### WHERE
**Zoom link:**
### WHO
- `Name` `gitlab handle` - Facilitator
- `Name` `gitlab handle` - Decider (usually the Product Manager)
- `Name` `gitlab handle` - Co-decider (optional)
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Sprint team member
- `Name` `gitlab handle` - Co-facilitator (optional)
## Tools
Here is the list of tools for the Sprint preparation, collaboration and documentation. Prior to the Sprint make sure you have access to all of the following:
* **GitLab**<br/>
Each Sprint day outcomes and material will be documented in a separate issue under the Design Sprint epic.
* **Mural** (You can join as anonymous but we need to be able to identify input against names, so please create an account beforehand.<br/>
We will use Mural for most of the Sprint collaboration. Some of the things we will do in Mural:
* Create artifacts like affinity diagrams from participants' input
* Use post-its to comment on each other's points and to add notes
* Vote on ideas and solutions
* Create the first draft of the prototype.
The Mural link to the collaboration project will be provided in the issue before the start of the Design Sprint.
* **Video and/or screen recording tool** (Loom, Quicktime, Zoom or another tool you are using).<br/>
As part of the pre-Sprint homework, you will be asked to record a short Lightning Walkthrough video. You can use any tool you feel comfortable with as long as it can capture your screen, mouse pointer and your audio.
* **A4/Letter sized paper (preferably white blank), Sharpies/Pens** (please don't use a pencil because it doesn't create enough contrast for photos).<br/>
Day 2 of the sprint involves some (async) ideation via sketching so you will need a writing utensil (Sharpies are preferred because they force you to draw at a lower fidelity because the small details aren't necessary at this point) and some paper. This is the most fun part of the Sprint where you get into a design thinking mindset and can appeal to your creative self. Don't worry, it's not about artistry, it's about ideas and collaboration.
* **Camera (phone or other) or scanner**<br/>
You will need to upload sketches as images for the facilitator to prepare the material before the next sync meeting. You can take a photo with your phone or use a scanner if available.
* **Post-it notes (Optional)**<br/>
If you enjoy taking notes using post-it notes make sure you have available some of them as well. The upside is that they will make you feel more like you are in a workshop and will help the ideas flow (I find that typing is distracting while ideating). The downside is that you will have to digitalise the ones you want to share with the team in Mural.
## Artefacts & Pre-Read Material
<!-- If there is material that will be useful for the participants to read before the Design Sprint add here. -->
### Handbook pages
<!-- Add a link to the category vision from the handbook -->
### Competitor resources
<!-- Add any solutions by competitors that are relevant to the Design Sprint topic and could be used as source of inspiration. -->
### Articles on Design Sprints
* [The Design Sprint](https://www.gv.com/sprint/)
* [The Ultimate Guide To Remote Design Sprints](https://drive.google.com/file/d/16bwrAqHVf8qxovd87Q7LdzqwAgy7a6Rx/view?usp=sharing)
## Asyncronus tasks
### Design Sprint preparation
<!-- Replace the roles with GitLab handles to assign to specific participants -->
- [ ] Finalise participant list - `decider` and `facilitator`
- [ ] Create [participation form](https://docs.google.com/forms/d/e/1FAIpQLSc0_BNltvRW8yXXaJd8sIKzgDmrSGqILMfkoCJrAj6sFcsMcg/viewform?usp=sf_link) and send to participants (**deadline**: [date]) - `facilitator`
- [ ] Create a dedicated Slack channel and add participants - `facilitator`
- [ ] Promote this issue to an epic - `facilitator`
- [ ] Create issues under the epic for the pre-workshop tasks: Expert interviews ([example](https://gitlab.com/groups/gitlab-org/configure/-/epics/3#note_332412524)), Lightning walkthroughs and How might we.. notetaking assignment ([example](https://gitlab.com/gitlab-org/configure/general/-/issues/52)), Voting How might we... notes assignment ([example](https://gitlab.com/gitlab-org/configure/general/-/issues/54)) - `facilitator`
- [ ] Create sync meetings in calendar and invite all participants (**deadline**: [date]) - `decider` or `facilitator`
- [ ] Block 2 hours for Sprint activities in calendar for the Sprint week - `all participants`
- [ ] Prepare material and tools (eg. presentation templates, Google folders, Instructions videos etc) and Mural board from the [Mural template ](https://app.mural.co/invitation/mural/gitlab2474/1586990879319?sender=jmandell0210&key=03c25e92-9a43-4a3d-8907-6f0c3b094ab8) - facilitator
- [ ] Finalize Agenda - `facilitator`
- [ ] Run a test with material and tools - `facilitator`
- [ ] Start user recruiting for prototype user testing (EOD 1) - `facilitator` or `decider`
### Pre-Sprint activities (Homework exercises)
Each exercise should be explained and documented in a separate issue. You can use the example issues above as templates.
- [ ] Fill form and submit (**deadline**: [date]) - `all participants except the facilitator`
- [ ] Expert interview analysis - `facilitator`
- [ ] Lightning walkthrough videos (**deadline**: [date]) - `all participants except the facilitator`
- [ ] How might we... notetaking assignment (**deadline**: [date]) - `all participants except the facilitator`
- [ ] Voting How might we... notes assignment (**deadline**: [date]) - `all participants except the facilitator`
- [ ] Add all required material to the Mural board (**deadline**: [date]) - `facilitator`
### During Sprint activities
- [ ] Organise user testing sessions - `facilitator` or `decider`
- [ ] Create the Prototype to be tested and task list (End of Day 3) - `Product designer` or `Front end developer`
- [ ] Run user testing sessions - `facilitator` or `decider`
### Post-Sprint activities
- [ ] Create a feedback issue for the Design Sprint - `facilitator` or `decider`
- [ ] Analyse user testing results - `facilitator` or `decider`
- [ ] Create report and share with the Design Sprint participants and wider team - `facilitator` or `decider`
## Personas
Deciding which persona we are focusing on will be part of the Day 1 discussions in the workshop. The personas we are going to consider are:
<!-- Choose which personas could be target users so that you choose from this list during the Sprint. Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
-->
## Agenda
### Day 1
| Activity | Duration | Tool | Description |
|---|---|---|---|
| Warm-up exercise | 5 mins | Mural | Write 1 post-it answering the questions: <br/>"My name is…"<br/>"My role is…"<br/>“Something about myself you may not know is…”<br/>"My wish for this workshop is…" |
| Summarise the async activities & complete Map | 20 mins | Mural | The Map is intended to show the focus of the Sprint and doesn't need to be complete or detailed. Steps:<br/> Go through the Map and the top voted How might wes tree as a warm-up/reminder. <br/> • Make appropriate adjustments and additions to the map based on the reviews from the team. <br/> • Add the most voted HMWs to the most relevant area on the Map. If a HMW can go to more than one place, add it to the most left area. |
| Long term goals/Deciding the Sprint goal | 15 mins | Mural | • Long term goal: Everyone spends 5 minutes in silence and writes one (max 2) long term goal post-it note for the Sprint. (5 mins ) <br/> • One by one everyone will read their goal aloud to the team. (5 mins) <br/> Everyone besides the decider will vote on the goal of the Sprint (1 dot). (4 minutes) <br/> The decider then makes the final decision on the long term goal of the Sprint. (1 min) |
| Sprint questions | 20 mins | Mural | • Referencing the Long Term goal, everyone will write 2-3 post-it note Sprint questions for the biggest challenges they think might stop us from achieving our long term goal (what might hold us back or hinder us from achieving this goal). The questions should start with “Can we...” (similarly to the HMW). (7 mins) <br/> • One by one everyone will read their Sprint questions aloud to the team. (5 mins) <br/> • Everyone (including the decider) votes on the top 3 questions they think we should focus on as Sprint challenges (3 dots). (5 mins) <br/> • Separate the 3 most voted questions and keep them on the side. (1 min) <br/> • Finally, the decider chooses one Sprint question that will be the question we will focus on more during the Sprint by placing a green smiley sticker on it. (1 min) <br/> • Move the long term goal and the Sprint questions to the dedicated Mural space, highlighting the ultimate Sprint question that the decider chose. (1 min) |
| Recap day. <br/> Short intro to next day and share the video with the next day exercise instructions. | 5 mins | Mural, Zoom | Summarise activities of the day and decisions. Brief walkthrough of the next day's activities and wrap up the day. |
### Day 2
| Activity | Duration | Tool | Description |
|---|---|---|---|
| Summary of Day 1 outcomes | 5 mins | Mural | Go through the previous day's activities, the Long term goal and the top voted Sprint questions, highlighting the ultimate Sprint question, and summarise the concept solution sketching homework exercise. |
| Concept gallery review | 20 mins | Mural | • Everyone takes some time to read through and look at every aspect of each of the sketches in the Concept Gallery. The concept sketches are anonymous to avoid bias (15 mins). <br/> • The team will then vote on their favorite concepts and/or components of a concept via the red dots. When they see something that interests them and they think it will help solve the long term goal/challenges they can add one or more dots. They can use as many red dots as they want. Be frivolous when adding dots but if you really like or think something is important, add more to draw attention to it (5 mins).<br/> Note: If anyone has any questions about a concept sketch create a red sticky and write that question down placing it under the concept sketches. |
| Speed critique | 5 mins | Mural | • The facilitator walks through each of the concepts, briefly summarizing each concept (to the best of their ability) with a focus on the areas that have been dotted. <br/> • During this time the facilitator will also try to answer any of the red post-it questions. <br/> • When the facilitator believes theyve reached the end of their summary for that concept, ask the team if there was a concept that was voted on but not discussed or if the point of the red dot vote was missed in the discussion.
| Straw Poll | ~15 mins | Mural | • All the participants, besides the Decider, vote using the larger green dot by adding their initials to it and placing it on the concept sketch they believe is the best one that will best fulfill the long term goal and challenges of this sprint and is worthy of being prototyped (2 mins) <br/> • Each participant will create a post-it note that explains their reasoning for choosing the concept. (5 mins) <br/> • Each participant will then get 1 minute to read through their post-it and attempt to sell their preferred concept to the Decider and the other participants. (5-10 mins) |
| Super Vote (The Decider) | 10 mins | Mural | • The Decider makes their final decision of which of the concepts is the one to move forward with. <br/> • The decider can discuss their thought process and any questions with the rest of the participants. <br/> • They will get 2 green smiley stickers to vote with. Placing one on the concept they want to move forward with and the second, optional smiley, can be used to mark any other area of any other concept they think should also be incorporated into the prototype. |
### Day 3
| Activity | Duration | Tool | Description |
|---|---|---|---|
| User test flow | 25 mins | Mural | • Each participant writes (on separate post-its) 6 steps/actions that represent a step of a flow (you can think of a high-level prototype flow) from start to finish. Place them in the appropriate location on the User Test section. (10 mins) <br/> • Each participant takes 1 minute to walk the team through their flows one-by-one (5-10 mins total). Note: It's best to have the Decider go last. <br/> • Voting: All the Sprint participants get one red dot (the Decider gets 2) to vote on the flow row they think is the best foundation for the prototype. <br/> • After everyone has voted the Decider will vote on the row they think is best with one dot using the second dot to, optionally, vote on an element of another flow they think should be incorporated into the prototype. (5 mins) <br/> • If the second dot is used copy the specific sticky into the main flow voted by the Decider. |
| Storyboard | 45 mins | Mural | • Copy the winning flow from the User Test Flow exercise to the Storyboard/Prototype section placing each individual post-it note into its own container. <br/> • Look at the sketch concepts and move over any relevant screens that fulfill the needs of the sticky note in that container. You can move the entire concept or screen capture cut/paste parts of concepts. Note: Dont add any unnecessary details or ideas that arent needed for the end result prototype <br/> • Fill in the details that are required for each step described in the sticky. |
| Recap day | 5 mins | Mural, Zoom | Summarise activities of the day and decisions. Brief walkthrough of the next day's activities and wrap up the day. |
### Day 4
| Activity | Duration | Tool | Description |
|---|---|---|---|
| Validate Prototype | 30 mins | Mural | • Go through the Prototype created by the Product designer or Front end developer and discuss any inaccuracies or missing content. |
| Wrap up the Sprint | 15 mins | Zoom, GitLab | • Recap the Sprint and discuss next steps. Create user testing issues. |
### Day 5
| Activity | Duration | Tool | Description |
|---|---|---|---|
| Prototype testing with 5 users | ~45 mins | Figma or code/Zoom | • Test the prototype with users. |
## Ground Rules
* Honor the Facilitator's directions. They're the guide for the entire process.
* Minimise distractions: During the week you will need to dedicate some hours to the Sprint for async tasks and sync video conferences. During this time we recommend blocking time in your calendar and having devices or apps with notifications turned off during that time.
* All opinions are valid and are equally important, however, the Decider has the ultimate, final decision.
* Everyone is an active participant in a sync activity (with the exception of the Observers).
* One conversation at a time.
* Document as much as you can: We should have concrete outputs to share with broader team. Also interesting ideas or fixes should be documented to be transferred in issues for our backlog.
* Stick to scheduled breaks during sync calls. The Facilitator will guide each session and set break times.
* The Sprint is one of the few chances we get to work so closely together. Have fun!

View file

@ -8,13 +8,13 @@
## References ## References
Merged MR that introduced documentation requiring review: Merged MR that introduced documentation requiring review:
Related issue(s): Related issue(s):
## Further Details ## Further Details
<!-- Any additional context, questions, or notes for the technical writer. --> <!-- Any additional context, questions, or notes for the technical writer. -->
/label ~Documentation ~docs-review /label ~documentation ~"Technical Writing"

View file

@ -0,0 +1,38 @@
<!--
* Use this template for documentation issues identified
* by [Vale](https://docs.gitlab.com/ee/development/documentation/testing.html#vale)
* or [markdownlint](https://docs.gitlab.com/ee/development/documentation/testing.html#markdownlint).
* This template is meant to describe work for first-time contributors or
* for work during Hackathons.
*
* Feature development work should not use this template. Use the Feature Request template instead.
-->
## Hi community contributors! :wave:
Do you want to work on this issue?
- **If the issue is unassigned**, in a comment, type `@docs-hackathon I would like to work on this issue` and a writer will assign it to you.
To be fair to others, do not ask for more than three issues at a time.
- **If the issue is assigned to someone already**, choose another issue. Do not open a merge request for this issue if you are not assigned.
## To resolve the issue
[Follow these instructions to create a merge request](https://docs.gitlab.com/ee/development/documentation/workflow.html#how-to-update-the-docs).
- Don't submit your merge request until after the Hackathon has started.
- Try to address the issue in a single merge request.
- Try to stick to the scope of the issue. If you see other improvements that can be made in the file, open a separate merge request.
- When you create the merge request, select the **Documentation** merge request description template.
- In the merge request's description, add a link to this issue.
- Follow the [commit message guidelines](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#commit-messages-guidelines).
Use three to five words for your commit message, start with message with a capital letter, and do **not** end it in a period.
Other commit messages can cause the pipeline to fail.
Thank you again for contributing to the GitLab documentation! :tada:
## Documentation issue
/labels ~"documentation" ~"docs-only" ~"documentation" ~"docs::improvement" ~"type::maintenance" ~"maintenance::refactor" ~"Seeking community contributions" ~"quick win" ~"Technical Writing"

View file

@ -2,23 +2,13 @@
* Use this issue template for suggesting new docs or updates to existing docs. * Use this issue template for suggesting new docs or updates to existing docs.
Note: Doc work as part of feature development is covered in the Feature Request template. Note: Doc work as part of feature development is covered in the Feature Request template.
* For issues related to features of the docs.gitlab.com site, see * For issues related to features of the docs.gitlab.com site, see
https://gitlab.com/gitlab-org/gitlab-docs/issues/ https://gitlab.com/gitlab-org/gitlab-docs/issues/
* For information about documentation content and process, see * For information about documentation content and process, see
https://docs.gitlab.com/ee/development/documentation/ --> https://docs.gitlab.com/ee/development/documentation/ -->
<!-- Type of issue -->
<!-- Un-comment the line for the applicable doc issue type to add its label.
Note that all text on that line is deleted upon issue creation. -->
<!-- /label ~"docs:fix" - Correction or clarification needed. -->
<!-- /label ~"docs:new" - New doc needed to cover a new topic or use case. -->
<!-- /label ~"docs:improvement" - Improving an existing doc; e.g. adding a diagram, adding or rewording text, resolving redundancies, cross-linking, etc. -->
<!-- /label ~"docs:revamp" - Review a page or group of pages in order to plan and implement major improvements/rewrites. -->
<!-- /label ~"docs:other" - Anything else. -->
### Problem to solve ### Problem to solve
<!-- Include the following detail as necessary: <!-- Include the following detail as necessary:
@ -34,8 +24,8 @@
* Any concepts, procedures, reference info we could add to make it easier to successfully use GitLab? * Any concepts, procedures, reference info we could add to make it easier to successfully use GitLab?
* Include use cases, benefits, and/or goals for this work. * Include use cases, benefits, and/or goals for this work.
* If adding content: What audience is it intended for? (What roles and scenarios?) * If adding content: What audience is it intended for? (What roles and scenarios?)
For ideas, see personas at https://design.gitlab.com/research/personas or the persona labels at For ideas, see personas at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ or the persona labels at
https://gitlab.com/groups/gitlab-org/-/labels?utf8=%E2%9C%93&subscribed=&search=persona%3A https://gitlab.com/groups/gitlab-org/-/labels?subscribed=&search=persona%3A
--> -->
### Proposal ### Proposal
@ -50,4 +40,4 @@
<!-- E.g. related GitLab issues/MRs --> <!-- E.g. related GitLab issues/MRs -->
/label ~Documentation /label ~documentation

View file

@ -0,0 +1,17 @@
<!--Lightweight issue template to encourage Dogfooding and educate team members about the importance of Dogfooding -->
/label ~"dogfooding" ~"group::" ~"section::" ~"Category:"
## Feature to Dogfood
<!--Link to Description of feature (Documentation, Epic, Opportunity Canvas, etc.) -->
## Goals
<!--Level of Dogfooding you are looking for: problem validation, testing, production usage, etc -->
## Progress Tracker
<!--List of tasks (e.g. a table with columns, project, status, issue links similar to what is [done here](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/8499))-->
## Why Dogfooding is Important
- https://about.gitlab.com/handbook/values/#dogfooding
- https://about.gitlab.com/handbook/product/product-processes/#dogfood-everything
- https://about.gitlab.com/handbook/engineering/#dogfooding

View file

@ -0,0 +1,80 @@
<!-- Before implementing a new empty state solution, make sure to read the
Empty State region docs in Pajamas: https://design.gitlab.com/regions/empty-states -->
## Description
<!-- Describe the solution you're proposing for your empty state region.
Include links to user research (if applicable). -->
## Location
<!-- Provide a link and location of the new empty state solution.
For example: https://gitlab.com/gitlab-org/gitlab-services/design.gitlab.com/-/issues -->
## Use case
<!-- What is the use case for the solution you're proposing?
Read the Empty State docs and select the use case below: https://design.gitlab.com/regions/empty-states -->
- [ ] Blank content
- [ ] Empty search results
- [ ] Configuration required
- [ ] Higher tier
## Checklist
<!-- Follow the steps below that correspond with the use case selected above.
Follow the steps to complete this issue -->
### Blank content
- [ ] The solution follows the `Blank content` specifications [in Pajamas](https://design.gitlab.com/regions/empty-states#blank-content).
- [ ] Follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
### Empty search results
- [ ] The solution follows the `Empty search results` specifications [in Pajamas](https://design.gitlab.com/regions/empty-states#empty-search-results).
- [ ] Follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
### Configuration required
- [ ] The solution follows the `Configuration required` specifications [in Pajamas](https://design.gitlab.com/regions/empty-states#configuration-required).
- [ ] Ask a [Growth product manager or Designer](https://about.gitlab.com/handbook/engineering/development/growth/#stable-counterparts) to review your solution.
- [ ] Is your solution introducing a new empty states or modifying an existing one?
- [ ] Introducing a new empty state: Follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
- [ ] Modifying an existing empty state: Follow the [`Experimentation` process](#experimentation) below. _Note_: If the empty state you want to replace hasn't been updated in a long time, doesn't pitch the value of the feature, or does not contain a next step action CTA, then we recommend you skip the experimentation process to implement and add tracking to your new empty state.
<!-- IF experimentation -->
#### Experimentation
- [ ] Collaborate with a [Growth product manager](https://about.gitlab.com/handbook/engineering/development/growth/#stable-counterparts) to help you determine if you can validate your solution through an experiment on SaaS.
- [ ] If an experiment is possible, create an issue using the [experiment idea template](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Idea) and follow the template intructions. Otherwise, follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
- [ ] Ask a [Growth product manager or Designer](https://about.gitlab.com/handbook/engineering/development/growth/#stable-counterparts) to review your experiment set-up.
- [ ] Implement and monitor the experiment following the [implementation guide](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/experiment_guide/gitlab_experiment.md#implement-an-experiment).
- [ ] Review and discuss the findings.
- [ ] Add the findings to the [Growth experimentation knowledge](https://about.gitlab.com/direction/growth/#growth-experiments-knowledge-base---concluded-experiments).
### Higher tier
- [ ] The solution follows the `Higher tier` specifications [in Pajamas](https://design.gitlab.com/regions/empty-states#higher-tier).
- [ ] Ask a Product Manager or Designer from the [Conversion group](https://about.gitlab.com/handbook/engineering/development/growth/conversion/#group-members) to review your solution.
- [ ] Is your solution introducing a new empty states or modifying an existing one?
- [ ] Introducing a new empty state: follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
- [ ] Modifying an existing empty state, follow the [`Experimentation` process](#experimentation) below.
<!-- IF experimentation -->
#### Experimentation
- [ ] Collaborate with a [Growth product manager](https://about.gitlab.com/handbook/engineering/development/growth/#stable-counterparts) to help you determine if you can validate your solution through an experiment on SaaS.
- [ ] If an experiment is possible, create an issue using the [experiment idea template](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Idea) and follow the template intructions. Otherwise, follow the instructions from the [`After merge` section](#after-merge) below to add Snowplow tracking.
- [ ] Add a ~"Category:Conversion Experiment" label to the experiment idea issue.
- [ ] Ask a Product Manager or Designer from the [Conversion group](https://about.gitlab.com/handbook/engineering/development/growth/conversion/#group-members) to review your experiment set-up.
- [ ] Implement and monitor the experiment following the [implementation guide](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/experiment_guide/gitlab_experiment.md#implement-an-experiment) .
- [ ] Review and discuss the findings.
- [ ] Add the findings to the [Growth experimentation knowledge](https://about.gitlab.com/direction/growth/#growth-experiments-knowledge-base---concluded-experiments).
## After merge
- [ ] Use the `Snowplow event tracking` [issue template](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Snowplow%20event%20tracking) and open an issue to add Snowplow event tracking to your new empty state solution.
- [ ] Add your ~devops:: and ~group:: labels to the new issue.

View file

@ -0,0 +1,48 @@
## Experiment summary
We believe that... {describe your hypothesis in one sentence}
To verify that, we will... {describe your test in one sentence}
And well measure the impact on... {metrics}
## Hypothesis
<!-- The hypothesis represents the high-level thought process in creating the experiment but does not need to be proven in one experiment. For example, you could have a hypothesis that “users would benefit from more easily being able to start a trial” and your first experiment could fail, that doesnt void your hypothesis only indicates you may need to think of a new iterative experiment that would still align with your hypothesis. -->
## Business problem
<!-- Where the hypothesis is focused on the user/customer, the business problem represents why/how an experiment in this area could positively impact the business. For example, trials represent a significant way for GitLab to produce valuable leads for the sales team. -->
## Supporting data
<!-- Why should we run this experiment? Whats the potential impact? Show supporting data thats both qualitative and quantitative. Quantitative example, we generate 30,000 sign ups a month and 900 trails within 90 days (3%) with a close rate of 10% and an IACV of $400. If were able to increase our trial volume by 10% percent (990 trials a month) we will generate an additional $3,600 IACV if our close rates remain constant. Qualitative example, in searching Zendesk I was able to find 10 support tickets in the last 30 days that referenced difficulties with starting a trial due to the user not being an admin. (all numbers are hypothetical and only listed for the purpose of having an example) -->
## Expected outcome
<!-- What is the expected outcome of this experiment, what metric are we trying to move? Are there any metrics we know we do not want to impact? For example, we want to impact IACV by increasing the rate at which users start trials within 30 days but we also want to ensure we don't increase the churn rate for users who've recently purchased. -->
## Experiment design & implementation
<!-- What is the experiment were going to run? How long do you believe it will need to run to reach significance? For example, our experiment would be to allow non-admins to request a trial through their admin, to detect a 10% change from our baseline conversion rate well need a sample size of 57,000 (source Optimizely), with our current sign up rate of 30,000 a month this experiment will need to run for ~2 months. (all numbers are hypothetical and only listed for the purpose of having an example) -->
## ICE score
<!-- See https://about.gitlab.com/handbook/product/growth/#growth-ideation-and-prioritization -->
| Impact | Confidence | Ease | Score |
| ------ | ------ | ------ | ------ |
| value 1 | value 2 | value 3 | Average(1:3) |
## Known assumptions
<!-- This is an area to call out known assumptions in the experiment, this is especially helpful for any future colleagues that join the team so they understand other potential influences and how they were accounted for. This section is also helpful in framing possible scenarios and to keep the door open for the next steps. For example, were hoping our experiment will increase the number of people that start a trial but were assuming the conversion rate to paid and IACV will remain the same. This is a known assumption and depending on the results of the experiment could impact the direction we take on any future iterations. -->
## Results, lessons learned, next steps
<!-- What were the results of the experiment? Was the experiment a success or a failure? Based on the results should we remove the code or advocate that it become a permanent part of the experience for all users? Are there future experiments the team is going to run based off these results (include a link to new issue)? For example, our trial experiment was successful we increased the trial create rate by 10% but we saw a 1% drop in our close rate which means our net impact on IACV was negative $360 (990 * 0.09 * 400 compared tot he control of 900 * 0.1 * 400). Our next experiment (link) will focus on increasing the value once a user starts a trial. (all numbers are hypothetical and only listed for the purpose of having an example) -->
## Checklist
* [ ] Fill in the experiment summary and write more about the details of the experiment in the rest of the issue description. Some of these may be filled in through time (the "Result, learnings, next steps" section for example) but at least the experiment summary should be filled in right from the start.
* [ ] Add the label of the `group::` that will work on this experiment (if known).
* [ ] Mention the Product Manager, Engineering Manager, and at least one Product Designer from the group that owns the part of the product that the experiment will affect.
* [ ] Fill in the values in the [ICE score table](#ice-score) ping other team members for the values you arent confident about (i.e. engineering should almost always fill out the ease section). Add the ~"ICE Score Needed" label to indicate that the score is incomplete.
* [ ] Replace the ~"ICE Score Needed" with an ICE low/medium/high score label once all values in the ICE table have been added.
* [ ] Mention the [at]gitlab-core-team team and ask for their feedback.
/label ~"workflow::validation backlog" ~"experiment idea"

View file

@ -0,0 +1,25 @@
<!-- Title suggestion: Experiment Implementation: [description] -->
# Experiment Summary
<!-- Quick rundown of what is being done -->
# Design
<!-- This should include the contexts that determine the reproducibility (stickiness) of an experiment. This means that if you want the same behavior for a user, the context would be user, or if you want all users when viewing a specific project, the context would be the project being viewed, etc. -->
# Rollout strategy
<!-- This is currently called A/B test, which isn't accurate for multi-variants. Let's call this rollout strategy. It should outline the percentages for variants and if there's more than one step to this, each of those steps and the timing for those steps (e.g. 30 days after initial rollout). -->
# Inclusions and exclusions
<!-- These would be the rules for which given context (and are limited to context or resolvable at experiment time details) is included or excluded from the test. An example of this would be to only run an experiment on groups less than N number of days old. -->
# Segmentation
<!-- Rules for always saying context with these criteria always get this variant. For instance, if you want to always give groups less than N number of days old the experiment experience, they are specified here. This is different from the exclusion rules above. -->
# Tracking Details
- [json schema](https://gitlab.com/gitlab-org/iglu/-/blob/master/public/schemas/com.gitlab/gitlab_experiment/jsonschema/0-3-0) used in `gitlab-experiment` tracking.
- see [event schema](https://docs.gitlab.com/ee/development/snowplow/index.html#event-schema) for a guide.
| sequence | activity | category | action | label | property | value |
| -------- | -------- | ------ | ----- | ------- | -------- | ----- |
| | | | | | | |

View file

@ -0,0 +1,120 @@
<!-- Title suggestion: [Experiment Rollout] feature-flag-name - description of experiment -->
## Summary
This issue tracks the rollout and status of an experiment through to removal.
1. Feature flag name: `<feature-flag-name>`
1. Epic or issue link: `<issue or epic link>`
This is an experiment rollout issue
using the scoped [experiment label](https://about.gitlab.com/handbook/engineering/development/growth/experimentation/#experiment-rollout-issue).
As well as defining the experiment rollout and cleanup, this issue incorporates the relevant
[`Feature Flag Roll Out`](https://gitlab.com/gitlab-org/gitlab/-/edit/master/.gitlab/issue_templates/Feature%20Flag%20Roll%20Out.md) steps.
## Owners
- Team: `group::TEAM_NAME`
- Most appropriate slack channel to reach out to: `#g_TEAM_NAME`
- Best individual to reach out to: NAME
- Product manager (PM): NAME
### Stakeholders
<!--
Are there any other stages or teams involved that need to be kept in the loop?
- PM: Name
- Group: `group::TEAM_NAME`
- The Support Team
- The Delivery Team
-->
## Expectations
### What are we expecting to happen?
<!-- Describe the expected outcome when rolling out this experiment. -->
### What might happen if this goes wrong?
<!-- Any MRs that need to be rolled back? Communication that needs to happen? What are some things you can think of that could go wrong - data loss or broken pages? -->
### What can we monitor to detect problems with this?
<!-- Which dashboards from https://dashboards.gitlab.net are most relevant? -->
## Tracked data
<!-- brief description or link to issue or Sisense dashboard -->
Note: you can use the [CXL calculator](https://cxl.com/ab-test-calculator/) to determine if your experiment has reached significance. The calculator includes an estimate for how much longer an experiment must run for before reaching significance.
## Rollout plan
<!-- Add an overview and method for modifying the feature flag -->
- Runtime in days, or until we expect to reach statistical significance: `30`
- We will roll this out behind a feature flag and expose this to `<rollout-percentage>`% of actors to start then ramp it up from there.
`/chatops run feature set <feature-flag-name> <rollout-percentage> --actors`
### Status
#### Preferred workflow
The issue should be assigned to the Product manager (PM) or Engineer (Eng) as follows:
1. PM determines and manages the status of the experiment (assign this issue to the PM)
1. PM asks for initial rollout on production, or changes to the status (assign to an Eng)
1. Eng changes the status using `chatops` (reassign to the PM)
1. When concluded, PM updates the 'Roll Out Steps' and adds a milestone (assigns to an Eng)
The current status and history can be viewed using the:
- [API](https://gitlab.com/api/v4/experiments) (GitLab team members)
- [Feature flag log](https://gitlab.com/gitlab-com/gl-infra/feature-flag-log/-/issues?scope=all&utf8=%E2%9C%93&state=all) (GitLab team members)
- [Experiment rollout board](https://gitlab.com/groups/gitlab-org/-/boards/1352542)
In this rollout issue, ensure the scoped `experiment::` label is kept accurate.
### Experiment Results
<!-- update when experiment in/validated, set the scoped `~experiment::` status accordingly -->
## Roll Out Steps
- [ ] [Confirm that end-to-end tests pass with the feature flag enabled](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/feature_flags.html#confirming-that-end-to-end-tests-pass-with-a-feature-flag-enabled). If there are failing tests, contact the relevant [stable counterpart in the Quality department](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors) to collaborate in updating the tests or confirming that the failing tests are not caused by the changes behind the enabled feature flag.
- [ ] Enable on staging (`/chatops run feature set <feature-flag-name> true --staging`)
- [ ] Test on staging
- [ ] Ensure that documentation has been updated
- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab <feature-flag-name> true`)
- [ ] Coordinate a time to enable the flag with the SRE oncall and release managers
- In `#production` mention `@sre-oncall` and `@release-managers`. Once an SRE on call and Release Manager on call confirm, you can proceed with the rollout
- [ ] Announce on the issue an estimated time this will be enabled on GitLab.com
- [ ] Enable on GitLab.com by running chatops command in `#production` (`/chatops run feature set <feature-flag-name> true`)
- [ ] Cross post chatops Slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel
- [ ] Announce on the issue that the flag has been enabled
- [ ] Remove experiment code and feature flag and add changelog entry - a separate [cleanup issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Successful%20Cleanup) might be required
- [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
- [ ] Assign to the product manager to update the [knowledge base](https://about.gitlab.com/direction/growth/#growth-insights-knowledge-base) (if applicable)
## Rollback Steps
- [ ] This feature can be disabled by running the following Chatops command:
```
/chatops run feature set <feature-flag-name> false
```
## Experiment Successful Cleanup Concerns
_Items to be considered if candidate experience is to become a permanent part of GitLab_
<!--
Add a list of items raised during MR review or otherwise that may need further thought/consideration
before becoming permanent parts of the product.
Example: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70451#note_727246104
-->
/label ~"feature flag" ~"devops::growth" ~"growth experiment" ~"experiment-rollout" ~Engineering ~"workflow::scheduling" ~"experiment::pending"
/milestone %"Next 1-3 releases"

View file

@ -0,0 +1,25 @@
<!-- Title suggestion: [Experiment Name] Successful Cleanup -->
## Summary
The experiment is currently rolled out to 100% of users and has been deemed a success.
The changes need to become an official part of the product.
## Steps
- [ ] Determine whether the feature should apply to SaaS and/or self-managed
- [ ] Determine whether the feature should apply to EE - and which tiers - and/or Core
- [ ] Determine if tracking should be kept as is, removed, or modified.
- [ ] Determine if any UX experiences need to be "polished" i.e. updated to further improve the end user experience. This task should be completed by the designated UX counterpart.
- [ ] (placeholder for UX polish work that needs to be completed for this cleanup issue to be considered completed)
- [ ] Ensure any relevant documentation has been updated.
- [ ] Determine whether there are other concerns that need to be considered before removing the feature flag.
- These are typically captured in the `Experiment Successful Cleanup Concerns` section of the rollout issue.
- [ ] Consider changes to any `feature_category:` introduced by the experiment if ownership is changing (PM for Growth and PM for the new category as DRIs)
- [ ] Check to see if the experiment introduced new design assets. Add them to the appropriate repos and document them if needed.
- [ ] Optional: Migrate experiment to a default enabled [feature flag](https://docs.gitlab.com/ee/development/feature_flags) for one milestone and add a changelog. Converting to a feature flag can be skipped at the ICs discretion if risk is deemed low with consideration to both SaaS and (if applicable) self managed
- [ ] In the next milestone, [remove the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) if applicable
- [ ] After the flag removal is deployed, [clean up the feature/experiment feature flags](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
- [ ] Ensure the corresponding [Experiment Rollout](https://gitlab.com/groups/gitlab-org/-/boards/1352542?label_name[]=devops%3A%3Agrowth&label_name[]=growth%20experiment&label_name[]=experiment-rollout) issue is updated
/label ~"type::maintenance" ~"workflow::scheduling" ~"growth experiment" ~"feature flag"

View file

@ -0,0 +1,51 @@
<!-- Title suggestion: [Feature flag] Cleanup <feature-flag-name> -->
## Summary
This issue is to cleanup the `<feature-flag-name>` feature flag, after the feature flag has been enabled by default for an appropriate amount of time in production.
<!-- Short description of what the feature is about and link to relevant other issues. -->
## Owners
- Team: NAME_OF_TEAM
- Most appropriate slack channel to reach out to: `#g_TEAM_NAME`
- Best individual to reach out to: NAME
- PM: NAME
## Stakeholders
<!--
Are there any other stages or teams involved that need to be kept in the loop?
- Name of a PM
- The Support Team
- The Delivery Team
-->
## Expectations
### What might happen if this goes wrong?
<!-- Any MRs that need to be rolled back? Communication that needs to happen? What are some things you can think of that could go wrong - data loss or broken pages? -->
### Cleaning up the feature flag
<!-- The checklist here is to help stakeholders keep track of the feature flag status -->
- [ ] Create a merge request to remove `<feature-flag-name>` feature flag. Ask for review and merge it.
- [ ] Remove all references to the feature flag from the codebase.
- [ ] Remove the YAML definitions for the feature from the repository.
- [ ] Create [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog).
- [ ] Ensure that the cleanup MR has been deployed to both production and canary.
If the merge request was deployed before [the code cutoff](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1),
the feature can be officially announced in a release blog post.
- [ ] `/chatops run auto_deploy status <merge-commit-of-cleanup-mr>`
- [ ] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone.
- [ ] If not already done, clean up the feature flag from all environments by running these chatops command in `#production` channel:
- [ ] `/chatops run feature delete <feature-flag-name> --dev`
- [ ] `/chatops run feature delete <feature-flag-name> --staging`
- [ ] `/chatops run feature delete <feature-flag-name>`
- [ ] Close this rollout issue.
/label ~"feature flag" ~"type::maintenance" ~"maintenance::removal"

View file

@ -1,44 +1,200 @@
<!-- Title suggestion: [Feature flag] Enable description of feature --> <!-- Title suggestion: [Feature flag] Enable description of feature -->
## What <!--
Set the main issue link: The main issue is the one that describes the problem to solve,
the one this feature flag is being added for. For example:
Remove the `:feature_name` feature flag ... [main-issue]: https://gitlab.com/gitlab-org/gitlab/-/issues/123456
-->
[main-issue]: MAIN-ISSUE-LINK
## Summary
This issue is to rollout [the feature][main-issue] on production,
that is currently behind the `<feature-flag-name>` feature flag.
<!-- Short description of what the feature is about and link to relevant other issues. -->
## Owners ## Owners
- Team: NAME_OF_TEAM - Team: NAME_OF_TEAM
- Most appropriate slack channel to reach out to: `#g_TEAM_NAME` - Most appropriate slack channel to reach out to: `#g_TEAM_NAME`
- Best individual to reach out to: NAME - Best individual to reach out to: NAME
- PM: NAME
## Stakeholders
<!--
Are there any other stages or teams involved that need to be kept in the loop?
- Name of a PM
- The Support Team
- The Delivery Team
-->
## Expectations ## Expectations
### What are we expecting to happen? ### What are we expecting to happen?
<!-- Describe the expected outcome when rolling out this feature -->
### When is the feature viable?
<!-- What are the settings we need to configure in order to have this feature viable? -->
<!--
Example below:
1. Enable service ping collection
`ApplicationSetting.first.update(usage_ping_enabled: true)`
-->
### What might happen if this goes wrong? ### What might happen if this goes wrong?
<!-- Should the feature flag be turned off? Any MRs that need to be rolled back? Communication that needs to happen? What are some things you can think of that could go wrong - data loss or broken pages? -->
### What can we monitor to detect problems with this? ### What can we monitor to detect problems with this?
<!-- Which dashboards from https://dashboards.gitlab.net are most relevant? --> <!-- Which dashboards from https://dashboards.gitlab.net are most relevant? -->
_Consider mentioning checks for 5xx errors or other anomalies like an increase in redirects
(302 HTTP response status)_
## Beta groups/projects ### What can we check for monitoring production after rollouts?
If applicable, any groups/projects that are happy to have this feature turned on early. Some organizations may wish to test big changes they are interested in with a small subset of users ahead of time for example. _Consider adding links to check for Sentry errors, Production logs for 5xx, 302s, etc._
- `gitlab-org/gitlab-ce`/`gitlab-org/gitlab-ee` projects ## Rollout Steps
- `gitlab-org`/`gitlab-com` groups
- ...
## Roll Out Steps Note: Please make sure to run the chatops commands in the slack channel that gets impacted by the command.
- [ ] Enable on staging ### Rollout on non-production environments
- [ ] Test on staging
- [ ] Ensure that documentation has been updated
- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour
- [ ] Announce on the issue an estimated time this will be enabled on GitLab.com
- [ ] Enable on GitLab.com by running chatops command in `#production`
- [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel
- [ ] Announce on the issue that the flag has been enabled
- [ ] Remove feature flag and add changelog entry
- [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
- [ ] Verify the MR with the feature flag is merged to master.
- Verify that the feature MRs have been deployed to non-production environments with:
- [ ] `/chatops run auto_deploy status <merge-commit-of-your-feature>`
- [ ] Enable the feature globally on non-production environments.
- [ ] `/chatops run feature set <feature-flag-name> true --dev --staging --staging-ref`
- If the feature flag causes QA end-to-end tests to fail:
- [ ] Disable the feature flag on staging to avoid blocking [deployments](https://about.gitlab.com/handbook/engineering/deployments-and-releases/deployments/).
- [ ] Verify that the feature works as expected. Posting the QA result in this issue is preferable.
The best environment to validate the feature in is [staging-canary](https://about.gitlab.com/handbook/engineering/infrastructure/environments/#staging-canary)
as this is the first environment deployed to. Note you will need to make sure you are configured to use canary as outlined [here](https://about.gitlab.com/handbook/engineering/infrastructure/environments/canary-stage/)
when accessing the staging environment in order to make sure you are testing appropriately.
For assistance with QA end-to-end test failures, please reach out via the `#quality` Slack channel. Note that QA test failures on staging-ref [don't block deployments](https://about.gitlab.com/handbook/engineering/infrastructure/environments/staging-ref/#how-to-use-staging-ref).
### Specific rollout on production
For visibility, all `/chatops` commands that target production should be executed in the `#production` slack channel and cross-posted (with the command results) to the responsible team's slack channel (`#g_TEAM_NAME`).
- Ensure that the feature MRs have been deployed to both production and canary.
- [ ] `/chatops run auto_deploy status <merge-commit-of-your-feature>`
- Depending on the [type of actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors) you are using, pick one of these options:
- If you're using **project-actor**, you must enable the feature on these entries:
- [ ] `/chatops run feature set --project=gitlab-org/gitlab,gitlab-org/gitlab-foss,gitlab-com/www-gitlab-com <feature-flag-name> true`
- If you're using **group-actor**, you must enable the feature on these entries:
- [ ] `/chatops run feature set --group=gitlab-org,gitlab-com <feature-flag-name> true`
- If you're using **user-actor**, you must enable the feature on these entries:
- [ ] `/chatops run feature set --user=<your-username> <feature-flag-name> true`
- [ ] Verify that the feature works on the specific entries. Posting the QA result in this issue is preferable.
### Preparation before global rollout
- [ ] Set a milestone to the rollout issue to signal for enabling and removing the feature flag when it is stable.
- [ ] Check if the feature flag change needs to be accompanied with a
[change management issue](https://about.gitlab.com/handbook/engineering/infrastructure/change-management/#feature-flags-and-the-change-management-process).
Cross link the issue here if it does.
- [ ] Ensure that you or a representative in development can be available for at least 2 hours after feature flag updates in production.
If a different developer will be covering, or an exception is needed, please inform the oncall SRE by using the `@sre-oncall` Slack alias.
- [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)).
- [ ] Leave a comment on [the feature issue][main-issue] announcing estimated time when this feature flag will be enabled on GitLab.com.
- [ ] Ensure that any breaking changes have been announced following the [release post process](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations-removals-and-breaking-changes) to ensure GitLab customers are aware.
- [ ] Notify `#support_gitlab-com` and your team channel ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#communicate-the-change)).
- [ ] Ensure that the feature flag rollout plan is reviewed by another developer familiar with the domain.
### Global rollout on production
For visibility, all `/chatops` commands that target production should be executed in the `#production` slack channel and cross-posted (with the command results) to the responsible team's slack channel (`#g_TEAM_NAME`).
- [ ] [Incrementally roll out](https://docs.gitlab.com/ee/development/feature_flags/controls.html#process) the feature.
- [ ] Between every step wait for at least 15 minutes and monitor the appropriate graphs on https://dashboards.gitlab.net.
- If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform **actor-based** rollout.
- [ ] `/chatops run feature set <feature-flag-name> <rollout-percentage> --actors`
- If the feature flag in code does **NOT** have [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform time-based rollout (**random** rollout).
- [ ] `/chatops run feature set <feature-flag-name> <rollout-percentage> --random`
- Enable the feature globally on production environment.
- [ ] `/chatops run feature set <feature-flag-name> true`
- [ ] Observe appropriate graphs on https://dashboards.gitlab.net and verify that services are not affected.
- [ ] Leave a comment on [the feature issue][main-issue] announcing that the feature has been globally enabled.
- [ ] Wait for [at least one day for the verification term](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release).
### (Optional) Release the feature with the feature flag
If you're still unsure whether the feature is [deemed stable](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release)
but want to release it in the current milestone, you can change the default state of the feature flag to be enabled.
To do so, follow these steps:
- [ ] Create a merge request with the following changes. Ask for review and merge it.
- [ ] Set the `default_enabled` attribute in [the feature flag definition](https://docs.gitlab.com/ee/development/feature_flags/#feature-flag-definition-and-validation) to `true`.
- [ ] Review [what warrants a changelog entry](https://docs.gitlab.com/ee/development/changelog.html#what-warrants-a-changelog-entry) and decide if [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog) is needed.
- [ ] Ensure that the default-enabling MR has been included in the release package.
If the merge request was deployed before [the monthly release was tagged](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1),
the feature can be officially announced in a release blog post.
- [ ] `/chatops run release check <merge-request-url> <milestone>`
- [ ] Consider cleaning up the feature flag from all environments by running these chatops command in `#production` channel. Otherwise these settings may override the default enabled.
- [ ] `/chatops run feature delete <feature-flag-name> --dev --staging --staging-ref --production`
- [ ] Close [the feature issue][main-issue] to indicate the feature will be released in the current milestone.
- [ ] Set the next milestone to this rollout issue for scheduling [the flag removal](#release-the-feature).
- [ ] (Optional) You can [create a separate issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20Flag%20Cleanup) for scheduling the steps below to [Release the feature](#release-the-feature).
- [ ] Set the title to "[Feature flag] Cleanup `<feature-flag-name>`".
- [ ] Execute the `/copy_metadata <this-rollout-issue-link>` quick action to copy the labels from this rollout issue.
- [ ] Link this rollout issue as a related issue.
- [ ] Close this rollout issue.
**WARNING:** This approach has the downside that it makes it difficult for us to
[clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) the flag.
For example, on-premise users could disable the feature on their GitLab instance. But when you
remove the flag at some point, they suddenly see the feature as enabled and they can't roll it back
to the previous behavior. To avoid this potential breaking change, use this approach only for urgent
matters.
### Release the feature
After the feature has been [deemed stable](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release),
the [clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up)
should be done as soon as possible to permanently enable the feature and reduce complexity in the
codebase.
You can either [create a follow-up issue for Feature Flag Cleanup](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20Flag%20Cleanup) or use the checklist below in this same issue.
<!-- The checklist here is to help stakeholders keep track of the feature flag status -->
- [ ] Create a merge request to remove `<feature-flag-name>` feature flag. Ask for review and merge it.
- [ ] Remove all references to the feature flag from the codebase.
- [ ] Remove the YAML definitions for the feature from the repository.
- [ ] Create [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog).
- [ ] Ensure that the cleanup MR has been included in the release package.
If the merge request was deployed before [the monthly release was tagged](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1),
the feature can be officially announced in a release blog post.
- [ ] `/chatops run release check <merge-request-url> <milestone>`
- [ ] Close [the feature issue][main-issue] to indicate the feature will be released in the current milestone.
- [ ] Clean up the feature flag from all environments by running these chatops command in `#production` channel:
- [ ] `/chatops run feature delete <feature-flag-name> --dev --staging --staging-ref --production`
- [ ] Close this rollout issue.
## Rollback Steps
- [ ] This feature can be disabled by running the following Chatops command:
```
/chatops run feature set <feature-flag-name> false
```
<!-- A feature flag can also be used for rolling out a bug fix or a maintenance work.
In this scenario, labels must be related to it, for example; ~"type::feature", ~"type::bug" or ~"type::maintenance".
Please use /copy_metadata to copy the labels from the issue you're rolling out. -->
/label ~group::
/label ~"feature flag" /label ~"feature flag"
/assign me
/due in 1 month

View file

@ -0,0 +1,19 @@
<!-- This template is a great use for issues that are feature::additions or technical tasks for larger issues.-->
### Proposal
<!-- Use this section to explain the feature and how it will work. It can be helpful to add technical details, design proposals, and links to related epics or issues. -->
<!-- Consider adding related issues and epics to this issue. You can also reference the Feature Proposal Template (https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20proposal%20-%20detailed.md) for additional details to consider adding to this issue. Additionally, as a data oriented organization, when your feature exits planning breakdown, consider adding the `What does success look like, and how can we measure that?` section.
-->
<!-- Label reminders
Use the following resources to find the appropriate labels:
- Use only one tier label choosing the lowest tier this is intended for
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/
-->
/label ~group:: ~section:: ~Category:
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~"type::feature" ~"feature::addition" ~documentation

View file

@ -0,0 +1,58 @@
<!-- This issue template can be used as a great starting point for feature requests. The section "Release notes" can be used as a summary of the feature and is also required if you want to have your release post blog MR auto generated using the release post item generator: https://about.gitlab.com/handbook/marketing/blog/release-posts/#release-post-item-generator. The remaining sections are the backbone for every feature in GitLab.
The goal of this template is brevity for quick/smaller iterations. For a more thorough list of considerations for larger features or feature sets, you can leverage the detailed [feature proposal](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20proposal%20-%20detailed.md). -->
### Release notes
<!-- What is the problem and solution you're proposing? This content sets the overall vision for the feature and serves as the release notes that will populate in various places, including the [release post blog](https://about.gitlab.com/releases/categories/releases/) and [Gitlab project releases](https://gitlab.com/gitlab-org/gitlab/-/releases). " -->
### Problem to solve
<!-- What is the user problem you are trying to solve with this issue? -->
### Proposal
<!-- Use this section to explain the feature and how it will work. It can be helpful to add technical details, design proposals, and links to related epics or issues. -->
### Intended users
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
-->
### Feature Usage Metrics
<!-- How are you going to track usage of this feature? Think about user behavior and their interaction with the product. What indicates someone is getting value from it?
Create tracking issue using the Snowplow event tracking template. See https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Snowplow%20event%20tracking.md
-->
<!-- Label reminders
Use the following resources to find the appropriate labels:
- Use only one tier label choosing the lowest tier this is intended for
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/
-->
/label ~group:: ~section:: ~Category:
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~"type::feature" ~documentation ~direction

View file

@ -0,0 +1,134 @@
<!-- The first section "Release notes" is required if you want to have your release post blog MR auto generated. Currently in BETA, details on the **release post item generator** can be found in the handbook: https://about.gitlab.com/handbook/marketing/blog/release-posts/#release-post-item-generator and this video: https://www.youtube.com/watch?v=rfn9ebgTwKg. The next four sections: "Problem to solve", "Intended users", "User experience goal", and "Proposal", are strongly recommended in your first draft, while the rest of the sections can be filled out during the problem validation or breakdown phase. However, keep in mind that providing complete and relevant information early helps our product team validate the problem and start working on a solution. -->
### Release notes
<!-- What is the problem and solution you're proposing? This content sets the overall vision for the feature and serves as the release notes that will populate in various places, including the [release post blog](https://about.gitlab.com/releases/categories/releases/) and [Gitlab project releases](https://gitlab.com/gitlab-org/gitlab/-/releases). " -->
### Problem to solve
<!-- What problem do we solve? Try to define the who/what/why of the opportunity as a user story. For example, "As a (who), I want (what), so I can (why/value)." -->
### Intended users
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
-->
### User experience goal
<!-- What is the single user experience workflow this problem addresses?
For example, "The user should be able to use the UI/API/.gitlab-ci.yml with GitLab to <perform a specific task>"
https://about.gitlab.com/handbook/product/ux/ux-research-training/user-story-mapping/ -->
### Proposal
<!-- How are we going to solve the problem? Try to include the user journey! https://about.gitlab.com/handbook/journeys/#user-journey -->
### Further details
<!-- Include use cases, benefits, goals, or any other details that will help us understand the problem better. -->
### Permissions and Security
<!-- What permissions are required to perform the described actions? Are they consistent with the existing permissions as documented for users, groups, and projects as appropriate? Is the proposed behavior consistent between the UI, API, and other access methods (e.g. email replies)?
Consider adding checkboxes and expectations of users with certain levels of membership https://docs.gitlab.com/ee/user/permissions.html
* [ ] Add expected impact to members with no access (0)
* [ ] Add expected impact to Guest (10) members
* [ ] Add expected impact to Reporter (20) members
* [ ] Add expected impact to Developer (30) members
* [ ] Add expected impact to Maintainer (40) members
* [ ] Add expected impact to Owner (50) members
Please consider performing a threat model for the code changes that are introduced as part of this feature. To get started, refer to our Threat Modeling handbook page https://about.gitlab.com/handbook/security/threat_modeling/#threat-modeling.
Don't hesitate to reach out to the Application Security Team (`@gitlab-com/gl-security/appsec`) to discuss any security concerns.
-->
### Documentation
<!-- See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/workflow.html#for-a-product-change
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/workflow.html
* If this feature requires changing permissions, update the permissions document. See https://docs.gitlab.com/ee/user/permissions.html -->
### Availability & Testing
<!-- This section needs to be retained and filled in during the workflow planning breakdown phase of this feature proposal, if not earlier.
What risks does this change pose to our availability? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing?
Please list the test areas (unit, integration and end-to-end) that needs to be added or updated to ensure that this feature will work as intended. Please use the list below as guidance.
* Unit test changes
* Integration test changes
* End-to-end test change
See the Quality Engineering quad planning and test planning processes and reach out to your counterpart Software Engineer in Test for assistance.
Quad Planning: https://about.gitlab.com/handbook/engineering/quality/quality-engineering/quad-planning
Test Planning: https://about.gitlab.com/handbook/engineering/quality/quality-engineering/test-engineering/#test-planning -->
### Available Tier
<!-- This section should be used for setting the appropriate tier that this feature will belong to. Pricing can be found here: https://about.gitlab.com/pricing/
* Free
* Premium/Silver
* Ultimate/Gold
-->
### Feature Usage Metrics
<!-- How are you going to track usage of this feature? Think about user behavior and their interaction with the product. What indicates someone is getting value from it?
Create tracking issue using the Snowplow event tracking template. See https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Snowplow%20event%20tracking.md
-->
### What does success look like, and how can we measure that?
<!--
Define both the success metrics and acceptance criteria. Note that success metrics indicate the desired business outcomes, while acceptance criteria indicate when the solution is working correctly. If there is no way to measure success, link to an issue that will implement a way to measure this.
Create tracking issue using the Snowplow event tracking template. See https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Snowplow%20event%20tracking.md
-->
### What is the type of buyer?
<!-- What is the buyer persona for this feature? See https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/buyer-persona/
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#three-tiers -->
### Is this a cross-stage feature?
<!-- Communicate if this change will affect multiple Stage Groups or product areas. We recommend always start with the assumption that a feature request will have an impact into another Group. Loop in the most relevant PM and Product Designer from that Group to provide strategic support to help align the Group's broader plan and vision, as well as to avoid UX and technical debt. https://about.gitlab.com/handbook/product/#cross-stage-features -->
### What is the competitive advantage or differentiation for this feature?
### Links / references
<!-- Label reminders - you should have one of each of the following labels.
Use the following resources to find the appropriate labels:
- Use only one tier label choosing the lowest tier this is intended for
- https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/
-->
/label ~group:: ~section:: ~Category:
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~"type::feature" ~documentation ~direction

View file

@ -1,37 +0,0 @@
### Problem to solve
<!-- What problem do we solve? -->
### Intended users
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
Personas can be found at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ -->
### Further details
<!-- Include use cases, benefits, and/or goals (contributes to our vision?) -->
### Proposal
<!-- How are we going to solve the problem? Try to include the user journey! https://about.gitlab.com/handbook/journeys/#user-journey -->
### Permissions and Security
<!-- What permissions are required to perform the described actions? Are they consistent with the existing permissions as documented for users, groups, and projects as appropriate? Is the proposed behavior consistent between the UI, API, and other access methods (e.g. email replies)? -->
### Documentation
<!-- See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html
Add all known Documentation Requirements here, per https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements -->
### Testing
<!-- What risks does this change pose? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing? See the test engineering process for further help: https://about.gitlab.com/handbook/engineering/quality/test-engineering/ -->
### What does success look like, and how can we measure that?
<!-- Define both the success metrics and acceptance criteria. Note that success metrics indicate the desired business outcomes, while acceptance criteria indicate when the solution is working correctly. If there is no way to measure success, link to an issue that will implement a way to measure this. -->
### Links / references
/label ~feature

View file

@ -0,0 +1,59 @@
<!-- This issue template can be used as a starting point for a UX Issue. This is not a feature request, rather an issue that is being created for a product designer to solve a problem.
The goal of this template is to ensure we have captured all the information available to the product designer so they can approach the problem creatively and efficiently. Please add links to SSOT if this informatin exists elsewhere. -->
### Who will use this solution?
<!-- If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
* [Ingrid (Infrastructure Operator)](https://about.gitlab.com/handbook/product/personas/#ingrid-infrastructure-operator)
* [Dakota (Application Development Director)](https://about.gitlab.com/handbook/product/personas/#dakota-application-development-director)
* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
* [Eddie (Content Editor)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#eddie-content-editor)
-->
### What problem do they have?
### When do they have the problem?
### Where in the app do they have the problem and at what frequency (if known)?
### Why will a design help them?
### What is the JTBD and/or Tasks?
### Is this problem supported by user research (please link relevant research issue/s)?
### Known technical constraints
### How does this help the business?
/label ~"group::" ~"section::" ~"Category:" ~UX

View file

@ -0,0 +1,800 @@
<!--
This template is based on a model named `CoolWidget`.
To adapt this template, find and replace the following tokens:
- `CoolWidget`
- `Cool Widget`
- `cool_widget`
- `coolWidget`
If your Model's pluralized form is non-standard, i.e. it doesn't just end in `s`, then find and replace the following tokens *first*:
- `CoolWidgets`
- `Cool Widgets`
- `cool_widgets`
- `coolWidgets`
-->
## Replicate Cool Widgets - Repository
This issue is for implementing Geo replication and verification of Cool Widgets.
For more background, see [Geo self-service framework](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo/framework.md).
In order to implement and test this feature, you need to first [set up Geo locally](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/geo.md).
There are three main sections below. It is a good idea to structure your merge requests this way as well:
1. Modify database schemas to prepare to add Geo support for Cool Widgets
1. Implement Geo support of Cool Widgets behind a feature flag
1. Release Geo support of Cool Widgets
It is also a good idea to first open a proof-of-concept merge request. It can be helpful for working out kinks and getting initial support and feedback from the Geo team. As an example, see the [Proof of Concept to replicate Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56423).
You can look into the following example for implementing replication/verification for a new Git repository type:
- [Add snippet repository verification](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56596)
### Modify database schemas to prepare to add Geo support for Cool Widgets
#### Add the registry table to track replication and verification state
Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo.md#tracking-database) independent of the main database. It is used to track the replication and verification state of all replicables. Every Model has a corresponding "registry" table in the Geo tracking database.
- [ ] Create the migration file in `ee/db/geo/migrate`:
```shell
bin/rails generate migration CreateCoolWidgetRegistry --database geo
```
- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions.
```ruby
# frozen_string_literal: true
class CreateCoolWidgetRegistry < Gitlab::Database::Migration[2.1]
def change
create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t|
t.bigint :cool_widget_id, null: false
t.datetime_with_timezone :created_at, null: false
t.datetime_with_timezone :last_synced_at
t.datetime_with_timezone :retry_at
t.datetime_with_timezone :verified_at
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.integer :state, default: 0, null: false, limit: 2
t.integer :verification_state, default: 0, null: false, limit: 2
t.integer :retry_count, default: 0, limit: 2, null: false
t.integer :verification_retry_count, default: 0, limit: 2, null: false
t.boolean :checksum_mismatch, default: false, null: false
t.boolean :force_to_redownload, default: false, null: false
t.boolean :missing_on_primary, default: false, null: false
t.binary :verification_checksum
t.binary :verification_checksum_mismatched
t.text :verification_failure, limit: 255
t.text :last_sync_failure, limit: 255
t.index :cool_widget_id, name: :index_cool_widget_registry_on_cool_widget_id, unique: true
t.index :retry_at
t.index :state
# To optimize performance of CoolWidgetRegistry.verification_failed_batch
t.index :verification_retry_at,
name: :cool_widget_registry_failed_verification,
order: "NULLS FIRST",
where: "((state = 2) AND (verification_state = 3))"
# To optimize performance of CoolWidgetRegistry.needs_verification_count
t.index :verification_state,
name: :cool_widget_registry_needs_verification,
where: "((state = 2) AND (verification_state = ANY (ARRAY[0, 3])))"
# To optimize performance of CoolWidgetRegistry.verification_pending_batch
t.index :verified_at,
name: :cool_widget_registry_pending_verification,
order: "NULLS FIRST",
where: "((state = 2) AND (verification_state = 0))"
end
end
end
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
- [ ] Add the new table to the [database dictionary](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/database/database_dictionary.md) defined in [`ee/db/geo/docs/`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/ee/db/geo/docs):
```yaml
table_name: cool_widget_registry
description: Description example
introduced_by_url: Merge request link
milestone: Milestone example
feature_categories:
- Feature category example
classes:
- Class example
gitlab_schema: gitlab_geo
```
- [ ] Run Geo tracking database migrations:
```shell
bin/rake db:migrate:geo
```
- [ ] Be sure to commit the relevant changes in `ee/db/geo/structure.sql` and the file under `ee/db/geo/schema_migrations`
### Add verification state to the Model
The Geo primary site needs to checksum every replicable so secondaries can verify their own checksums. To do this, Geo requires the Model to have an associated table to track verification state.
- [ ] Create the migration file in `db/migrate`:
```shell
bin/rails generate migration CreateCoolWidgetStates
```
- [ ] Replace the contents of the migration file with:
```ruby
# frozen_string_literal: true
class CreateCoolWidgetStates < Gitlab::Database::Migration[2.1]
VERIFICATION_STATE_INDEX_NAME = "index_cool_widget_states_on_verification_state"
PENDING_VERIFICATION_INDEX_NAME = "index_cool_widget_states_pending_verification"
FAILED_VERIFICATION_INDEX_NAME = "index_cool_widget_states_failed_verification"
NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widget_states_needs_verification"
enable_lock_retries!
def up
create_table :cool_widget_states, id: false do |t|
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.datetime_with_timezone :verified_at
t.references :cool_widget, primary_key: true, default: nil, index: false, foreign_key: { on_delete: :cascade }
t.integer :verification_state, default: 0, limit: 2, null: false
t.integer :verification_retry_count, default: 0, limit: 2, null: false
t.binary :verification_checksum, using: 'verification_checksum::bytea'
t.text :verification_failure, limit: 255
t.index :verification_state, name: VERIFICATION_STATE_INDEX_NAME
t.index :verified_at,
where: "(verification_state = 0)",
order: { verified_at: 'ASC NULLS FIRST' },
name: PENDING_VERIFICATION_INDEX_NAME
t.index :verification_retry_at,
where: "(verification_state = 3)",
order: { verification_retry_at: 'ASC NULLS FIRST' },
name: FAILED_VERIFICATION_INDEX_NAME
t.index :verification_state,
where: "(verification_state = 0 OR verification_state = 3)",
name: NEEDS_VERIFICATION_INDEX_NAME
end
end
def down
drop_table :cool_widget_states
end
end
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
- [ ] If `cool_widgets` is a high-traffic table, follow [the database documentation to use `with_lock_retries`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/migration_style_guide.md#when-to-use-the-helper-method)
- [ ] Add the new table to the [database dictionary](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/database/database_dictionary.md) defined in [`db/docs/`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/db/docs):
```yaml
---
table_name: cool_widget_states
description: Separate table for cool widget verification states
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/XXXXX
milestone: 'XX.Y'
feature_categories:
- geo_replication
classes:
- Geo::CoolWidgetState
gitlab_schema: gitlab_main
```
- [ ] Run database migrations:
```shell
bin/rake db:migrate
```
- [ ] Be sure to commit the relevant changes in `db/structure.sql` and the file under `db/schema_migrations`
That's all of the required database changes.
### Implement Geo support of Cool Widgets behind a feature flag
#### Step 1. Implement replication and verification
- [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks:
- Include `::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`.
- Include the `::Geo::VerifiableModel` concern.
- Delegate verification related methods to the `cool_widget_state` model.
- For verification, override some scopes to use the `cool_widget_states` table instead of the model table.
- Implement the `verification_state_object` method to return the object that holds
the verification details
- Override some methods to use the `cool_widget_states` table in verification-related queries.
Pay some attention to method `pool_repository`. Not every repository type uses repository pooling. As Geo prefers to use repository snapshotting, it can lead to data loss. Make sure to overwrite `pool_repository` so it returns nil for repositories that do not have pools.
At this point the `CoolWidget` class should look like this:
```ruby
# frozen_string_literal: true
class CoolWidget < ApplicationRecord
...
include ::Geo::ReplicableModel
include ::Geo::VerifiableModel
delegate(*::Geo::VerificationState::VERIFICATION_METHODS, to: :cool_widget_state)
with_replicator Geo::CoolWidgetReplicator
has_one :cool_widget_state, autosave: false, inverse_of: :cool_widget, class_name: 'Geo::CoolWidgetState'
after_save :save_verification_details
# Override the `all` default if not all records can be replicated. For an
# example of an existing Model that needs to do this, see
# `EE::MergeRequestDiff`.
# scope :available_replicables, -> { all }
scope :available_verifiables, -> { joins(:cool_widget_state) }
scope :checksummed, -> {
joins(:cool_widget_state).where.not(cool_widget_states: { verification_checksum: nil })
}
scope :not_checksummed, -> {
joins(:cool_widget_state).where(cool_widget_states: { verification_checksum: nil })
}
scope :with_verification_state, ->(state) {
joins(:cool_widget_state)
.where(cool_widget_states: { verification_state: verification_state_value(state) })
}
def verification_state_object
cool_widget_state
end
...
class_methods do
extend ::Gitlab::Utils::Override
...
# @param primary_key_in [Range, CoolWidget] arg to pass to primary_key_in scope
# @return [ActiveRecord::Relation<CoolWidget>] everything that should be synced
# to this node, restricted by primary key
def replicables_for_current_secondary(primary_key_in)
# This issue template does not help you write this method.
#
# This method is called only on Geo secondary sites. It is called when
# we want to know which records to replicate. This is not easy to automate
# because for example:
#
# * The "selective sync" feature allows admins to choose which namespaces
# to replicate, per secondary site. Most Models are scoped to a
# namespace, but the nature of the relationship to a namespace varies
# between Models.
# * The "selective sync" feature allows admins to choose which shards to
# replicate, per secondary site. Repositories are associated with
# shards. Most blob types are not, but Project Uploads are.
# * Remote stored replicables are not replicated, by default. But the
# setting `sync_object_storage` enables replication of remote stored
# replicables.
#
# Search the codebase for examples, and consult a Geo expert if needed.
end
override :verification_state_table_class
def verification_state_table_class
CoolWidgetState
end
end
# Geo checks this method in FrameworkRepositorySyncService to avoid
# snapshotting repositories using object pools
def pool_repository
nil
end
def cool_widget_state
super || build_cool_widget_state
end
...
end
```
- [ ] Implement `CoolWidget.replicables_for_current_secondary` above.
- [ ] Ensure `CoolWidget.replicables_for_current_secondary` is well-tested. Search the codebase for `replicables_for_current_secondary` to find examples of parameterized table specs. You may need to add more `FactoryBot` traits.
- [ ] Add the following shared examples to `ee/spec/models/ee/cool_widget_spec.rb`:
```ruby
include_examples 'a replicable model with a separate table for verification state' do
let(:verifiable_model_record) { build(:cool_widget) } # add extra params if needed to make sure the record is in `Geo::ReplicableModel.verifiables` scope
let(:unverifiable_model_record) { build(:cool_widget) } # add extra params if needed to make sure the record is NOT included in `Geo::ReplicableModel.verifiables` scope
end
```
- [ ] Create `ee/app/replicators/geo/cool_widget_replicator.rb`. Implement the `#repository` method which should return a `<Repository>` instance, and implement the class method `.model` to return the `CoolWidget` class:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetReplicator < Gitlab::Geo::Replicator
include ::Geo::RepositoryReplicatorStrategy
extend ::Gitlab::Utils::Override
def self.model
::CoolWidget
end
def self.git_access_class
::Gitlab::GitAccessCoolWidget
end
def self.no_repo_message
git_access_class.error_message(:no_repo)
end
override :verification_feature_flag_enabled?
def self.verification_feature_flag_enabled?
# We are adding verification at the same time as replication, so we
# don't need to toggle verification separately from replication. When
# the replication feature flag is off, then verification is also off
# (see `VerifiableReplicator.verification_enabled?`)
true
end
override :housekeeping_enabled?
def self.housekeeping_enabled?
# Remove this method if the new Git repository type supports git
# repository housekeeping and the ::CoolWidget#git_garbage_collect_worker_klass
# is implemented. If the data type requires any action to be performed
# before running the housekeeping override the `before_housekeeping` method
# (see `RepositoryReplicatorStrategy#before_housekeeping`)
false
end
def repository
model_record.repository
end
end
end
```
- [ ] Make sure Geo push events are created. Usually it needs some change in the `app/workers/post_receive.rb` file. Example:
```ruby
def replicate_cool_widget_changes(cool_widget)
if ::Gitlab::Geo.primary?
cool_widget.replicator.handle_after_update if cool_widget
end
end
```
See `app/workers/post_receive.rb` for more examples.
- [ ] Make sure the repository removal is also handled. You may need to add something like the following in the destroy service of the repository:
```ruby
cool_widget.replicator.handle_after_destroy if cool_widget.repository
```
- [ ] Make sure a Geo secondary site can request and download Cool Widgets on the Geo primary site. You may need to make some changes to `Gitlab::GitAccessCoolWidget`. For example, see [this change for Group-level Wikis](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54914/diffs?commit_id=0f2b36f66697b4addbc69bd377ee2818f648dd33).
- [ ] Make sure a Geo secondary site can replicate Cool Widgets where repository does not exist on the Geo primary site. The only way to know about this is to parse the error text. You may need to make some changes to `Gitlab::CoolWidgetReplicator.no_repo_message` to return the proper error message. For example, see [this change for Group-level Wikis](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74133).
- [ ] Generate the feature flag definition files by running the feature flag commands and following the command prompts:
```shell
bin/feature-flag --ee geo_cool_widget_replication --type development --group 'group::geo'
```
- [ ] Add this replicator class to the method `replicator_classes` in
`ee/lib/gitlab/geo.rb`:
```ruby
REPLICATOR_CLASSES = [
::Geo::PackageFileReplicator,
::Geo::CoolWidgetReplicator
]
```
- [ ] Create `ee/spec/replicators/geo/cool_widget_replicator_spec.rb` and perform the necessary setup to define the `model_record` variable for the shared examples:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetReplicator, feature_category: :geo_replication do
let(:model_record) { build(:cool_widget) }
include_examples 'a repository replicator'
include_examples 'a verifiable replicator'
end
```
- [ ] Create `ee/app/models/geo/cool_widget_registry.rb`:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetRegistry < Geo::BaseRegistry
include ::Geo::ReplicableRegistry
include ::Geo::VerifiableRegistry
MODEL_CLASS = ::CoolWidget
MODEL_FOREIGN_KEY = :cool_widget_id
belongs_to :cool_widget, class_name: 'CoolWidget'
end
end
```
- [ ] Update `REGISTRY_CLASSES` in `ee/app/workers/geo/secondary/registry_consistency_worker.rb`.
- [ ] Add a custom factory name if needed in `def model_class_factory_name` in `ee/spec/support/helpers/ee/geo_helpers.rb`.
- [ ] Update `it 'creates missing registries for each registry class'` in `ee/spec/workers/geo/secondary/registry_consistency_worker_spec.rb`.
- [ ] Add `cool_widget_registry` to `ActiveSupport::Inflector.inflections` in `config/initializers_before_autoloader/000_inflections.rb`.
- [ ] Create `ee/spec/factories/geo/cool_widget_registry.rb`:
```ruby
# frozen_string_literal: true
FactoryBot.define do
factory :geo_cool_widget_registry, class: 'Geo::CoolWidgetRegistry' do
cool_widget # This association should have data, like a file or repository
state { Geo::CoolWidgetRegistry.state_value(:pending) }
trait :synced do
state { Geo::CoolWidgetRegistry.state_value(:synced) }
last_synced_at { 5.days.ago }
end
trait :failed do
state { Geo::CoolWidgetRegistry.state_value(:failed) }
last_synced_at { 1.day.ago }
retry_count { 2 }
retry_at { 2.hours.from_now }
last_sync_failure { 'Random error' }
end
trait :started do
state { Geo::CoolWidgetRegistry.state_value(:started) }
last_synced_at { 1.day.ago }
retry_count { 0 }
end
trait :verification_succeeded do
verification_checksum { 'e079a831cab27bcda7d81cd9b48296d0c3dd92ef' }
verification_state { Geo::CoolWidgetRegistry.verification_state_value(:verification_succeeded) }
verified_at { 5.days.ago }
end
end
end
```
- [ ] Create `ee/spec/models/geo/cool_widget_registry_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetRegistry, :geo, type: :model, feature_category: :geo_replication do
let_it_be(:registry) { create(:geo_cool_widget_registry) }
specify 'factory is valid' do
expect(registry).to be_valid
end
include_examples 'a Geo framework registry'
include_examples 'a Geo verifiable registry'
end
```
- [ ] Add the following to `ee/spec/factories/cool_widgets.rb`:
```ruby
# frozen_string_literal: true
FactoryBot.modify do
factory :cool_widget do
trait :verification_succeeded do
with_file
verification_checksum { 'abc' }
verification_state { CoolWidget.verification_state_value(:verification_succeeded) }
end
trait :verification_failed do
with_file
verification_failure { 'Could not calculate the checksum' }
verification_state { CoolWidget.verification_state_value(:verification_failed) }
end
end
end
```
If there is not an existing factory for the object in `spec/factories/cool_widgets.rb`, wrap the traits in `FactoryBot.create` instead of `FactoryBot.modify`.
- [ ] Make sure the factory also allows setting a `project` attribute. If the model does not have a direct relation to a project, you can use a `transient` attribute. Check out `spec/factories/merge_request_diffs.rb` for an example.
- [ ] Following [the example of Merge Request Diffs](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63309) add a `Geo::CoolWidgetState` model in `ee/app/models/geo/cool_widget_state.rb`:
``` ruby
# frozen_string_literal: true
module Geo
class CoolWidgetState < ApplicationRecord
include ::Geo::VerificationStateDefinition
self.primary_key = :cool_widget_id
belongs_to :cool_widget, inverse_of: :cool_widget_state
validates :verification_failure, length: { maximum: 255 }
validates :verification_state, :cool_widget, presence: true
end
end
```
- [ ] Add a `factory` for `cool_widget_state`, in `ee/spec/factories/geo/cool_widget_states.rb`:
``` ruby
# frozen_string_literal: true
FactoryBot.define do
factory :geo_cool_widget_state, class: 'Geo::CoolWidgetState' do
cool_widget
trait :checksummed do
verification_checksum { 'abc' }
end
trait :checksum_failure do
verification_failure { 'Could not calculate the checksum' }
end
end
end
```
- [ ] Add `[:geo_cool_widget_state, any]` to `skipped` in `spec/models/factories_spec.rb`
#### Step 2. Implement metrics gathering
Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus` for display in the UI, and sent to Prometheus:
- [ ] Add the following fields to Geo Node Status example responses in `doc/api/geo_nodes.md`:
- `cool_widgets_count`
- `cool_widgets_checksum_total_count`
- `cool_widgets_checksummed_count`
- `cool_widgets_checksum_failed_count`
- `cool_widgets_synced_count`
- `cool_widgets_failed_count`
- `cool_widgets_registry_count`
- `cool_widgets_verification_total_count`
- `cool_widgets_verified_count`
- `cool_widgets_verification_failed_count`
- `cool_widgets_synced_in_percentage`
- `cool_widgets_verified_in_percentage`
- [ ] Add the same fields to `GET /geo_nodes/status` example response in
`ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`.
- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`:
```markdown
| `geo_cool_widgets` | Gauge | XX.Y | Number of Cool Widgets on primary | `url` |
| `geo_cool_widgets_checksum_total` | Gauge | XX.Y | Number of Cool Widgets to checksum on primary | `url` |
| `geo_cool_widgets_checksummed` | Gauge | XX.Y | Number of Cool Widgets that successfully calculated the checksum on primary | `url` |
| `geo_cool_widgets_checksum_failed` | Gauge | XX.Y | Number of Cool Widgets that failed to calculate the checksum on primary | `url` |
| `geo_cool_widgets_synced` | Gauge | XX.Y | Number of syncable Cool Widgets synced on secondary | `url` |
| `geo_cool_widgets_failed` | Gauge | XX.Y | Number of syncable Cool Widgets failed to sync on secondary | `url` |
| `geo_cool_widgets_registry` | Gauge | XX.Y | Number of Cool Widgets in the registry | `url` |
| `geo_cool_widgets_verification_total` | Gauge | XX.Y | Number of Cool Widgets to attempt to verify on secondary | `url` |
| `geo_cool_widgets_verified` | Gauge | XX.Y | Number of Cool Widgets successfully verified on secondary | `url` |
| `geo_cool_widgets_verification_failed` | Gauge | XX.Y | Number of Cool Widgets that failed verification on secondary | `url` |
```
- [ ] Run the rake task `geo:dev:ssf_metrics` and commit the changes to `ee/config/metrics/object_schemas/geo_node_usage.json`
Cool Widget replication and verification metrics should now be available in the API, the `Admin > Geo > Sites` view, and Prometheus.
#### Step 3. Implement the GraphQL API
The GraphQL API is used by `Admin > Geo > Replication Details` views, and is directly queryable by administrators.
- [ ] Add a new field to `GeoNodeType` in `ee/app/graphql/types/geo/geo_node_type.rb`:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
description: 'Find Cool Widget registries on this Geo node. '\
'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`.
- [ ] Create `ee/app/graphql/resolvers/geo/cool_widget_registries_resolver.rb`:
```ruby
# frozen_string_literal: true
module Resolvers
module Geo
class CoolWidgetRegistriesResolver < BaseResolver
type ::Types::Geo::GeoNodeType.connection_type, null: true
include RegistriesResolver
end
end
end
```
- [ ] Create `ee/spec/graphql/resolvers/geo/cool_widget_registries_resolver_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Resolvers::Geo::CoolWidgetRegistriesResolver, feature_category: :geo_replication do
it_behaves_like 'a Geo registries resolver', :geo_cool_widget_registry
end
```
- [ ] Create `ee/app/finders/geo/cool_widget_registry_finder.rb`:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetRegistryFinder
include FrameworkRegistryFinder
end
end
```
- [ ] Create `ee/spec/finders/geo/cool_widget_registry_finder_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetRegistryFinder, feature_category: :geo_replication do
it_behaves_like 'a framework registry finder', :geo_cool_widget_registry
end
```
- [ ] Create `ee/app/graphql/types/geo/cool_widget_registry_type.rb`:
```ruby
# frozen_string_literal: true
module Types
module Geo
# rubocop:disable Graphql/AuthorizeTypes because it is included
class CoolWidgetRegistryType < BaseObject
graphql_name 'CoolWidgetRegistry'
include ::Types::Geo::RegistryType
description 'Represents the Geo replication and verification state of a cool_widget'
field :cool_widget_id, GraphQL::Types::ID, null: false, description: 'ID of the Cool Widget.'
end
# rubocop:enable Graphql/AuthorizeTypes
end
end
```
- [ ] Create `ee/spec/graphql/types/geo/cool_widget_registry_type_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe GitlabSchema.types['CoolWidgetRegistry'], feature_category: :geo_replication do
it_behaves_like 'a Geo registry type'
it 'has the expected fields (other than those included in RegistryType)' do
expected_fields = %i[cool_widget_id]
expect(described_class).to have_graphql_fields(*expected_fields).at_least
end
end
```
- [ ] Add integration tests for providing CoolWidget registry data to the frontend via the GraphQL API, by duplicating and modifying the following shared examples in `ee/spec/requests/api/graphql/geo/registries_spec.rb`:
```ruby
it_behaves_like 'gets registries for', {
field_name: 'coolWidgetRegistries',
registry_class_name: 'CoolWidgetRegistry',
registry_factory: :geo_cool_widget_registry,
registry_foreign_key_field_name: 'coolWidgetId'
}
```
- [ ] Update the GraphQL reference documentation:
```shell
bundle exec rake gitlab:graphql:compile_docs
```
Individual Cool Widget replication and verification data should now be available via the GraphQL API.
#### Step 4. Handle batch destroy
If batch destroy logic is implemented for a replicable, then that logic must be "replicated" by Geo secondaries. The easiest way to do this is use `Geo::BatchEventCreateWorker` to bulk insert a delete event for each replicable.
For example, if `FastDestroyAll` is used, then you may be able to [use `begin_fast_destroy` and `finalize_fast_destroy` hooks, like we did for uploads](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/69763).
Or if a special service is used to batch delete records and their associated data, then you probably need to [hook into that service, like we did for job artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/79530).
As illustrated by the above two examples, batch destroy logic cannot be handled automatically by Geo secondaries without restricting the way other teams perform batch destroys. It is up to you to produce `Geo::BatchEventCreateWorker` attributes before the records are deleted, and then enqueue `Geo::BatchEventCreateWorker` after the records are deleted.
- [ ] Ensure that any batch destroy of this replicable is replicated to secondary sites
- [ ] Regardless of implementation details, please verify in specs that when the parent object is removed, the new `Geo::Event` records are created:
```ruby
describe '#destroy' do
subject { create(:cool_widget) }
context 'when running in a Geo primary node' do
let_it_be(:primary) { create(:geo_node, :primary) }
let_it_be(:secondary) { create(:geo_node) }
it 'logs an event to the Geo event log when bulk removal is used', :sidekiq_inline do
stub_current_geo_node(primary)
expect { subject.project.destroy! }.to change(Geo::Event.where(replicable_name: :cool_widget, event_name: :deleted), :count).by(1)
payload = Geo::Event.where(replicable_name: :cool_widget, event_name: :deleted).last.payload
expect(payload['model_record_id']).to eq(subject.id)
expect(payload['blob_path']).to eq(subject.relative_path)
expect(payload['uploader_class']).to eq('CoolWidgetUploader')
end
end
end
```
### Code Review
When requesting review from database reviewers:
- [ ] Include a comment mentioning that the change is based on a documented template.
- [ ] `replicables_for_current_secondary` and `available_replicables` may differ per Model. If their queries are new, then add [query plans](https://docs.gitlab.com/ee/development/database_review.html#query-plans) to the MR description. An easy place to gather SQL queries is your GDK's `log/test.log` when running tests of these methods.
### Release Geo support of Cool Widgets
- [ ] In the rollout issue you created when creating the feature flag, modify the Roll Out Steps:
- [ ] Cross out any steps related to testing on production GitLab.com, because Geo is not running on production GitLab.com at the moment.
- [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`.
- [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there.
- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true`
- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `alpha` option for the released type:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
description: 'Find Cool Widget registries on this Geo node. '\
'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs.
- [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types)
- [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version.

View file

@ -0,0 +1,768 @@
<!--
This template is based on a model named `CoolWidget`.
To adapt this template, find and replace the following tokens:
- `CoolWidget`
- `Cool Widget`
- `cool_widget`
- `coolWidget`
If your Model's pluralized form is non-standard, i.e. it doesn't just end in `s`, find and replace the following tokens *first*:
- `CoolWidgets`
- `Cool Widgets`
- `cool_widgets`
- `coolWidgets`
-->
## Replicate Cool Widgets - Blob
This issue is for implementing Geo replication and verification of Cool Widgets.
For more background, see [Geo self-service framework](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo/framework.md).
In order to implement and test this feature, you need to first [set up Geo locally](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/geo.md).
There are three main sections below. It is a good idea to structure your merge requests this way as well:
1. Modify database schemas to prepare to add Geo support for Cool Widgets
1. Implement Geo support of Cool Widgets behind a feature flag
1. Release Geo support of Cool Widgets
It is also a good idea to first open a proof-of-concept merge request. It can be helpful for working out kinks and getting initial support and feedback from the Geo team. As an example, see the [Proof of Concept to replicate Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56423).
You can look into the following examples of MRs for implementing replication/verification for a new blob type:
- [Add db changes](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60935) and [add verification for MR diffs using SSF](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63309)
- [Verify Terraform state versions](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58800)
- [Verify LFS objects](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63981)
### Modify database schemas to prepare to add Geo support for Cool Widgets
#### Add the registry table to track replication and verification state
Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo.md#tracking-database) independent of the main database. It is used to track the replication and verification state of all replicables. Every Model has a corresponding "registry" table in the Geo tracking database.
- [ ] Create the migration file in `ee/db/geo/migrate`:
```shell
bin/rails generate migration CreateCoolWidgetRegistry --database geo
```
- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions.
```ruby
# frozen_string_literal: true
class CreateCoolWidgetRegistry < Gitlab::Database::Migration[2.1]
def change
create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t|
t.bigint :cool_widget_id, null: false
t.datetime_with_timezone :created_at, null: false
t.datetime_with_timezone :last_synced_at
t.datetime_with_timezone :retry_at
t.datetime_with_timezone :verified_at
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.integer :state, default: 0, null: false, limit: 2
t.integer :verification_state, default: 0, null: false, limit: 2
t.integer :retry_count, default: 0, limit: 2, null: false
t.integer :verification_retry_count, default: 0, limit: 2, null: false
t.boolean :checksum_mismatch, default: false, null: false
t.binary :verification_checksum
t.binary :verification_checksum_mismatched
t.text :verification_failure, limit: 255
t.text :last_sync_failure, limit: 255
t.index :cool_widget_id, name: :index_cool_widget_registry_on_cool_widget_id, unique: true
t.index :retry_at
t.index :state
# To optimize performance of CoolWidgetRegistry.verification_failed_batch
t.index :verification_retry_at,
name: :cool_widget_registry_failed_verification,
order: "NULLS FIRST",
where: "((state = 2) AND (verification_state = 3))"
# To optimize performance of CoolWidgetRegistry.needs_verification_count
t.index :verification_state,
name: :cool_widget_registry_needs_verification,
where: "((state = 2) AND (verification_state = ANY (ARRAY[0, 3])))"
# To optimize performance of CoolWidgetRegistry.verification_pending_batch
t.index :verified_at,
name: :cool_widget_registry_pending_verification,
order: "NULLS FIRST",
where: "((state = 2) AND (verification_state = 0))"
end
end
end
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
- [ ] Add the new table to the [database dictionary](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/database/database_dictionary.md) defined in [`ee/db/geo/docs/`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/ee/db/geo/docs):
```yaml
table_name: cool_widget_registry
description: Description example
introduced_by_url: Merge request link
milestone: Milestone example
feature_categories:
- Feature category example
classes:
- Class example
gitlab_schema: gitlab_geo
```
- [ ] Run Geo tracking database migrations:
```shell
bin/rake db:migrate:geo
```
- [ ] Be sure to commit the relevant changes in `ee/db/geo/structure.sql` and the file created under `ee/db/geo/schema_migrations`
### Add verification state fields on the Geo primary site
The Geo primary site needs to checksum every replicable so secondaries can verify their own checksums. To do this, Geo requires fields on the Model. Add verification state fields to a separate table. Consult a database expert if needed.
#### Add verification state fields to a new table
- [ ] Create the migration file in `db/migrate`:
```shell
bin/rails generate migration CreateCoolWidgetStates
```
- [ ] Replace the contents of the migration file with:
```ruby
# frozen_string_literal: true
class CreateCoolWidgetStates < Gitlab::Database::Migration[2.1]
VERIFICATION_STATE_INDEX_NAME = "index_cool_widget_states_on_verification_state"
PENDING_VERIFICATION_INDEX_NAME = "index_cool_widget_states_pending_verification"
FAILED_VERIFICATION_INDEX_NAME = "index_cool_widget_states_failed_verification"
NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widget_states_needs_verification"
enable_lock_retries!
def up
create_table :cool_widget_states, id: false do |t|
t.datetime_with_timezone :verification_started_at
t.datetime_with_timezone :verification_retry_at
t.datetime_with_timezone :verified_at
t.references :cool_widget,
primary_key: true,
default: nil,
index: false,
foreign_key: { on_delete: :cascade }
t.integer :verification_state, default: 0, limit: 2, null: false
t.integer :verification_retry_count, default: 0, limit: 2, null: false
t.binary :verification_checksum, using: 'verification_checksum::bytea'
t.text :verification_failure, limit: 255
t.index :verification_state, name: VERIFICATION_STATE_INDEX_NAME
t.index :verified_at,
where: "(verification_state = 0)",
order: { verified_at: 'ASC NULLS FIRST' },
name: PENDING_VERIFICATION_INDEX_NAME
t.index :verification_retry_at,
where: "(verification_state = 3)",
order: { verification_retry_at: 'ASC NULLS FIRST' },
name: FAILED_VERIFICATION_INDEX_NAME
t.index :verification_state,
where: "(verification_state = 0 OR verification_state = 3)",
name: NEEDS_VERIFICATION_INDEX_NAME
end
end
def down
drop_table :cool_widget_states
end
end
```
- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md).
- [ ] If `cool_widgets` is a high-traffic table, follow [the database documentation to use `with_lock_retries`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/migration_style_guide.md#when-to-use-the-helper-method)
- [ ] Add the new table to the [database dictionary](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/database/database_dictionary.md) defined in [`db/docs/`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/db/docs):
```yaml
---
table_name: cool_widget_states
description: Separate table for cool widget verification states
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/XXXXX
milestone: 'XX.Y'
feature_categories:
- geo_replication
classes:
- Geo::CoolWidgetState
gitlab_schema: gitlab_main
```
- [ ] Run database migrations:
```shell
bin/rake db:migrate
```
- [ ] Be sure to commit the relevant changes in `db/structure.sql` and the file under `db/schema_migrations`
That's all of the required database changes.
### Implement Geo support of Cool Widgets behind a feature flag
#### Step 1. Implement replication and verification
- [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks:
- Include `::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`.
- Include the `::Geo::VerifiableModel` concern.
- Delegate verification related methods to the `cool_widget_state` model.
- For verification, override some scopes to use the `cool_widget_states` table instead of the model table.
- Implement the `verification_state_object` method to return the object that holds
the verification details
- Override some methods to use the `cool_widget_states` table in verification-related queries.
At this point the `CoolWidget` class should look like this:
```ruby
# frozen_string_literal: true
class CoolWidget < ApplicationRecord
...
include ::Geo::ReplicableModel
include ::Geo::VerifiableModel
delegate(*::Geo::VerificationState::VERIFICATION_METHODS, to: :cool_widget_state)
with_replicator Geo::CoolWidgetReplicator
mount_uploader :file, CoolWidgetUploader
has_one :cool_widget_state, autosave: false, inverse_of: :cool_widget, class_name: 'Geo::CoolWidgetState'
after_save :save_verification_details
# Override the `all` default if not all records can be replicated. For an
# example of an existing Model that needs to do this, see
# `EE::MergeRequestDiff`.
# scope :available_replicables, -> { all }
scope :available_verifiables, -> { joins(:cool_widget_state) }
scope :checksummed, -> {
joins(:cool_widget_state).where.not(cool_widget_states: { verification_checksum: nil })
}
scope :not_checksummed, -> {
joins(:cool_widget_state).where(cool_widget_states: { verification_checksum: nil })
}
scope :with_verification_state, ->(state) {
joins(:cool_widget_state)
.where(cool_widget_states: { verification_state: verification_state_value(state) })
}
def verification_state_object
cool_widget_state
end
...
class_methods do
extend ::Gitlab::Utils::Override
...
# @param primary_key_in [Range, CoolWidget] arg to pass to primary_key_in scope
# @return [ActiveRecord::Relation<CoolWidget>] everything that should be synced
# to this node, restricted by primary key
def replicables_for_current_secondary(primary_key_in)
# This issue template does not help you write this method.
#
# This method is called only on Geo secondary sites. It is called when
# we want to know which records to replicate. This is not easy to automate
# because for example:
#
# * The "selective sync" feature allows admins to choose which namespaces
# to replicate, per secondary site. Most Models are scoped to a
# namespace, but the nature of the relationship to a namespace varies
# between Models.
# * The "selective sync" feature allows admins to choose which shards to
# replicate, per secondary site. Repositories are associated with
# shards. Most blob types are not, but Project Uploads are.
# * Remote stored replicables are not replicated, by default. But the
# setting `sync_object_storage` enables replication of remote stored
# replicables.
#
# Search the codebase for examples, and consult a Geo expert if needed.
end
override :verification_state_table_class
def verification_state_table_class
CoolWidgetState
end
end
def cool_widget_state
super || build_cool_widget_state
end
...
end
```
- [ ] Implement `CoolWidget.replicables_for_current_secondary` above.
- [ ] Ensure `CoolWidget.replicables_for_current_secondary` is well-tested. Search the codebase for `replicables_for_current_secondary` to find examples of parameterized table specs. You may need to add more `FactoryBot` traits.
- [ ] Add the following shared examples to `ee/spec/models/ee/cool_widget_spec.rb`:
```ruby
include_examples 'a replicable model with a separate table for verification state' do
let(:verifiable_model_record) { build(:cool_widget) } # add extra params if needed to make sure the record is in `Geo::ReplicableModel.verifiables` scope
let(:unverifiable_model_record) { build(:cool_widget) } # add extra params if needed to make sure the record is NOT included in `Geo::ReplicableModel.verifiables` scope
end
```
- [ ] Create `ee/app/replicators/geo/cool_widget_replicator.rb`. Implement the `#carrierwave_uploader` method which should return a `CarrierWave::Uploader`, and implement the class method `.model` to return the `CoolWidget` class:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetReplicator < Gitlab::Geo::Replicator
include ::Geo::BlobReplicatorStrategy
extend ::Gitlab::Utils::Override
def self.model
::CoolWidget
end
def carrierwave_uploader
model_record.file
end
override :verification_feature_flag_enabled?
def self.verification_feature_flag_enabled?
# We are adding verification at the same time as replication, so we
# don't need to toggle verification separately from replication. When
# the replication feature flag is off, then verification is also off
# (see `VerifiableReplicator.verification_enabled?`)
true
end
end
end
```
- [ ] Generate the feature flag definition file by running the feature flag commands and following the command prompts:
```shell
bin/feature-flag --ee geo_cool_widget_replication --type development --group 'group::geo'
```
- [ ] Add this replicator class to the method `replicator_classes` in
`ee/lib/gitlab/geo.rb`:
```ruby
REPLICATOR_CLASSES = [
::Geo::PackageFileReplicator,
::Geo::CoolWidgetReplicator
]
```
- [ ] Create `ee/spec/replicators/geo/cool_widget_replicator_spec.rb` and perform the necessary setup to define the `model_record` variable for the shared examples:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetReplicator, feature_category: :geo_replication do
let(:model_record) { build(:cool_widget) }
include_examples 'a blob replicator'
include_examples 'a verifiable replicator'
end
```
- [ ] Create `ee/app/models/geo/cool_widget_registry.rb`:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetRegistry < Geo::BaseRegistry
include ::Geo::ReplicableRegistry
include ::Geo::VerifiableRegistry
MODEL_CLASS = ::CoolWidget
MODEL_FOREIGN_KEY = :cool_widget_id
belongs_to :cool_widget, class_name: 'CoolWidget'
end
end
```
- [ ] Update `REGISTRY_CLASSES` in `ee/app/workers/geo/secondary/registry_consistency_worker.rb`.
- [ ] Add a custom factory name if needed in `def model_class_factory_name` in `ee/spec/support/helpers/ee/geo_helpers.rb`.
- [ ] Update `it 'creates missing registries for each registry class'` in `ee/spec/workers/geo/secondary/registry_consistency_worker_spec.rb`.
- [ ] Add `cool_widget_registry` to `ActiveSupport::Inflector.inflections` in `config/initializers_before_autoloader/000_inflections.rb`.
- [ ] Create `ee/spec/factories/geo/cool_widget_registry.rb`:
```ruby
# frozen_string_literal: true
FactoryBot.define do
factory :geo_cool_widget_registry, class: 'Geo::CoolWidgetRegistry' do
cool_widget # This association should have data, like a file or repository
state { Geo::CoolWidgetRegistry.state_value(:pending) }
trait :synced do
state { Geo::CoolWidgetRegistry.state_value(:synced) }
last_synced_at { 5.days.ago }
end
trait :failed do
state { Geo::CoolWidgetRegistry.state_value(:failed) }
last_synced_at { 1.day.ago }
retry_count { 2 }
retry_at { 2.hours.from_now }
last_sync_failure { 'Random error' }
end
trait :started do
state { Geo::CoolWidgetRegistry.state_value(:started) }
last_synced_at { 1.day.ago }
retry_count { 0 }
end
trait :verification_succeeded do
verification_checksum { 'e079a831cab27bcda7d81cd9b48296d0c3dd92ef' }
verification_state { Geo::CoolWidgetRegistry.verification_state_value(:verification_succeeded) }
verified_at { 5.days.ago }
end
end
end
```
- [ ] Create `ee/spec/models/geo/cool_widget_registry_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetRegistry, :geo, type: :model, feature_category: :geo_replication do
let_it_be(:registry) { create(:geo_cool_widget_registry) }
specify 'factory is valid' do
expect(registry).to be_valid
end
include_examples 'a Geo framework registry'
include_examples 'a Geo verifiable registry'
end
```
- [ ] Add the following to `spec/factories/cool_widgets.rb`:
```ruby
# frozen_string_literal: true
FactoryBot.modify do
factory :cool_widget do
trait :verification_succeeded do
with_file
verification_checksum { 'abc' }
verification_state { CoolWidget.verification_state_value(:verification_succeeded) }
end
trait :verification_failed do
with_file
verification_failure { 'Could not calculate the checksum' }
verification_state { CoolWidget.verification_state_value(:verification_failed) }
end
end
end
```
If there is not an existing factory for the object in `spec/factories/cool_widgets.rb`, wrap the traits in `FactoryBot.create` instead of `FactoryBot.modify`
[ ] Make sure the factory supports the `:remote_store` trait. If not, add something like
```ruby
trait :remote_store do
file_store { CoolWidget::FileUploader::Store::REMOTE }
end
```
- [ ] Make sure the factory also allows setting a `project` attribute. If the model does not have a direct relation to a project, you can use a `transient` attribute. Check out `spec/factories/merge_request_diffs.rb` for an example.
- [ ] Following [the example of Merge Request Diffs](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63309) add a `Geo::CoolWidgetState` model in `ee/app/models/geo/cool_widget_state.rb`:
``` ruby
# frozen_string_literal: true
module Geo
class CoolWidgetState < ApplicationRecord
include ::Geo::VerificationStateDefinition
self.primary_key = :cool_widget_id
belongs_to :cool_widget, inverse_of: :cool_widget_state
validates :verification_failure, length: { maximum: 255 }
validates :verification_state, :cool_widget, presence: true
end
end
```
- [ ] Add a `factory` for `cool_widget_state`, in `ee/spec/factories/geo/cool_widget_states.rb`:
``` ruby
# frozen_string_literal: true
FactoryBot.define do
factory :geo_cool_widget_state, class: 'Geo::CoolWidgetState' do
cool_widget
trait :checksummed do
verification_checksum { 'abc' }
end
trait :checksum_failure do
verification_failure { 'Could not calculate the checksum' }
end
end
end
```
- [ ] Add `[:cool_widget, :remote_store]` and `[:geo_cool_widget_state, any]` to `skipped` in `spec/models/factories_spec.rb`
#### Step 2. Implement metrics gathering
Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus` for display in the UI, and sent to Prometheus:
- [ ] Add the following fields to Geo Node Status example responses in `doc/api/geo_nodes.md`:
- `cool_widgets_count`
- `cool_widgets_checksum_total_count`
- `cool_widgets_checksummed_count`
- `cool_widgets_checksum_failed_count`
- `cool_widgets_synced_count`
- `cool_widgets_failed_count`
- `cool_widgets_registry_count`
- `cool_widgets_verification_total_count`
- `cool_widgets_verified_count`
- `cool_widgets_verification_failed_count`
- `cool_widgets_synced_in_percentage`
- `cool_widgets_verified_in_percentage`
- [ ] Add the same fields to `GET /geo_nodes/status` example response in
`ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`.
- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`:
```markdown
| `geo_cool_widgets` | Gauge | XX.Y | Number of Cool Widgets on primary | `url` |
| `geo_cool_widgets_checksum_total` | Gauge | XX.Y | Number of Cool Widgets to checksum on primary | `url` |
| `geo_cool_widgets_checksummed` | Gauge | XX.Y | Number of Cool Widgets that successfully calculated the checksum on primary | `url` |
| `geo_cool_widgets_checksum_failed` | Gauge | XX.Y | Number of Cool Widgets that failed to calculate the checksum on primary | `url` |
| `geo_cool_widgets_synced` | Gauge | XX.Y | Number of syncable Cool Widgets synced on secondary | `url` |
| `geo_cool_widgets_failed` | Gauge | XX.Y | Number of syncable Cool Widgets failed to sync on secondary | `url` |
| `geo_cool_widgets_registry` | Gauge | XX.Y | Number of Cool Widgets in the registry | `url` |
| `geo_cool_widgets_verification_total` | Gauge | XX.Y | Number of Cool Widgets to attempt to verify on secondary | `url` |
| `geo_cool_widgets_verified` | Gauge | XX.Y | Number of Cool Widgets successfully verified on secondary | `url` |
| `geo_cool_widgets_verification_failed` | Gauge | XX.Y | Number of Cool Widgets that failed verification on secondary | `url` |
```
- [ ] Run the rake task `geo:dev:ssf_metrics` and commit the changes to `ee/config/metrics/object_schemas/geo_node_usage.json`
Cool Widget replication and verification metrics should now be available in the API, the `Admin > Geo > Sites` view, and Prometheus.
#### Step 3. Implement the GraphQL API
The GraphQL API is used by `Admin > Geo > Replication Details` views, and is directly queryable by administrators.
- [ ] Add a new field to `GeoNodeType` in `ee/app/graphql/types/geo/geo_node_type.rb`:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
description: 'Find Cool Widget registries on this Geo node. '\
'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`.
- [ ] Create `ee/app/graphql/resolvers/geo/cool_widget_registries_resolver.rb`:
```ruby
# frozen_string_literal: true
module Resolvers
module Geo
class CoolWidgetRegistriesResolver < BaseResolver
type ::Types::Geo::GeoNodeType.connection_type, null: true
include RegistriesResolver
end
end
end
```
- [ ] Create `ee/spec/graphql/resolvers/geo/cool_widget_registries_resolver_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Resolvers::Geo::CoolWidgetRegistriesResolver, feature_category: :geo_replication do
it_behaves_like 'a Geo registries resolver', :geo_cool_widget_registry
end
```
- [ ] Create `ee/app/finders/geo/cool_widget_registry_finder.rb`:
```ruby
# frozen_string_literal: true
module Geo
class CoolWidgetRegistryFinder
include FrameworkRegistryFinder
end
end
```
- [ ] Create `ee/spec/finders/geo/cool_widget_registry_finder_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Geo::CoolWidgetRegistryFinder, feature_category: :geo_replication do
it_behaves_like 'a framework registry finder', :geo_cool_widget_registry
end
```
- [ ] Create `ee/app/graphql/types/geo/cool_widget_registry_type.rb`:
```ruby
# frozen_string_literal: true
module Types
module Geo
# rubocop:disable Graphql/AuthorizeTypes because it is included
class CoolWidgetRegistryType < BaseObject
graphql_name 'CoolWidgetRegistry'
include ::Types::Geo::RegistryType
description 'Represents the Geo replication and verification state of a cool_widget'
field :cool_widget_id, GraphQL::Types::ID, null: false, description: 'ID of the Cool Widget.'
end
# rubocop:enable Graphql/AuthorizeTypes
end
end
```
- [ ] Create `ee/spec/graphql/types/geo/cool_widget_registry_type_spec.rb`:
```ruby
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe GitlabSchema.types['CoolWidgetRegistry'], feature_category: :geo_replication do
it_behaves_like 'a Geo registry type'
it 'has the expected fields (other than those included in RegistryType)' do
expected_fields = %i[cool_widget_id]
expect(described_class).to have_graphql_fields(*expected_fields).at_least
end
end
```
- [ ] Add integration tests for providing CoolWidget registry data to the frontend via the GraphQL API, by duplicating and modifying the following shared examples in `ee/spec/requests/api/graphql/geo/registries_spec.rb`:
```ruby
it_behaves_like 'gets registries for', {
field_name: 'coolWidgetRegistries',
registry_class_name: 'CoolWidgetRegistry',
registry_factory: :geo_cool_widget_registry,
registry_foreign_key_field_name: 'coolWidgetId'
}
```
- [ ] Update the GraphQL reference documentation:
```shell
bundle exec rake gitlab:graphql:compile_docs
```
Individual Cool Widget replication and verification data should now be available via the GraphQL API.
#### Step 4. Handle batch destroy
If batch destroy logic is implemented for a replicable, then that logic must be "replicated" by Geo secondaries. The easiest way to do this is use `Geo::BatchEventCreateWorker` to bulk insert a delete event for each replicable.
For example, if `FastDestroyAll` is used, then you may be able to [use `begin_fast_destroy` and `finalize_fast_destroy` hooks, like we did for uploads](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/69763).
Or if a special service is used to batch delete records and their associated data, then you probably need to [hook into that service, like we did for job artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/79530).
As illustrated by the above two examples, batch destroy logic cannot be handled automatically by Geo secondaries without restricting the way other teams perform batch destroys. It is up to you to produce `Geo::BatchEventCreateWorker` attributes before the records are deleted, and then enqueue `Geo::BatchEventCreateWorker` after the records are deleted.
- [ ] Ensure that any batch destroy of this replicable is replicated to secondary sites
- [ ] Regardless of implementation details, please verify in specs that when the parent object is removed, the new `Geo::Event` records are created:
```ruby
describe '#destroy' do
subject { create(:cool_widget) }
context 'when running in a Geo primary node' do
let_it_be(:primary) { create(:geo_node, :primary) }
let_it_be(:secondary) { create(:geo_node) }
it 'logs an event to the Geo event log when bulk removal is used', :sidekiq_inline do
stub_current_geo_node(primary)
expect { subject.project.destroy! }.to change(Geo::Event.where(replicable_name: :cool_widget, event_name: :deleted), :count).by(1)
payload = Geo::Event.where(replicable_name: :cool_widget, event_name: :deleted).last.payload
expect(payload['model_record_id']).to eq(subject.id)
expect(payload['blob_path']).to eq(subject.relative_path)
expect(payload['uploader_class']).to eq('CoolWidgetUploader')
end
end
end
```
### Code Review
When requesting review from database reviewers:
- [ ] Include a comment mentioning that the change is based on a documented template.
- [ ] `replicables_for_current_secondary` and `available_replicables` may differ per Model. If their queries are new, then add [query plans](https://docs.gitlab.com/ee/development/database_review.html#query-plans) to the MR description. An easy place to gather SQL queries is your GDK's `log/test.log` when running tests of these methods.
### Release Geo support of Cool Widgets
- [ ] In the rollout issue you created when creating the feature flag, modify the Roll Out Steps:
- [ ] Cross out any steps related to testing on production GitLab.com, because Geo is not running on production GitLab.com at the moment.
- [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`.
- [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there.
- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true`
- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `alpha` option for the released type:
```ruby
field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type,
null: true,
resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver,
description: 'Find Cool Widget registries on this Geo node. '\
'Ignored if `geo_cool_widget_replication` feature flag is disabled.',
alpha: { milestone: '15.5' } # Update the milestone
```
- [ ] Run `bundle exec rake gitlab:graphql:compile_docs` after the step above to regenerate the GraphQL docs.
- [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types)
- [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version.

View file

@ -0,0 +1,30 @@
## Summary
<!-- Summarize the bug encountered concisely. -->
## Steps to reproduce
<!-- Describe how one can reproduce the issue - this is very important. Please use an ordered list. -->
## What is the current *bug* behavior?
<!-- Describe what actually happens. -->
## What is the expected *correct* behavior?
<!-- Describe what you should see instead. -->
## Relevant logs and/or screenshots
<!-- Paste any relevant logs - please use code blocks (```) to format console output, logs, and code
as it's tough to read otherwise. -->
## Possible fixes
<!-- If you can, link to the line of code that might be responsible for the problem. -->
<!-- Please add a label for the type of bug as per https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification -->
/label ~"type::bug"
/label ~"group::global search"
/label ~"workflow::solution validation"
/milestone %Backlog

View file

@ -0,0 +1,13 @@
## Problem to solve
<!-- What problem do we solve? Try to define the who/what/why of the opportunity as a user story. For example, "As a (who), I want (what), so I can (why/value)." -->
## Proposal
<!-- Use this section to explain the feature and how it will work. It can be helpful to add technical details, design proposals, and links to related epics or issues. -->
<!-- Please add a label for the type of feature as per https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification -->
/label ~"type::feature"
/label ~"group::global search"
/label ~"workflow::solution validation"
/milestone %Backlog

View file

@ -0,0 +1,11 @@
## Background
## Proposal
<!-- Use this section to explain the feature and how it will work. It can be helpful to add technical details, design proposals, and links to related epics or issues. -->
<!-- Please add a label for the type of maintenance as per https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification -->
/label ~"type::maintenance"
/label ~"group::global search"
/label ~"workflow::solution validation"
/milestone %Backlog

View file

@ -0,0 +1,82 @@
<!--
Implementation issues are used break-up a large piece of work into small, discrete tasks that can
move independently through the build workflow steps. They're typically used to populate a Feature
Epic. Once created, an implementation issue is usually refined in order to populate and review the
implementation plan and weight.
Example workflow: https://about.gitlab.com/handbook/engineering/development/threat-management/planning/diagram.html#plan
-->
## Why are we doing this work
<!--
A brief explanation of the why, not the what or how. Assume the reader doesn't know the
background and won't have time to dig-up information from comment threads.
-->
## Relevant links
<!--
Information that the developer might need to refer to when implementing the issue.
- [Design Issue](https://gitlab.com/gitlab-org/gitlab/-/issues/<id>)
- [Design 1](https://gitlab.com/gitlab-org/gitlab/-/issues/<id>/designs/<image>.png)
- [Design 2](https://gitlab.com/gitlab-org/gitlab/-/issues/<id>/designs/<image>.png)
- [Similar implementation](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/<id>)
-->
## Non-functional requirements
<!--
Add details for required items and delete others.
-->
- [ ] Documentation:
- [ ] Feature flag:
- [ ] Performance:
- [ ] Testing:
## Implementation plan
<!--
Steps and the parts of the code that will need to get updated.
The plan can also call-out responsibilities for other team members or teams and
can be split into smaller MRs to simplify the code review process.
e.g.:
- MR 1: Part 1
- [ ] ~frontend Step 1
- [ ] ~frontend Step 2
- MR 2: Part 2
- [ ] ~backend Step 1
- [ ] ~backend Step 2
- MR 3: Part 3
- [ ] ~frontend Step 1
- [ ] ~frontend Step 2
-->
<!--
Workflow and other relevant labels
# ~"group::" ~"Category:" ~"GitLab Ultimate"
Other settings you might want to include when creating the issue.
# /assign @
# /epic &
-->
## Verification steps
<!--
Add verification steps to help GitLab team members test the implementation. This is particularly useful
during the MR review and the ~"workflow::verification" step. You may not know exactly what the
verification steps should be during issue refinement, so you can always come back later to add
them.
1. Check-out the corresponding branch
1. ...
1. Profit!
-->
/label ~"workflow::refinement"
/milestone %Backlog

View file

@ -0,0 +1,56 @@
<!--
Triage of infradev Issues is desired to occur asynchronously.
For maximum efficiency, please ensure the following, so that your infradev issues can gain maximum traction.
https://about.gitlab.com/handbook/engineering/workflow/#a-guide-to-creating-effective-infradev-issues
-->
## Summary
<!--
Clearly state the scope of the problem, and how it affects GitLab.com
-->
## Impact
<!--
- Quantify the effect of the problem to help ensure that correct prioritization occurs.
- Include costs to availability. The Incident Budget Explorer dashboard can help here.
- Include the number of times alerts have fired owing to the problem, how much time was spent dealing with the problem, and how many people were involved.
- Link to affected incidents, and cross-reference them as related issues.
- Include screenshots of visualization from Grafana or Kibana.
- Always include a permalink to the source of the screenshot so that others can investigate further.
-->
## Recommendation
<!--
Provide a clear, unambiguous, self-contained solution to the problem.
-->
## Verification
<!--
Provide a method for validating that the original issue still exists.
Having a way of checking validity can save on a great deal of back-and-forth discussion between Infradev Triage participants including Engineering Managers, Directors and Product Managers and make space for other non-resolved issues to get scheduled sooner.
Ideally, provide a link to a Thanos query or an ELK query and clear instructions on how to interpret the results to determine whether the problem is still occurring.
-->
<!--
Workflow and other relevant labels
/label ~"severity::"
/label ~"priority::"
/label ~"group::"
/label ~"devops::"
See also:
- https://about.gitlab.com/handbook/engineering/quality/issue-triage/#availability
- https://about.gitlab.com/handbook/product/categories/
- https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml
-->
/label ~"infradev"
/label ~"type::bug"

View file

@ -0,0 +1,26 @@
<!-- This template is used for proposing changes to the left sidebar contextual navigation. This could include additions, removals, or general changes to overall hierarchy.-->
### Proposal
<!-- Use this section to explain the proposed changes, including details around usage and business drivers. -->
#### Other locations that were considered
<!-- Include other design patterns or places you considered for this feature besides navigation. -->
### Checklist
- [ ] Review the handbook page for [navigation changes](https://about.gitlab.com/handbook/product/ux/navigation/#when-to-consider-making-a-change-to-the-navigation)
- [ ] Add relevant information to the issue description detailing your proposal, including usage and business drivers.
- [ ] List at least two other places you considered to introduce your feature
- [ ] Add relevant designs to the Design Management area of the issue
- [ ] Ensure your UI suggestion align with the [Documentation Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide/)
- [ ] Engage ~"Technical Writing". They can help craft a term that best describes the feature(s) youre proposing.
- [ ] Follow the [product development workflow](https://about.gitlab.com/handbook/product-development-flow/#validation-phase-2-problem-validation) validation process to ensure you are solving a well understood problem and that the proposed change is understandable and non-disruptive to users. Navigation-specific research is mandatory for additions or when restructuring.
- [ ] Engage the [Foundations Product Manager](https://about.gitlab.com/handbook/product/categories/#foundations-group) for approval. The Foundations DRI (@cdybenko) will work with UX partners in product design, research, and technical writing, as applicable.
- [ ] Consider whether you need to [communicate the change somehow](https://design.gitlab.com/patterns/navigation#messaging-changes-to-users), or if you will have an interim period in the UI where your item will live in more than one place.
- [ ] Ensure engineers are familiar with the [implementation steps for navigation](https://docs.gitlab.com/ee/development/navigation_sidebar.html#navigation-sidebar).
/label ~UX ~"UI text" ~"documentation" ~"Category:Navigation & Settings" ~navigation ~type::ignore
/label ~"Nav request::Start"

View file

@ -0,0 +1,54 @@
<!--
## Implementation Issue To-Do list
(_NOTE: This section can be removed when the issue is ready for creation_)
- [ ] Ensure that issue title is concise yet descriptive
- [ ] Add `Frontend :` or `Backend: ` per group [naming conventions](https://about.gitlab.com/handbook/engineering/development/ops/verify/pipeline-authoring/#splitting-issues)
- [ ] Ensure the issue containing the feature or change proposal and related discussions is linked as related to this implementation issue.
- [ ] Aside from default labeling, please make sure to include relevant labels for `type::`, `workflow::`, and `~frontend`/`~backend` labeling.
- [ ] Issues with user-facing changes should include the `~UX` label.
-->
## Summary
## Proposal
## Additional details
<!--
_NOTE: If the issue has addressed all of these questions, this separate section can be removed._
-->
Some relevant technical details, if applicable, such as:
- Does this need a ~"feature flag"?
- Does there need to be an associated ~"instrumentation" issue created related to this work?
- Is there an example response showing the data structure that should be returned (new endpoints only)?
- What permissions should be used?
- Is this EE or CE?
- [ ] EE
- [ ] CE
- Additional comments:
## Implementation Table
<!--
_NOTE: If the issue is not part of an epic, the implementation table can be removed. If it is part of an epic, make sure that the implementation table below mirrors the corresponding epic's implementation table content._
-->
| Group | Issue Link |
| ------ | ------ |
| ~backend | :point_left: You are here |
| ~frontend | [#123123](url) |
<!--
## Documentation
_NOTE: This section is optional, but can be used for easy access to any relevant documentation URLs._
-->
## Links/References
/label ~"group::pipeline authoring" ~"Category:Pipeline Composition" ~"section::ops" ~"devops::verify" ~"workflow::planning breakdown"

View file

@ -0,0 +1,56 @@
<!-- This template is used as a starting point for understanding and articulating a customer problem.
Learn more about it in the handbook: https://about.gitlab.com/handbook/product-development-flow/#validation-phase-2-problem-validation
-->
## Problem Statement
<!-- What is the problem we hope to validate? Reference how to write a real customer problem statement at https://productcoalition.com/how-to-write-a-good-customer-problem-statement-a815f80189ba for guidance. -->
## Reach
<!-- Please describe who suffers from this problem. Consider referring to our personas, which are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ -->
<!-- Please also quantify the problem's reach using the following values, considering an aggregate across GitLab.com and self-managed:
10.0 = Impacts the vast majority (~80% or greater) of our users, prospects, or customers.
6.0 = Impacts a large percentage (~50% to ~80%) of the above.
3.0 = Significant reach (~25% to ~50%).
1.5 = Small reach (~5% to ~25%).
0.5 = Minimal reach (Less than ~5%). -->
## Impact
<!-- How do we positively impact the users above and GitLab's business by solving this problem? Please describe briefly, and provide a numerical assessment:
3.0 = Massive impact
2.0 = High impact
1.0 = Medium impact
0.5 = Low impact
0.25 = Minimal impact -->
## Confidence
<!-- How do we know this is a problem? Please provide and link to any supporting information (e.g. data, customer verbatims) and use this basis to provide a numerical assessment on our confidence level in this problem's severity:
100% = High confidence
80% = Medium confidence
50% = Low confidence -->
## Effort
<!-- How much effort do we think it will be to solve this problem? Please include all counterparts (Product, UX, Engineering, etc) in your assessment and quantify the number of person-months needed to dedicate to the effort.
For example, if the solution will take a product manager, designer, and engineer two weeks of effort - you may quantify this as 1.5 (based on 0.5 months x 3 people). -->
## Definition of Done
- [ ] The problem is well understood by the PM to have an understanding summarized in a RICE score
- [ ] The problem is well understood by the PM to decide if they want to move forward with this idea or drop it
- [ ] The problem is well described and detailed with necessary requirements for product design to understand the problem
- [ ] The problem is well described and detailed with necessary requirements for engineering to understand the problem
## Research Issue
<!-- Link to the Problem Validation Research issue that will be executed by the UX Researcher. https://gitlab.com/gitlab-org/ux-research/ -->
/label ~"workflow::validation backlog" ~devops:: ~category: ~group::

Some files were not shown because too many files have changed in this diff Show more