• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

moosetechnology / GitProjectHealth / 15488373517

06 Jun 2025 10:23AM UTC coverage: 74.275% (+1.8%) from 72.472%
15488373517

Pull #201

github

web-flow
Merge 4dc57a52f into b9fe8bddf
Pull Request #201: Metric custom dora

111 of 490 new or added lines in 9 files covered. (22.65%)

54 existing lines in 2 files now uncovered.

16983 of 22865 relevant lines covered (74.28%)

0.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

14.41
/src/GitLabHealth-Model/GLHUser.class.st
1
"
2
A GitLab User
3

4
## Relations
5
======================
6

7
### Children
8
| Relation | Origin | Opposite | Type | Comment |
9
|---|
10
| `commits` | `GLHUser` | `commitCreator` | `GLHCommit` | |
11
| `jobs` | `GLHUser` | `user` | `GLHJob` | |
12
| `releases` | `GLHUser` | `author` | `GLHRelease` | |
13

14
### Other
15
| Relation | Origin | Opposite | Type | Comment |
16
|---|
17
| `approcheMergeRequests` | `GLHUser` | `approved_by` | `GLHMergeRequest` | |
18
| `assignedMergeRequests` | `GLHUser` | `assignees` | `GLHMergeRequest` | |
19
| `closedMergeRequests` | `GLHUser` | `closed_by` | `GLHMergeRequest` | |
20
| `contributedProjects` | `GLHUser` | `contributors` | `GLHProject` | |
21
| `createdMergeRequests` | `GLHUser` | `author` | `GLHMergeRequest` | |
22
| `createdProjects` | `GLHUser` | `creator` | `GLHProject` | |
23
| `currentlyAssignedMergeRequest` | `GLHUser` | `assignee` | `GLHMergeRequest` | |
24
| `launchedPipelines` | `GLHUser` | `user` | `GLHPipeline` | |
25
| `mergerOfMergeRequests` | `GLHUser` | `merged_by` | `GLHMergeRequest` | |
26
| `reviewedMergeResquest` | `GLHUser` | `reviewers` | `GLHMergeRequest` | |
27
| `usedMerges` | `GLHUser` | `merge_user` | `GLHMergeRequest` | |
28

29

30
## Properties
31
======================
32

33
| Name | Type | Default value | Comment |
34
|---|
35
| `avatar_url` | `String` | nil | |
36
| `bio` | `String` | nil | |
37
| `bot` | `String` | nil | |
38
| `commit_email` | `String` | nil | |
39
| `created_at` | `String` | nil | |
40
| `email` | `String` | nil | |
41
| `followers` | `String` | nil | |
42
| `following` | `String` | nil | |
43
| `id` | `Number` | nil | |
44
| `job_title` | `String` | nil | |
45
| `linkedin` | `String` | nil | |
46
| `location` | `String` | nil | |
47
| `name` | `String` | nil | |
48
| `name` | `String` | nil | Basic name of the entity, not full reference.|
49
| `organization` | `String` | nil | |
50
| `pronouns` | `String` | nil | |
51
| `public_email` | `String` | nil | |
52
| `skype` | `String` | nil | |
53
| `state` | `String` | nil | |
54
| `twitter` | `String` | nil | |
55
| `username` | `String` | nil | |
56
| `web_url` | `String` | nil | |
57
| `website_url` | `String` | nil | |
58
| `work_information` | `String` | nil | |
59

