Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-05-15 15:17:24 +00:00
parent 17d162d008
commit 3c7efb067c
15 changed files with 160 additions and 139 deletions

View File

@ -30,21 +30,6 @@ Lint/SymbolConversion:
- 'ee/spec/services/security/token_revocation_service_spec.rb'
- 'ee/spec/support/helpers/subscription_portal_helpers.rb'
- 'ee/spec/workers/deployments/approval_worker_spec.rb'
- 'lib/gitlab/auth/otp/strategies/forti_token_cloud.rb'
- 'lib/gitlab/data_builder/repository.rb'
- 'lib/gitlab/database/reindexing/grafana_notifier.rb'
- 'lib/gitlab/gitaly_client.rb'
- 'lib/gitlab/grape_logging/loggers/queue_duration_logger.rb'
- 'lib/gitlab/harbor/client.rb'
- 'lib/gitlab/prometheus_client.rb'
- 'lib/gitlab/zentao/client.rb'
- 'lib/version_check.rb'
- 'qa/qa/resource/merge_request.rb'
- 'qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_from_push_notification_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/10_govern/change_vulnerability_status_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/10_govern/project_security_dashboard_spec.rb'
- 'qa/spec/resource/events/project_spec.rb'
- 'qa/spec/specs/allure_report_spec.rb'
- 'spec/controllers/jira_connect/branches_controller_spec.rb'
- 'spec/factories/ci/reports/codequality_degradations.rb'
- 'spec/factories/evidences.rb'

View File

@ -159,7 +159,7 @@ export default {
<form class="feature-flags-form">
<fieldset>
<div class="gl-display-flex gl-flex-wrap gl-mx-n5">
<div class="gl-mb-5 gl-px-5 gl-w-full col-md-4">
<div class="gl-mb-5 gl-px-5 gl-w-full md:gl-basis-1/3">
<label for="feature-flag-name" class="gl-font-weight-bold"
>{{ s__('FeatureFlags|Name') }} *</label
>
@ -168,7 +168,7 @@ export default {
</div>
<div class="gl-display-flex gl-flex-wrap gl-mx-n5">
<div class="gl-mb-5 gl-px-5 gl-w-full col-md-4">
<div class="gl-mb-5 gl-px-5 gl-w-full md:gl-basis-1/3">
<label for="feature-flag-description" class="gl-font-weight-bold">
{{ s__('FeatureFlags|Description') }}
</label>

View File

@ -29,8 +29,8 @@ GitLab supports two authentication methods:
### Authentication against a local database with X.509 certificates
WARNING:
Smart card authentication against local databases is an experimental feature and may change or be removed completely in future releases.
DETAILS:
**Status:** Experiment
Smart cards with X.509 certificates can be used to authenticate with GitLab.
@ -53,12 +53,12 @@ Certificate:
### Authentication against a local database with X.509 certificates and SAN extension
DETAILS:
**Status:** Experiment
Smart cards with X.509 certificates using SAN extensions can be used to authenticate
with GitLab.
NOTE:
Smart card authentication against local databases is an experimental feature and may change or be removed completely in future releases.
To use a smart card with an X.509 certificate to authenticate against a local
database with GitLab:
@ -92,8 +92,8 @@ Certificate:
### Authentication against an LDAP server
NOTE:
Smart card authentication against an LDAP server is an experimental feature and may change or be removed completely in future releases.
DETAILS:
**Status:** Experiment
GitLab implements a standard way of certificate matching following
[RFC4523](https://www.rfc-editor.org/rfc/rfc4523). It uses the

View File

@ -69,7 +69,7 @@ If something unexpected happens during the migration, it is safe to start over.
1. Plan for downtime. The downtime is dependent on the size of the `gitlabhq_production` database.
- We dump `gitlabhq_production` and restore it into a new `gitlabhq_production_ci` database. Database sizes below 100 GB should be done within 30 minutes.
- We dump `gitlabhq_production` and restore it into a new `gitlabhq_production_ci` database. Database sizes below 50 GB should be done within 30 minutes. Larger databases need more time. For example, a 100 GB database needs 1-2 hours to be copied to the new database.
- We advise to also plan some time for smaller tasks like modifying the configuration.
1. Create the new `gitlabhq_production_ci` database:

View File

@ -112,6 +112,41 @@ Seeding data for Administrator
Where `:file` is the file path. (This path reflects relative `.rb`, `.yml`, or `.json` files located in `ee/db/seeds/data_seeder`, or absolute paths to seed files.)
## Linux package Setup
WARNING:
While it is possible to use the Data Seeder with an Linux package installation, **use caution** if you do this when the instance is being used in a production setting.
1. Change the working directory to the GitLab installation:
```shell
cd /opt/gitlab/embedded/service/gitlab-rails
```
1. Install test resources:
```shell
. scripts/data_seeder/test_resources.sh
```
1. Globalize gems:
```shell
/opt/gitlab/embedded/bin/chpst -e /opt/gitlab/etc/gitlab-rails/env /opt/gitlab/embedded/bin/bundle exec ruby scripts/data_seeder/globalize_gems.rb
```
1. Install bundle:
```shell
/opt/gitlab/embedded/bin/chpst -e /opt/gitlab/etc/gitlab-rails/env /opt/gitlab/embedded/bin/bundle
```
1. Seed the data:
```shell
gitlab-rake "ee:gitlab:seed:data_seeder[beautiful_data.rb]"
```
## Develop
The Data Seeder uses FactoryBot definitions from `spec/factories` which ...
@ -121,7 +156,7 @@ The Data Seeder uses FactoryBot definitions from `spec/factories` which ...
1. Are easy to maintain
1. Do not rely on an API that may change in the future
1. Are always up-to-date
1. Execute on the lowest-level (`ActiveRecord`) possible to create data as quickly as possible
1. Executes on the lowest-level possible ([ORM](https://guides.rubyonrails.org/active_record_basics.html#active-record-as-an-orm-framework)) to create data as quickly as possible
> From the [FactoryBot README](https://github.com/thoughtbot/factory_bot#readme_) : `factory_bot` is a fixtures replacement with a straightforward definition syntax, support for multiple build
> strategies (saved instances, unsaved instances, attribute hashes, and stubbed objects), and support for multiple factories for the same class, including factory

View File

@ -23,6 +23,7 @@ Use CI/CD pipelines to automatically build, test, and deploy your code.
| <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [Understand CI/CD rules](https://www.youtube.com/watch?v=QjQc-zeL16Q) (8m 56s) | Learn more about how to use CI/CD rules. | |
| [Use Auto DevOps to deploy an application](../topics/autodevops/cloud_deployments/auto_devops_with_gke.md) | Deploy an application to Google Kubernetes Engine (GKE). | |
| [Using Buildah in a rootless container with GitLab Runner Operator on OpenShift](../ci/docker/buildah_rootless_tutorial.md) | Learn how to set up GitLab Runner Operator on OpenShift to build Docker images with Buildah in a rootless container | |
| [Set up CI/CD steps](setup_steps/index.md) | Learn how to set up the steps component and configure a CI/CD pipeline to use the step in a job. | |
## Configure GitLab Runner

View File

@ -43,7 +43,7 @@ module Gitlab
# Uses the access token created via `access_token_create_response` as the auth token.
post(
url: url('/auth'),
headers: { 'Authorization': "Bearer #{access_token}" },
headers: { Authorization: "Bearer #{access_token}" },
body: {
username: user.username,
token: otp_code

View File

@ -19,7 +19,7 @@ module Gitlab
ref: "refs/heads/master"
}
],
"refs": ["refs/heads/master"]
refs: ["refs/heads/master"]
}.freeze
# Produce a hash of post-receive data

View File

@ -57,7 +57,7 @@ module Gitlab
def annotate(payload)
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer #{@api_key}"
Authorization: "Bearer #{@api_key}"
}
success = Gitlab::HTTP.post(

View File

@ -65,7 +65,7 @@ module Gitlab
# grpc creates multiple subchannels to all targets retrurned by the resolver. Requests are distributed to
# those subchannels in a round-robin fashion.
# More about client-side load-balancing: https://gitlab.com/groups/gitlab-org/-/epics/8971#note_1207008162
"loadBalancingConfig": [{ "round_robin": {} }],
loadBalancingConfig: [{ round_robin: {} }],
# Enable retries for read-only RPCs. With this setting the client to will resend requests that fail with
# the following conditions:
# 1. An `UNAVAILABLE` status code was received.
@ -73,108 +73,108 @@ module Gitlab
# This allows the client to handle momentary service interruptions without user-facing errors. gRPC's
# automatic 'transparent retries' may also be sent.
# For more information please visit https://github.com/grpc/proposal/blob/master/A6-client-retries.md
'methodConfig': [
methodConfig: [
{
# Gitaly sets an `op_type` `MethodOption` on RPCs to note if it mutates a repository. We cannot
# programatically detect read-only RPCs, i.e. those safe to retry, because Ruby's protobuf
# implementation does not provide access to `MethodOptions`. That feature is being tracked under
# https://github.com/protocolbuffers/protobuf/issues/1198. When that is complete we can replace this
# table.
'name': [
{ 'service': 'gitaly.BlobService', 'method': 'GetBlob' },
{ 'service': 'gitaly.BlobService', 'method': 'GetBlobs' },
{ 'service': 'gitaly.BlobService', 'method': 'GetLFSPointers' },
{ 'service': 'gitaly.BlobService', 'method': 'GetAllLFSPointers' },
{ 'service': 'gitaly.BlobService', 'method': 'ListAllBlobs' },
{ 'service': 'gitaly.BlobService', 'method': 'ListAllLFSPointers' },
{ 'service': 'gitaly.BlobService', 'method': 'ListBlobs' },
{ 'service': 'gitaly.BlobService', 'method': 'ListLFSPointers' },
{ 'service': 'gitaly.CommitService', 'method': 'CheckObjectsExist' },
{ 'service': 'gitaly.CommitService', 'method': 'CommitIsAncestor' },
{ 'service': 'gitaly.CommitService', 'method': 'CommitLanguages' },
{ 'service': 'gitaly.CommitService', 'method': 'CommitStats' },
{ 'service': 'gitaly.CommitService', 'method': 'CommitsByMessage' },
{ 'service': 'gitaly.CommitService', 'method': 'CountCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'CountDivergingCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'FilterShasWithSignatures' },
{ 'service': 'gitaly.CommitService', 'method': 'FindAllCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'FindCommit' },
{ 'service': 'gitaly.CommitService', 'method': 'FindCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'GetCommitMessages' },
{ 'service': 'gitaly.CommitService', 'method': 'GetCommitSignatures' },
{ 'service': 'gitaly.CommitService', 'method': 'GetTreeEntries' },
{ 'service': 'gitaly.CommitService', 'method': 'LastCommitForPath' },
{ 'service': 'gitaly.CommitService', 'method': 'ListAllCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'ListCommits' },
{ 'service': 'gitaly.CommitService', 'method': 'ListCommitsByOid' },
{ 'service': 'gitaly.CommitService', 'method': 'ListCommitsByRefName' },
{ 'service': 'gitaly.CommitService', 'method': 'ListFiles' },
{ 'service': 'gitaly.CommitService', 'method': 'ListLastCommitsForTree' },
{ 'service': 'gitaly.CommitService', 'method': 'RawBlame' },
{ 'service': 'gitaly.CommitService', 'method': 'TreeEntry' },
{ 'service': 'gitaly.ConflictsService', 'method': 'ListConflictFiles' },
{ 'service': 'gitaly.DiffService', 'method': 'CommitDelta' },
{ 'service': 'gitaly.DiffService', 'method': 'CommitDiff' },
{ 'service': 'gitaly.DiffService', 'method': 'DiffStats' },
{ 'service': 'gitaly.DiffService', 'method': 'FindChangedPaths' },
{ 'service': 'gitaly.DiffService', 'method': 'GetPatchID' },
{ 'service': 'gitaly.DiffService', 'method': 'RawDiff' },
{ 'service': 'gitaly.DiffService', 'method': 'RawPatch' },
{ 'service': 'gitaly.ObjectPoolService', 'method': 'GetObjectPool' },
{ 'service': 'gitaly.RefService', 'method': 'FindAllBranches' },
{ 'service': 'gitaly.RefService', 'method': 'FindAllRemoteBranches' },
{ 'service': 'gitaly.RefService', 'method': 'FindAllTags' },
{ 'service': 'gitaly.RefService', 'method': 'FindBranch' },
{ 'service': 'gitaly.RefService', 'method': 'FindDefaultBranchName' },
{ 'service': 'gitaly.RefService', 'method': 'FindLocalBranches' },
{ 'service': 'gitaly.RefService', 'method': 'FindRefsByOID' },
{ 'service': 'gitaly.RefService', 'method': 'FindTag' },
{ 'service': 'gitaly.RefService', 'method': 'GetTagMessages' },
{ 'service': 'gitaly.RefService', 'method': 'GetTagSignatures' },
{ 'service': 'gitaly.RefService', 'method': 'ListBranchNamesContainingCommit' },
{ 'service': 'gitaly.RefService', 'method': 'ListRefs' },
{ 'service': 'gitaly.RefService', 'method': 'ListTagNamesContainingCommit' },
{ 'service': 'gitaly.RefService', 'method': 'RefExists' },
{ 'service': 'gitaly.RemoteService', 'method': 'FindRemoteRepository' },
{ 'service': 'gitaly.RemoteService', 'method': 'FindRemoteRootRef' },
{ 'service': 'gitaly.RemoteService', 'method': 'UpdateRemoteMirror' },
{ 'service': 'gitaly.RepositoryService', 'method': 'BackupCustomHooks' },
{ 'service': 'gitaly.RepositoryService', 'method': 'BackupRepository' },
{ 'service': 'gitaly.RepositoryService', 'method': 'CalculateChecksum' },
{ 'service': 'gitaly.RepositoryService', 'method': 'CreateBundle' },
{ 'service': 'gitaly.RepositoryService', 'method': 'Fsck' },
{ 'service': 'gitaly.RepositoryService', 'method': 'FindLicense' },
{ 'service': 'gitaly.RepositoryService', 'method': 'FindMergeBase' },
{ 'service': 'gitaly.RepositoryService', 'method': 'FullPath' },
{ 'service': 'gitaly.RepositoryService', 'method': 'HasLocalBranches' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetArchive' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetConfig' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetCustomHooks' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetFileAttributes' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetInfoAttributes' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetObject' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetObjectDirectorySize' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetRawChanges' },
{ 'service': 'gitaly.RepositoryService', 'method': 'GetSnapshot' },
{ 'service': 'gitaly.RepositoryService', 'method': 'ObjectSize' },
{ 'service': 'gitaly.RepositoryService', 'method': 'ObjectFormat' },
{ 'service': 'gitaly.RepositoryService', 'method': 'RepositoryExists' },
{ 'service': 'gitaly.RepositoryService', 'method': 'RepositoryInfo' },
{ 'service': 'gitaly.RepositoryService', 'method': 'RepositorySize' },
{ 'service': 'gitaly.RepositoryService', 'method': 'SearchFilesByContent' },
{ 'service': 'gitaly.RepositoryService', 'method': 'SearchFilesByName' },
{ 'service': 'gitaly.ServerService', 'method': 'ClockSynced' },
{ 'service': 'gitaly.ServerService', 'method': 'DiskStatistics' },
{ 'service': 'gitaly.ServerService', 'method': 'ReadinessCheck' },
{ 'service': 'gitaly.ServerService', 'method': 'ServerInfo' },
{ 'service': 'grpc.health.v1.Health', 'method': 'Check' }
name: [
{ service: 'gitaly.BlobService', method: 'GetBlob' },
{ service: 'gitaly.BlobService', method: 'GetBlobs' },
{ service: 'gitaly.BlobService', method: 'GetLFSPointers' },
{ service: 'gitaly.BlobService', method: 'GetAllLFSPointers' },
{ service: 'gitaly.BlobService', method: 'ListAllBlobs' },
{ service: 'gitaly.BlobService', method: 'ListAllLFSPointers' },
{ service: 'gitaly.BlobService', method: 'ListBlobs' },
{ service: 'gitaly.BlobService', method: 'ListLFSPointers' },
{ service: 'gitaly.CommitService', method: 'CheckObjectsExist' },
{ service: 'gitaly.CommitService', method: 'CommitIsAncestor' },
{ service: 'gitaly.CommitService', method: 'CommitLanguages' },
{ service: 'gitaly.CommitService', method: 'CommitStats' },
{ service: 'gitaly.CommitService', method: 'CommitsByMessage' },
{ service: 'gitaly.CommitService', method: 'CountCommits' },
{ service: 'gitaly.CommitService', method: 'CountDivergingCommits' },
{ service: 'gitaly.CommitService', method: 'FilterShasWithSignatures' },
{ service: 'gitaly.CommitService', method: 'FindAllCommits' },
{ service: 'gitaly.CommitService', method: 'FindCommit' },
{ service: 'gitaly.CommitService', method: 'FindCommits' },
{ service: 'gitaly.CommitService', method: 'GetCommitMessages' },
{ service: 'gitaly.CommitService', method: 'GetCommitSignatures' },
{ service: 'gitaly.CommitService', method: 'GetTreeEntries' },
{ service: 'gitaly.CommitService', method: 'LastCommitForPath' },
{ service: 'gitaly.CommitService', method: 'ListAllCommits' },
{ service: 'gitaly.CommitService', method: 'ListCommits' },
{ service: 'gitaly.CommitService', method: 'ListCommitsByOid' },
{ service: 'gitaly.CommitService', method: 'ListCommitsByRefName' },
{ service: 'gitaly.CommitService', method: 'ListFiles' },
{ service: 'gitaly.CommitService', method: 'ListLastCommitsForTree' },
{ service: 'gitaly.CommitService', method: 'RawBlame' },
{ service: 'gitaly.CommitService', method: 'TreeEntry' },
{ service: 'gitaly.ConflictsService', method: 'ListConflictFiles' },
{ service: 'gitaly.DiffService', method: 'CommitDelta' },
{ service: 'gitaly.DiffService', method: 'CommitDiff' },
{ service: 'gitaly.DiffService', method: 'DiffStats' },
{ service: 'gitaly.DiffService', method: 'FindChangedPaths' },
{ service: 'gitaly.DiffService', method: 'GetPatchID' },
{ service: 'gitaly.DiffService', method: 'RawDiff' },
{ service: 'gitaly.DiffService', method: 'RawPatch' },
{ service: 'gitaly.ObjectPoolService', method: 'GetObjectPool' },
{ service: 'gitaly.RefService', method: 'FindAllBranches' },
{ service: 'gitaly.RefService', method: 'FindAllRemoteBranches' },
{ service: 'gitaly.RefService', method: 'FindAllTags' },
{ service: 'gitaly.RefService', method: 'FindBranch' },
{ service: 'gitaly.RefService', method: 'FindDefaultBranchName' },
{ service: 'gitaly.RefService', method: 'FindLocalBranches' },
{ service: 'gitaly.RefService', method: 'FindRefsByOID' },
{ service: 'gitaly.RefService', method: 'FindTag' },
{ service: 'gitaly.RefService', method: 'GetTagMessages' },
{ service: 'gitaly.RefService', method: 'GetTagSignatures' },
{ service: 'gitaly.RefService', method: 'ListBranchNamesContainingCommit' },
{ service: 'gitaly.RefService', method: 'ListRefs' },
{ service: 'gitaly.RefService', method: 'ListTagNamesContainingCommit' },
{ service: 'gitaly.RefService', method: 'RefExists' },
{ service: 'gitaly.RemoteService', method: 'FindRemoteRepository' },
{ service: 'gitaly.RemoteService', method: 'FindRemoteRootRef' },
{ service: 'gitaly.RemoteService', method: 'UpdateRemoteMirror' },
{ service: 'gitaly.RepositoryService', method: 'BackupCustomHooks' },
{ service: 'gitaly.RepositoryService', method: 'BackupRepository' },
{ service: 'gitaly.RepositoryService', method: 'CalculateChecksum' },
{ service: 'gitaly.RepositoryService', method: 'CreateBundle' },
{ service: 'gitaly.RepositoryService', method: 'Fsck' },
{ service: 'gitaly.RepositoryService', method: 'FindLicense' },
{ service: 'gitaly.RepositoryService', method: 'FindMergeBase' },
{ service: 'gitaly.RepositoryService', method: 'FullPath' },
{ service: 'gitaly.RepositoryService', method: 'HasLocalBranches' },
{ service: 'gitaly.RepositoryService', method: 'GetArchive' },
{ service: 'gitaly.RepositoryService', method: 'GetConfig' },
{ service: 'gitaly.RepositoryService', method: 'GetCustomHooks' },
{ service: 'gitaly.RepositoryService', method: 'GetFileAttributes' },
{ service: 'gitaly.RepositoryService', method: 'GetInfoAttributes' },
{ service: 'gitaly.RepositoryService', method: 'GetObject' },
{ service: 'gitaly.RepositoryService', method: 'GetObjectDirectorySize' },
{ service: 'gitaly.RepositoryService', method: 'GetRawChanges' },
{ service: 'gitaly.RepositoryService', method: 'GetSnapshot' },
{ service: 'gitaly.RepositoryService', method: 'ObjectSize' },
{ service: 'gitaly.RepositoryService', method: 'ObjectFormat' },
{ service: 'gitaly.RepositoryService', method: 'RepositoryExists' },
{ service: 'gitaly.RepositoryService', method: 'RepositoryInfo' },
{ service: 'gitaly.RepositoryService', method: 'RepositorySize' },
{ service: 'gitaly.RepositoryService', method: 'SearchFilesByContent' },
{ service: 'gitaly.RepositoryService', method: 'SearchFilesByName' },
{ service: 'gitaly.ServerService', method: 'ClockSynced' },
{ service: 'gitaly.ServerService', method: 'DiskStatistics' },
{ service: 'gitaly.ServerService', method: 'ReadinessCheck' },
{ service: 'gitaly.ServerService', method: 'ServerInfo' },
{ service: 'grpc.health.v1.Health', method: 'Check' }
],
'retryPolicy': {
'maxAttempts': 4, # Initial request, plus up to three retries.
'initialBackoff': '0.4s',
'maxBackoff': '1.4s',
'backoffMultiplier': 2, # Maximum retry duration is 2400ms.
'retryableStatusCodes': ['UNAVAILABLE']
retryPolicy: {
maxAttempts: 4, # Initial request, plus up to three retries.
initialBackoff: '0.4s',
maxBackoff: '1.4s',
backoffMultiplier: 2, # Maximum retry duration is 2400ms.
retryableStatusCodes: ['UNAVAILABLE']
}
}
]

View File

@ -11,7 +11,7 @@ module Gitlab
return {} unless duration_s
{ 'queue_duration_s': duration_s }
{ queue_duration_s: duration_s }
end
end
end

View File

@ -15,7 +15,7 @@ module Gitlab
end
def check_project_availability
options = { headers: headers.merge!('Accept': 'application/json') }
options = { headers: headers.merge!(Accept: 'application/json') }
response = Gitlab::HTTP.head(url("projects?project_name=#{integration.project_name}"), options)
{ success: response.success? }
@ -65,7 +65,7 @@ module Gitlab
auth = Base64.strict_encode64("#{integration.username}:#{integration.password}")
{
'Content-Type': 'application/json',
'Authorization': "Basic #{auth}"
Authorization: "Basic #{auth}"
}
end
end

View File

@ -100,7 +100,7 @@ module Gitlab
end
def series(*matches, start_time: 8.hours.ago, end_time: Time.now)
json_api_get('series', 'match': matches, start: start_time.to_f, end: end_time.to_f)
json_api_get('series', match: matches, start: start_time.to_f, end: end_time.to_f)
end
def self.compute_step(start_time, end_time)

View File

@ -80,7 +80,7 @@ module Gitlab
def headers
{
'Content-Type': 'application/json',
'Token': integration.api_token
Token: integration.api_token
}
end

View File

@ -16,21 +16,21 @@ RSpec.describe QA::Resource::Events::Project do
let(:all_events) do
[
{
"action_name": "pushed",
"push_data": {
"commit_title": "foo commit"
action_name: "pushed",
push_data: {
commit_title: "foo commit"
}
},
{
"action_name": "pushed",
"push_data": {
"ref": "master"
action_name: "pushed",
push_data: {
ref: "master"
}
},
{
"action_name": "pushed",
"push_data": {
"ref": "another-branch"
action_name: "pushed",
push_data: {
ref: "another-branch"
}
}
]