60
"
61
Class {
62
        #name : #GLHUser,
63
        #superclass : #GLHEntity,
64
        #traits : 'FamixTNamedEntity',
65
        #classTraits : 'FamixTNamedEntity classTrait',
66
        #instVars : [
67
                '#id => FMProperty',
68
                '#username => FMProperty',
69
                '#name => FMProperty',
70
                '#state => FMProperty',
71
                '#avatar_url => FMProperty',
72
                '#web_url => FMProperty',
73
                '#created_at => FMProperty',
74
                '#bio => FMProperty',
75
                '#location => FMProperty',
76
                '#public_email => FMProperty',
77
                '#email => FMProperty',
78
                '#commit_email => FMProperty',
79
                '#skype => FMProperty',
80
                '#linkedin => FMProperty',
81
                '#twitter => FMProperty',
82
                '#website_url => FMProperty',
83
                '#organization => FMProperty',
84
                '#job_title => FMProperty',
85
                '#pronouns => FMProperty',
86
                '#bot => FMProperty',
87
                '#work_information => FMProperty',
88
                '#followers => FMProperty',
89
                '#following => FMProperty',
90
                '#createdProjects => FMMany type: #GLHProject opposite: #creator',
91
                '#contributedProjects => FMMany type: #GLHProject opposite: #contributors',
92
                '#commits => FMMany type: #GLHCommit opposite: #commitCreator',
93
                '#launchedPipelines => FMMany type: #GLHPipeline opposite: #user',
94
                '#jobs => FMMany type: #GLHJob opposite: #user',
95
                '#createdMergeRequests => FMMany type: #GLHMergeRequest opposite: #author',
96
                '#approcheMergeRequests => FMMany type: #GLHMergeRequest opposite: #approved_by',
97
                '#usedMerges => FMMany type: #GLHMergeRequest opposite: #merge_user',
98
                '#closedMergeRequests => FMMany type: #GLHMergeRequest opposite: #closed_by',
99
                '#mergerOfMergeRequests => FMMany type: #GLHMergeRequest opposite: #merged_by',
100
                '#assignedMergeRequests => FMMany type: #GLHMergeRequest opposite: #assignees',
101
                '#currentlyAssignedMergeRequest => FMMany type: #GLHMergeRequest opposite: #assignee',
102
                '#reviewedMergeResquest => FMMany type: #GLHMergeRequest opposite: #reviewers',
103
                '#releases => FMMany type: #GLHRelease opposite: #author'
104
        ],
105
        #category : #'GitLabHealth-Model-Entities'
106
}
107

108
{ #category : #meta }
109
GLHUser class >> annotation [
×
110

×
111
        <FMClass: #User super: #GLHEntity>
×
112
        <package: #'GitLabHealth-Model'>
×
113
        <generated>
×
114
        ^ self
×
115
]
×
116

117
{ #category : #adding }
118
GLHUser >> addApprocheMergeRequest: anObject [
×
119
        <generated>
×
120
        ^ self approcheMergeRequests add: anObject
×
121
]
×
122

123
{ #category : #adding }
124
GLHUser >> addAssignedMergeRequest: anObject [
×
125
        <generated>
×
126
        ^ self assignedMergeRequests add: anObject
×
127
]
×
128

129
{ #category : #adding }
130
GLHUser >> addClosedMergeRequest: anObject [
×
131
        <generated>
×
132
        ^ self closedMergeRequests add: anObject
×
133
]
×
134

135
{ #category : #adding }
136
GLHUser >> addCommit: anObject [
×
137
        <generated>
×
138
        ^ self commits add: anObject
×
139
]
×
140

141
{ #category : #adding }
142
GLHUser >> addContributedProject: anObject [
×
143
        <generated>
×
144
        ^ self contributedProjects add: anObject
×
145
]
×
146

147
{ #category : #adding }
148
GLHUser >> addCreatedMergeRequest: anObject [
×
149
        <generated>
×
150
        ^ self createdMergeRequests add: anObject
×
151
]
×
152

153
{ #category : #adding }
154
GLHUser >> addCreatedProject: anObject [
1✔
155
        <generated>
1✔
156
        ^ self createdProjects add: anObject
1✔
157
]
1✔
158

159
{ #category : #adding }
160
GLHUser >> addCurrentlyAssignedMergeRequest: anObject [
×
161
        <generated>
×
162
        ^ self currentlyAssignedMergeRequest add: anObject
×
163
]
×
164

165
{ #category : #adding }
166
GLHUser >> addJob: anObject [
×
167
        <generated>
×
168
        ^ self jobs add: anObject
×
169
]
×
170

171
{ #category : #adding }
172
GLHUser >> addLaunchedPipeline: anObject [
×
173
        <generated>
×
174
        ^ self launchedPipelines add: anObject
×
175
]
×
176

177
{ #category : #adding }
178
GLHUser >> addMergerOfMergeRequest: anObject [
×
179
        <generated>
×
180
        ^ self mergerOfMergeRequests add: anObject
×
181
]
×
182

183
{ #category : #adding }
NEW
184
GLHUser >> addRelease: anObject [
×
NEW
185
        <generated>
×
NEW
186
        ^ self releases add: anObject
×
NEW
187
]
×
188

189
{ #category : #adding }
190
GLHUser >> addReviewedMergeResquest: anObject [
×
191
        <generated>
×
192
        ^ self reviewedMergeResquest add: anObject
×
193
]
×
194

195
{ #category : #adding }
196
GLHUser >> addUsedMerge: anObject [
×
197
        <generated>
×
198
        ^ self usedMerges add: anObject
×
199
]
×
200

201
{ #category : #accessing }
202
GLHUser >> approcheMergeRequests [
×
203
        "Relation named: #approcheMergeRequests type: #GLHMergeRequest opposite: #approved_by"
×
204

×
205
        <generated>
×
206
        ^ approcheMergeRequests
×
207
]
×
208

209
{ #category : #accessing }
210
GLHUser >> approcheMergeRequests: anObject [
×
211

×
212
        <generated>
×
213
        approcheMergeRequests value: anObject
×
214
]
×
215

216
{ #category : #accessing }
217
GLHUser >> assignedMergeRequests [
×
218
        "Relation named: #assignedMergeRequests type: #GLHMergeRequest opposite: #assignees"
×
219

×
220
        <generated>
×
221
        ^ assignedMergeRequests
×
222
]
×
223

224
{ #category : #accessing }
225
GLHUser >> assignedMergeRequests: anObject [
×
226

×
227
        <generated>
×
228
        assignedMergeRequests value: anObject
×
229
]
×
230

231
{ #category : #accessing }
232
GLHUser >> avatar_url [
×
233

×
234
        <FMProperty: #avatar_url type: #String>
×
235
        <generated>
×
236
        ^ avatar_url
×
237
]
×
238

239
{ #category : #accessing }
240
GLHUser >> avatar_url: anObject [
×
241
        <generated>
×
242
        avatar_url := anObject
×
243
]
×
244

245
{ #category : #accessing }
246
GLHUser >> bio [
×
247

×
248
        <FMProperty: #bio type: #String>
×
249
        <generated>
×
250
        ^ bio
×
251
]
×
252

253
{ #category : #accessing }
254
GLHUser >> bio: anObject [
×
255
        <generated>
×
256
        bio := anObject
×
257
]
×
258

259
{ #category : #accessing }
260
GLHUser >> bot [
×
261

×
262
        <FMProperty: #bot type: #String>
×
263
        <generated>
×
264
        ^ bot
×
265
]
×
266

267
{ #category : #accessing }
268
GLHUser >> bot: anObject [
×
269
        <generated>
×
270
        bot := anObject
×
271
]
×
272

273
{ #category : #accessing }
274
GLHUser >> closedMergeRequests [
×
275
        "Relation named: #closedMergeRequests type: #GLHMergeRequest opposite: #closed_by"
×
276

×
277
        <generated>
×
278
        <derived>
×
279
        ^ closedMergeRequests
×
280
]
×
281

282
{ #category : #accessing }
283
GLHUser >> closedMergeRequests: anObject [
×
284

×
285
        <generated>
×
286
        closedMergeRequests value: anObject
×
287
]
×
288

289
{ #category : #accessing }
290
GLHUser >> commit_email [
×
291

×
292
        <FMProperty: #commit_email type: #String>
×
293
        <generated>
×
294
        ^ commit_email
×
295
]
×
296

297
{ #category : #accessing }
298
GLHUser >> commit_email: anObject [
×
299
        <generated>
×
300
        commit_email := anObject
×
301
]
×
302

303
{ #category : #accessing }
304
GLHUser >> commits [
×
305
        "Relation named: #commits type: #GLHCommit opposite: #commitCreator"
×
306

×
307
        <generated>
×
308
        <derived>
×
309
        ^ commits
×
310
]
×
311

312
{ #category : #accessing }
313
GLHUser >> commits: anObject [
×
314

×
315
        <generated>
×
316
        commits value: anObject
×
317
]
×
318

319
{ #category : #navigation }
320
GLHUser >> commitsGroup [
×
321
        <generated>
×
322
        <navigation: 'Commits'>
×
323
        ^ MooseSpecializedGroup withAll: self commits asSet
×
324
]
×
325

326
{ #category : #accessing }
327
GLHUser >> contributedProjects [
1✔
328
        "Relation named: #contributedProjects type: #GLHProject opposite: #contributors"
1✔
329

1✔
330
        <generated>
1✔
331
        ^ contributedProjects
1✔
332
]
1✔
333

334
{ #category : #accessing }
335
GLHUser >> contributedProjects: anObject [
1✔
336

1✔
337
        <generated>
1✔
338
        contributedProjects value: anObject
1✔
339
]
1✔
340

341
{ #category : #accessing }
342
GLHUser >> createdMergeRequests [
×
343
        "Relation named: #createdMergeRequests type: #GLHMergeRequest opposite: #author"
×
344

×
345
        <generated>
×
346
        <derived>
×
347
        ^ createdMergeRequests
×
348
]
×
349

350
{ #category : #accessing }
351
GLHUser >> createdMergeRequests: anObject [
×
352

×
353
        <generated>
×
354
        createdMergeRequests value: anObject
×
355
]
×
356

357
{ #category : #accessing }
358
GLHUser >> createdProjects [
1✔
359
        "Relation named: #createdProjects type: #GLHProject opposite: #creator"
1✔
360

1✔
361
        <generated>
1✔
362
        <derived>
1✔
363
        ^ createdProjects
1✔
364
]
1✔
365

366
{ #category : #accessing }
367
GLHUser >> createdProjects: anObject [
×
368

×
369
        <generated>
×
370
        createdProjects value: anObject
×
371
]
×
372

373
{ #category : #accessing }
374
GLHUser >> created_at [
×
375

×
376
        <FMProperty: #created_at type: #String>
×
377
        <generated>
×
378
        ^ created_at
×
379
]
×
380

381
{ #category : #accessing }
382
GLHUser >> created_at: anObject [
×
383
        <generated>
×
384
        created_at := anObject
×
385
]
×
386

387
{ #category : #accessing }
388
GLHUser >> currentlyAssignedMergeRequest [
×
389
        "Relation named: #currentlyAssignedMergeRequest type: #GLHMergeRequest opposite: #assignee"
×
390

×
391
        <generated>
×
392
        <derived>
×
393
        ^ currentlyAssignedMergeRequest
×
394
]
×
395

396
{ #category : #accessing }
397
GLHUser >> currentlyAssignedMergeRequest: anObject [
×
398

×
399
        <generated>
×
400
        currentlyAssignedMergeRequest value: anObject
×
401
]
×
402

403
{ #category : #accessing }
404
GLHUser >> email [
1✔
405

1✔
406
        <FMProperty: #email type: #String>
1✔
407
        <generated>
1✔
408
        ^ email
1✔
409
]
1✔
410

411
{ #category : #accessing }
412
GLHUser >> email: anObject [
×
413
        <generated>
×
414
        email := anObject
×
415
]
×
416

417
{ #category : #accessing }
418
GLHUser >> followers [
×
419

×
420
        <FMProperty: #followers type: #String>
×
421
        <generated>
×
422
        ^ followers
×
423
]
×
424

425
{ #category : #accessing }
426
GLHUser >> followers: anObject [
×
427
        <generated>
×
428
        followers := anObject
×
429
]
×
430

431
{ #category : #accessing }
432
GLHUser >> following [
×
433

×
434
        <FMProperty: #following type: #String>
×
435
        <generated>
×
436
        ^ following
×
437
]
×
438

439
{ #category : #accessing }
440
GLHUser >> following: anObject [
×
441
        <generated>
×
442
        following := anObject
×
443
]
×
444

445
{ #category : #accessing }
446
GLHUser >> id [
1✔
447

1✔
448
        <FMProperty: #id type: #Number>
1✔
449
        <generated>
1✔
450
        ^ id
1✔
451
]
1✔
452

453
{ #category : #accessing }
454
GLHUser >> id: anObject [
1✔
455
        <generated>
1✔
456
        id := anObject
1✔
457
]
1✔
458

459
{ #category : #accessing }
460
GLHUser >> job_title [
×
461

×
462
        <FMProperty: #job_title type: #String>
×
463
        <generated>
×
464
        ^ job_title
×
465
]
×
466

467
{ #category : #accessing }
468
GLHUser >> job_title: anObject [
×
469
        <generated>
×
470
        job_title := anObject
×
471
]
×
472

473
{ #category : #accessing }
474
GLHUser >> jobs [
×
475
        "Relation named: #jobs type: #GLHJob opposite: #user"
×
476

×
477
        <generated>
×
478
        <derived>
×
479
        ^ jobs
×
480
]
×
481

482
{ #category : #accessing }
483
GLHUser >> jobs: anObject [
×
484

×
485
        <generated>
×
486
        jobs value: anObject
×
487
]
×
488

489
{ #category : #navigation }
490
GLHUser >> jobsGroup [
×
491
        <generated>
×
492
        <navigation: 'Jobs'>
×
493
        ^ MooseSpecializedGroup withAll: self jobs asSet
×
494
]
×
495

496
{ #category : #accessing }
497
GLHUser >> launchedPipelines [
×
498
        "Relation named: #launchedPipelines type: #GLHPipeline opposite: #user"
×
499

×
500
        <generated>
×
501
        <derived>
×
502
        ^ launchedPipelines
×
503
]
×
504

505
{ #category : #accessing }
506
GLHUser >> launchedPipelines: anObject [
×
507

×
508
        <generated>
×
509
        launchedPipelines value: anObject
×
510
]
×
511

512
{ #category : #accessing }
513
GLHUser >> linkedin [
×
514

×
515
        <FMProperty: #linkedin type: #String>
×
516
        <generated>
×
517
        ^ linkedin
×
518
]
×
519

520
{ #category : #accessing }
521
GLHUser >> linkedin: anObject [
×
522
        <generated>
×
523
        linkedin := anObject
×
524
]
×
525

526
{ #category : #accessing }
527
GLHUser >> location [
×
528

×
529
        <FMProperty: #location type: #String>
×
530
        <generated>
×
531
        ^ location
×
532
]
×
533

534
{ #category : #accessing }
535
GLHUser >> location: anObject [
×
536
        <generated>
×
537
        location := anObject
×
538
]
×
539

540
{ #category : #accessing }
541
GLHUser >> mergerOfMergeRequests [
×
542
        "Relation named: #mergerOfMergeRequests type: #GLHMergeRequest opposite: #merged_by"
×
543

×
544
        <generated>
×
545
        <derived>
×
546
        ^ mergerOfMergeRequests
×
547
]
×
548

549
{ #category : #accessing }
550
GLHUser >> mergerOfMergeRequests: anObject [
×
551

×
552
        <generated>
×
553
        mergerOfMergeRequests value: anObject
×
554
]
×
555

556
{ #category : #accessing }
557
GLHUser >> name [
1✔
558

1✔
559
        <FMProperty: #name type: #String>
1✔
560
        <generated>
1✔
561
        ^ name
1✔
562
]
1✔
563

564
{ #category : #accessing }
565
GLHUser >> name: anObject [
1✔
566
        <generated>
1✔
567
        name := anObject
1✔
568
]
1✔
569

570
{ #category : #accessing }
571
GLHUser >> organization [
×
572

×
573
        <FMProperty: #organization type: #String>
×
574
        <generated>
×
575
        ^ organization
×
576
]
×
577

578
{ #category : #accessing }
579
GLHUser >> organization: anObject [
×
580
        <generated>
×
581
        organization := anObject
×
582
]
×
583

584
{ #category : #accessing }
585
GLHUser >> pronouns [
×
586

×
587
        <FMProperty: #pronouns type: #String>
×
588
        <generated>
×
589
        ^ pronouns
×
590
]
×
591

592
{ #category : #accessing }
593
GLHUser >> pronouns: anObject [
×
594
        <generated>
×
595
        pronouns := anObject
×
596
]
×
597

598
{ #category : #accessing }
599
GLHUser >> public_email [
1✔
600

1✔
601
        <FMProperty: #public_email type: #String>
1✔
602
        <generated>
1✔
603
        ^ public_email
1✔
604
]
1✔
605

606
{ #category : #accessing }
607
GLHUser >> public_email: anObject [
1✔
608
        <generated>
1✔
609
        public_email := anObject
1✔
610
]
1✔
611

612
{ #category : #accessing }
NEW
613
GLHUser >> releases [
×
NEW
614
        "Relation named: #releases type: #GLHRelease opposite: #author"
×
NEW
615

×
NEW
616
        <generated>
×
NEW
617
        <derived>
×
NEW
618
        ^ releases
×
NEW
619
]
×
620

621
{ #category : #accessing }
NEW
622
GLHUser >> releases: anObject [
×
NEW
623

×
NEW
624
        <generated>
×
NEW
625
        releases value: anObject
×
NEW
626
]
×
627

628
{ #category : #navigation }
NEW
629
GLHUser >> releasesGroup [
×
NEW
630
        <generated>
×
NEW
631
        <navigation: 'Releases'>
×
NEW
632
        ^ MooseSpecializedGroup withAll: self releases asSet
×
NEW
633
]
×
634

635
{ #category : #accessing }
636
GLHUser >> reviewedMergeResquest [
×
637
        "Relation named: #reviewedMergeResquest type: #GLHMergeRequest opposite: #reviewers"
×
638

×
639
        <generated>
×
640
        ^ reviewedMergeResquest
×
641
]
×
642

643
{ #category : #accessing }
644
GLHUser >> reviewedMergeResquest: anObject [
×
645

×
646
        <generated>
×
647
        reviewedMergeResquest value: anObject
×
648
]
×
649

650
{ #category : #accessing }
651
GLHUser >> skype [
×
652

×
653
        <FMProperty: #skype type: #String>
×
654
        <generated>
×
655
        ^ skype
×
656
]
×
657

658
{ #category : #accessing }
659
GLHUser >> skype: anObject [
×
660
        <generated>
×
661
        skype := anObject
×
662
]
×
663

664
{ #category : #accessing }
665
GLHUser >> state [
×
666

×
667
        <FMProperty: #state type: #String>
×
668
        <generated>
×
669
        ^ state
×
670
]
×
671

672
{ #category : #accessing }
673
GLHUser >> state: anObject [
×
674
        <generated>
×
675
        state := anObject
×
676
]
×
677

678
{ #category : #accessing }
679
GLHUser >> twitter [
×
680

×
681
        <FMProperty: #twitter type: #String>
×
682
        <generated>
×
683
        ^ twitter
×
684
]
×
685

686
{ #category : #accessing }
687
GLHUser >> twitter: anObject [
×
688
        <generated>
×
689
        twitter := anObject
×
690
]
×
691

692
{ #category : #accessing }
693
GLHUser >> usedMerges [
×
694
        "Relation named: #usedMerges type: #GLHMergeRequest opposite: #merge_user"
×
695

×
696
        <generated>
×
697
        <derived>
×
698
        ^ usedMerges
×
699
]
×
700

701
{ #category : #accessing }
702
GLHUser >> usedMerges: anObject [
×
703

×
704
        <generated>
×
705
        usedMerges value: anObject
×
706
]
×
707

708
{ #category : #accessing }
709
GLHUser >> username [
1✔
710

1✔
711
        <FMProperty: #username type: #String>
1✔
712
        <generated>
1✔
713
        ^ username
1✔
714
]
1✔
715

716
{ #category : #accessing }
717
GLHUser >> username: anObject [
1✔
718
        <generated>
1✔
719
        username := anObject
1✔
720
]
1✔
721

722
{ #category : #accessing }
723
GLHUser >> web_url [
×
724

×
725
        <FMProperty: #web_url type: #String>
×
726
        <generated>
×
727
        ^ web_url
×
728
]
×
729

730
{ #category : #accessing }
731
GLHUser >> web_url: anObject [
×
732
        <generated>
×
733
        web_url := anObject
×
734
]
×
735

736
{ #category : #accessing }
737
GLHUser >> website_url [
×
738

×
739
        <FMProperty: #website_url type: #String>
×
740
        <generated>
×
741
        ^ website_url
×
742
]
×
743

744
{ #category : #accessing }
745
GLHUser >> website_url: anObject [
×
746
        <generated>
×
747
        website_url := anObject
×
748
]
×
749

750
{ #category : #accessing }
751
GLHUser >> work_information [
×
752

×
753
        <FMProperty: #work_information type: #String>
×
754
        <generated>
×
755
        ^ work_information
×
756
]
×
757

758
{ #category : #accessing }
759
GLHUser >> work_information: anObject [
×
760
        <generated>
×
761
        work_information := anObject
×
762
]
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc