Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
9c33625b8e
commit
e28bb9d181
|
@ -84,7 +84,7 @@ variables:
|
|||
GIT_SUBMODULE_STRATEGY: "none"
|
||||
GET_SOURCES_ATTEMPTS: "3"
|
||||
DEBIAN_VERSION: "bullseye"
|
||||
CHROME_VERSION: "101"
|
||||
CHROME_VERSION: "103"
|
||||
DOCKER_VERSION: "20.10.14"
|
||||
RUBY_VERSION: "2.7"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.qa-job-base:
|
||||
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-2.7:bundler-2.3-git-2.33-chrome-${CHROME_VERSION}
|
||||
image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-2.7:bundler-2.3-chrome-103-docker-20.10.14
|
||||
extends:
|
||||
- .default-retry
|
||||
- .qa-cache
|
||||
|
|
|
@ -37,13 +37,20 @@ Add details for required items and delete others.
|
|||
|
||||
## 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.
|
||||
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
|
||||
- [ ] `@person` Step 1a
|
||||
- [ ] ~frontend Step 2
|
||||
|
||||
-->
|
||||
|
|
2
Gemfile
2
Gemfile
|
@ -168,7 +168,7 @@ gem 'asciidoctor', '~> 2.0.10'
|
|||
gem 'asciidoctor-include-ext', '~> 0.4.0', require: false
|
||||
gem 'asciidoctor-plantuml', '~> 0.0.12'
|
||||
gem 'asciidoctor-kroki', '~> 0.5.0', require: false
|
||||
gem 'rouge', '~> 3.29.0'
|
||||
gem 'rouge', '~> 3.30.0'
|
||||
gem 'truncato', '~> 0.7.11'
|
||||
gem 'bootstrap_form', '~> 4.2.0'
|
||||
gem 'nokogiri', '~> 1.13.6'
|
||||
|
|
|
@ -1126,7 +1126,7 @@ GEM
|
|||
rexml (3.2.5)
|
||||
rinku (2.0.0)
|
||||
rotp (6.2.0)
|
||||
rouge (3.29.0)
|
||||
rouge (3.30.0)
|
||||
rqrcode (0.7.0)
|
||||
chunky_png
|
||||
rqrcode-rails3 (0.1.7)
|
||||
|
@ -1699,7 +1699,7 @@ DEPENDENCIES
|
|||
responders (~> 3.0)
|
||||
retriable (~> 3.1.2)
|
||||
rexml (~> 3.2.5)
|
||||
rouge (~> 3.29.0)
|
||||
rouge (~> 3.30.0)
|
||||
rqrcode-rails3 (~> 0.1.7)
|
||||
rspec-benchmark (~> 0.6.0)
|
||||
rspec-parameterized
|
||||
|
|
|
@ -59,7 +59,11 @@ export default {
|
|||
<tooltip-on-truncate class="gl-display-block gl-text-truncate" :title="description">
|
||||
{{ description }}
|
||||
</tooltip-on-truncate>
|
||||
<tooltip-on-truncate class="gl-display-block gl-text-truncate" :title="ipAddress">
|
||||
<tooltip-on-truncate
|
||||
v-if="ipAddress"
|
||||
class="gl-display-block gl-text-truncate"
|
||||
:title="ipAddress"
|
||||
>
|
||||
<span class="gl-md-display-none gl-lg-display-inline">{{ __('IP Address') }}</span>
|
||||
<strong>{{ ipAddress }}</strong>
|
||||
</tooltip-on-truncate>
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Projects
|
||||
class ProjectArchivedEvent < ::Gitlab::EventStore::Event
|
||||
def schema
|
||||
{
|
||||
'type' => 'object',
|
||||
'properties' => {
|
||||
'project_id' => { 'type' => 'integer' },
|
||||
'namespace_id' => { 'type' => 'integer' },
|
||||
'root_namespace_id' => { 'type' => 'integer' }
|
||||
},
|
||||
'required' => %w[project_id namespace_id root_namespace_id]
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -15,7 +15,7 @@ class LfsObject < ApplicationRecord
|
|||
scope :for_oids, -> (oids) { where(oid: oids) }
|
||||
scope :for_oid_and_size, -> (oid, size) { find_by(oid: oid, size: size) }
|
||||
|
||||
validates :oid, presence: true, uniqueness: true
|
||||
validates :oid, presence: true, uniqueness: true, format: { with: /\A\h{64}\z/ }
|
||||
|
||||
mount_file_store_uploader LfsObjectUploader
|
||||
|
||||
|
|
|
@ -121,6 +121,8 @@ module Projects
|
|||
end
|
||||
|
||||
update_pending_builds if runners_settings_toggled?
|
||||
|
||||
publish_event
|
||||
end
|
||||
|
||||
def after_rename_service(project)
|
||||
|
@ -209,6 +211,18 @@ module Projects
|
|||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def publish_event
|
||||
return unless project.archived_previously_changed?
|
||||
|
||||
event = Projects::ProjectArchivedEvent.new(data: {
|
||||
project_id: @project.id,
|
||||
namespace_id: @project.namespace_id,
|
||||
root_namespace_id: @project.root_namespace.id
|
||||
})
|
||||
|
||||
Gitlab::EventStore.publish(event)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: archive_rate_limit
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/25750
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369432
|
||||
milestone: '12.9'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: async_commit_diff_files
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38450
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369439
|
||||
milestone: '13.3'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: branch_list_keyset_pagination
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35819
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369435
|
||||
milestone: '13.2'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: increase_page_size_exponentially
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66174
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369434
|
||||
milestone: '14.1'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: json_wrapper_legacy_mode
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/30849
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369436
|
||||
milestone: '13.0'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: repository_archive_hotlinking_interception
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/50c11f278d18fe1f3fb12eb595067216bb58ade2
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369433
|
||||
milestone: '12.10'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: unlink_fork_network_upon_visibility_decrease
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20466
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369438
|
||||
milestone: '12.6'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: workhorse_archive_cache_disabled
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/16325
|
||||
rollout_issue_url:
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/369437
|
||||
milestone: '10.5'
|
||||
type: development
|
||||
group: group::source code
|
||||
|
|
|
@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
Service Ping consists of two kinds of data:
|
||||
|
||||
- **Counters**: Track how often a certain event happened over time, such as how many CI/CD pipelines have run.
|
||||
They are monotonic and always trend up.
|
||||
They are monotonic and usually trend up.
|
||||
- **Observations**: Facts collected from one or more GitLab instances and can carry arbitrary data.
|
||||
There are no general guidelines for how to collect those, due to the individual nature of that data.
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ for the most popular hosting services:
|
|||
|
||||
<!-- vale gitlab.Spelling = NO -->
|
||||
|
||||
- [123-reg](https://www.123-reg.co.uk/support/domains/domain-name-server-dns-management-guide/)
|
||||
- [Amazon](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)
|
||||
- [Bluehost](https://www.bluehost.com/help/article/dns-management-add-edit-or-delete-dns-entries)
|
||||
- [Cloudflare](https://support.cloudflare.com/hc/en-us/articles/201720164-Creating-a-Cloudflare-account-and-adding-a-website)
|
||||
|
|
|
@ -29,16 +29,20 @@ module Gitlab
|
|||
# @param [String] path Directory path the dump will be put into
|
||||
# @param [String] format `json` or `txt`
|
||||
# @param [String] filename_label Optional custom string that will be injected into the file name, e.g. `worker_0`
|
||||
# @return [void]
|
||||
# @return [String] Full path to the resulting dump file
|
||||
def dump_stats(path:, format: STATS_DEFAULT_FORMAT, filename_label: nil)
|
||||
verify_format!(format)
|
||||
|
||||
with_malloc_stats_print do |stats_print|
|
||||
format_settings = STATS_FORMATS[format]
|
||||
File.open(File.join(path, file_name(format_settings[:extension], filename_label)), 'wb') do |io|
|
||||
file_path = File.join(path, file_name(format_settings[:extension], filename_label))
|
||||
|
||||
with_malloc_stats_print do |stats_print|
|
||||
File.open(file_path, 'wb') do |io|
|
||||
write_stats(stats_print, io, format_settings)
|
||||
end
|
||||
end
|
||||
|
||||
file_path
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -23,8 +23,7 @@ module Gitlab
|
|||
def run
|
||||
return unless active?
|
||||
|
||||
Gitlab::Memory::Jemalloc.dump_stats(path: reports_path, filename_label: worker_id)
|
||||
cleanup
|
||||
Gitlab::Memory::Jemalloc.dump_stats(path: reports_path, filename_label: worker_id).tap { cleanup }
|
||||
end
|
||||
|
||||
def active?
|
||||
|
|
|
@ -39,12 +39,12 @@ module Gitlab
|
|||
start_monotonic_time = Gitlab::Metrics::System.monotonic_time
|
||||
start_thread_cpu_time = Gitlab::Metrics::System.thread_cpu_time
|
||||
|
||||
report.run
|
||||
file_path = report.run
|
||||
|
||||
cpu_s = Gitlab::Metrics::System.thread_cpu_duration(start_thread_cpu_time)
|
||||
duration_s = Gitlab::Metrics::System.monotonic_time - start_monotonic_time
|
||||
|
||||
log_report(label: report_label(report), cpu_s: cpu_s, duration_s: duration_s)
|
||||
log_report(label: report_label(report), cpu_s: cpu_s, duration_s: duration_s, size: file_size(file_path))
|
||||
@report_duration_counter.increment({ report: report_label(report) }, duration_s)
|
||||
|
||||
sleep sleep_between_reports_s
|
||||
|
@ -62,14 +62,15 @@ module Gitlab
|
|||
sleep_s + rand(sleep_max_delta_s)
|
||||
end
|
||||
|
||||
def log_report(label:, duration_s:, cpu_s:)
|
||||
def log_report(label:, duration_s:, cpu_s:, size:)
|
||||
Gitlab::AppLogger.info(
|
||||
message: 'finished',
|
||||
pid: $$,
|
||||
worker_id: worker_id,
|
||||
perf_report: label,
|
||||
duration_s: duration_s.round(2),
|
||||
cpu_s: cpu_s.round(2)
|
||||
cpu_s: cpu_s.round(2),
|
||||
perf_report_size_bytes: size
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -94,6 +95,12 @@ module Gitlab
|
|||
default_labels
|
||||
)
|
||||
end
|
||||
|
||||
def file_size(file_path)
|
||||
File.size(file_path.to_s)
|
||||
rescue Errno::ENOENT
|
||||
0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
"codesandbox-api": "0.0.23",
|
||||
"compression-webpack-plugin": "^5.0.2",
|
||||
"copy-webpack-plugin": "^6.4.1",
|
||||
"core-js": "^3.24.0",
|
||||
"core-js": "^3.24.1",
|
||||
"cron-validator": "^1.1.1",
|
||||
"cronstrue": "^1.122.0",
|
||||
"cropper": "^2.3.0",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
ARG DOCKER_VERSION=20.10.14
|
||||
ARG CHROME_VERSION=101
|
||||
ARG CHROME_VERSION=103
|
||||
ARG QA_BUILD_TARGET=qa
|
||||
|
||||
FROM registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-2.7:bundler-2.3-git-2.33-lfs-2.9-chrome-${CHROME_VERSION}-docker-${DOCKER_VERSION}-gcloud-383-kubectl-1.23 AS qa
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Projects::ProjectArchivedEvent do
|
||||
subject(:constructor) { described_class.new(data: data) }
|
||||
|
||||
where(:data, :valid) do
|
||||
valid_event = {
|
||||
project_id: 1,
|
||||
namespace_id: 2,
|
||||
root_namespace_id: 3
|
||||
}
|
||||
|
||||
# All combinations of missing keys
|
||||
with_missing_keys = 0.upto(valid_event.size - 1)
|
||||
.flat_map { |size| valid_event.keys.combination(size).to_a }
|
||||
.map { |keys| [valid_event.slice(*keys), false] }
|
||||
|
||||
[
|
||||
[valid_event, true],
|
||||
*with_missing_keys,
|
||||
[{ project_id: 'foo', namespace_id: 2 }, false],
|
||||
[{ project_id: 1, namespace_id: 'foo' }, false],
|
||||
[{ project_id: [], namespace_id: 2 }, false],
|
||||
[{ project_id: 1, namespace_id: [] }, false],
|
||||
[{ project_id: {}, namespace_id: 2 }, false],
|
||||
[{ project_id: 1, namespace_id: {} }, false],
|
||||
['foo', false],
|
||||
[123, false],
|
||||
[[], false]
|
||||
]
|
||||
end
|
||||
|
||||
with_them do
|
||||
it 'validates data' do
|
||||
if valid
|
||||
expect { constructor }.not_to raise_error
|
||||
else
|
||||
expect { constructor }.to raise_error(Gitlab::EventStore::InvalidEvent)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,3 +1,4 @@
|
|||
import { __ } from '~/locale';
|
||||
import { mountExtended } from 'helpers/vue_test_utils_helper';
|
||||
import RunnerSummaryCell from '~/runner/components/cells/runner_summary_cell.vue';
|
||||
import { INSTANCE_TYPE, PROJECT_TYPE } from '~/runner/constants';
|
||||
|
@ -61,8 +62,16 @@ describe('RunnerTypeCell', () => {
|
|||
expect(wrapper.text()).toContain(mockDescription);
|
||||
});
|
||||
|
||||
it('Displays the runner ip address', () => {
|
||||
expect(wrapper.text()).toContain(mockIpAddress);
|
||||
it('Displays ip address', () => {
|
||||
expect(wrapper.text()).toContain(`${__('IP Address')} ${mockIpAddress}`);
|
||||
});
|
||||
|
||||
it('Displays no ip address', () => {
|
||||
createComponent({
|
||||
ipAddress: null,
|
||||
});
|
||||
|
||||
expect(wrapper.text()).not.toContain(__('IP Address'));
|
||||
});
|
||||
|
||||
it('Displays a custom slot', () => {
|
||||
|
|
|
@ -10,7 +10,7 @@ RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do
|
|||
|
||||
let(:lfs_attributes) do
|
||||
{
|
||||
oid: 'oid',
|
||||
oid: 'a' * 64,
|
||||
size: 1,
|
||||
link: 'http://www.gitlab.com/lfs_objects/oid'
|
||||
}
|
||||
|
|
|
@ -28,11 +28,12 @@ RSpec.describe Gitlab::Memory::Jemalloc do
|
|||
|
||||
describe '.dump_stats' do
|
||||
it 'writes stats JSON file' do
|
||||
described_class.dump_stats(path: outdir, format: format)
|
||||
file_path = described_class.dump_stats(path: outdir, format: format)
|
||||
|
||||
file = Dir.entries(outdir).find { |e| e.match(/jemalloc_stats\.#{$$}\.\d+\.json$/) }
|
||||
expect(file).not_to be_nil
|
||||
expect(File.read(File.join(outdir, file))).to eq(output)
|
||||
expect(file_path).to eq(File.join(outdir, file))
|
||||
expect(File.read(file_path)).to eq(output)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,34 +3,24 @@
|
|||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Gitlab::Memory::Reports::JemallocStats do
|
||||
let(:jemalloc_stats) { described_class.new(reports_path: '/empty-dir') }
|
||||
let(:reports_dir) {'/empty-dir'}
|
||||
let(:jemalloc_stats) { described_class.new(reports_path: reports_dir) }
|
||||
|
||||
describe '.run' do
|
||||
context 'when :report_jemalloc_stats ops FF is enabled' do
|
||||
let(:worker_id) { 'puma_1' }
|
||||
let(:worker_id) {'puma_1'}
|
||||
let(:report_name) {'report.json'}
|
||||
let(:report_path) { File.join(reports_dir, report_name) }
|
||||
|
||||
before do
|
||||
allow(Prometheus::PidProvider).to receive(:worker_id).and_return(worker_id)
|
||||
end
|
||||
|
||||
context 'when GITLAB_DIAGNOSTIC_REPORTS_PATH env var is set' do
|
||||
let(:reports_dir) { '/empty-dir' }
|
||||
it 'invokes Jemalloc.dump_stats and returns file path' do
|
||||
expect(Gitlab::Memory::Jemalloc)
|
||||
.to receive(:dump_stats).with(path: reports_dir, filename_label: worker_id).and_return(report_path)
|
||||
|
||||
before do
|
||||
stub_env('GITLAB_DIAGNOSTIC_REPORTS_PATH', reports_dir)
|
||||
end
|
||||
|
||||
it 'writes reports into custom dir while enabled' do
|
||||
expect(Gitlab::Memory::Jemalloc).to receive(:dump_stats).with(path: reports_dir, filename_label: worker_id)
|
||||
|
||||
jemalloc_stats.run
|
||||
end
|
||||
end
|
||||
|
||||
it 'writes reports into default dir while enabled' do
|
||||
expect(Gitlab::Memory::Jemalloc).to receive(:dump_stats).with(path: '/empty-dir', filename_label: worker_id)
|
||||
|
||||
jemalloc_stats.run
|
||||
expect(jemalloc_stats.run).to eq(report_path)
|
||||
end
|
||||
|
||||
describe 'reports cleanup' do
|
||||
|
@ -108,10 +98,10 @@ RSpec.describe Gitlab::Memory::Reports::JemallocStats do
|
|||
stub_feature_flags(report_jemalloc_stats: false)
|
||||
end
|
||||
|
||||
it 'does not run the report' do
|
||||
it 'does not run the report and returns nil' do
|
||||
expect(Gitlab::Memory::Jemalloc).not_to receive(:dump_stats)
|
||||
|
||||
jemalloc_stats.run
|
||||
expect(jemalloc_stats.run).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,6 +7,7 @@ RSpec.describe Gitlab::Memory::ReportsDaemon do
|
|||
|
||||
describe '#run_thread' do
|
||||
let(:report_duration_counter) { instance_double(::Prometheus::Client::Counter) }
|
||||
let(:file_size) { 1_000_000 }
|
||||
|
||||
before do
|
||||
allow(Gitlab::Metrics).to receive(:counter).and_return(report_duration_counter)
|
||||
|
@ -17,10 +18,12 @@ RSpec.describe Gitlab::Memory::ReportsDaemon do
|
|||
|
||||
# let alive return 3 times: true, true, false
|
||||
allow(daemon).to receive(:alive).and_return(true, true, false)
|
||||
|
||||
allow(File).to receive(:size).with(/#{daemon.reports_path}.*\.json/).and_return(file_size)
|
||||
end
|
||||
|
||||
it 'runs reports' do
|
||||
expect(daemon.send(:reports)).to all(receive(:run).twice)
|
||||
expect(daemon.send(:reports)).to all(receive(:run).twice.and_call_original)
|
||||
|
||||
daemon.send(:run_thread)
|
||||
end
|
||||
|
@ -32,6 +35,7 @@ RSpec.describe Gitlab::Memory::ReportsDaemon do
|
|||
hash_including(
|
||||
:duration_s,
|
||||
:cpu_s,
|
||||
perf_report_size_bytes: file_size,
|
||||
message: 'finished',
|
||||
pid: Process.pid,
|
||||
worker_id: 'worker_1',
|
||||
|
@ -41,6 +45,18 @@ RSpec.describe Gitlab::Memory::ReportsDaemon do
|
|||
daemon.send(:run_thread)
|
||||
end
|
||||
|
||||
context 'when the report object returns invalid file path' do
|
||||
before do
|
||||
allow(File).to receive(:size).with(/#{daemon.reports_path}.*\.json/).and_raise(Errno::ENOENT)
|
||||
end
|
||||
|
||||
it 'logs `0` as `perf_report_size_bytes`' do
|
||||
expect(Gitlab::AppLogger).to receive(:info).with(hash_including(perf_report_size_bytes: 0)).twice
|
||||
|
||||
daemon.send(:run_thread)
|
||||
end
|
||||
end
|
||||
|
||||
it 'sets real time duration gauge' do
|
||||
expect(report_duration_counter).to receive(:increment).with({ report: 'jemalloc_stats' }, an_instance_of(Float))
|
||||
|
||||
|
@ -58,8 +74,8 @@ RSpec.describe Gitlab::Memory::ReportsDaemon do
|
|||
|
||||
allow(daemon).to receive(:reports).and_return([active_report_1, inactive_report, active_report_2])
|
||||
|
||||
expect(active_report_1).to receive(:run).twice
|
||||
expect(active_report_2).to receive(:run).twice
|
||||
expect(active_report_1).to receive(:run).and_return('/tmp/report_1.json').twice
|
||||
expect(active_report_2).to receive(:run).and_return('/tmp/report_2.json').twice
|
||||
expect(inactive_report).not_to receive(:run)
|
||||
|
||||
daemon.send(:run_thread)
|
||||
|
|
|
@ -193,9 +193,9 @@ RSpec.describe LfsObject do
|
|||
end
|
||||
|
||||
describe '.unreferenced_in_batches' do
|
||||
let!(:unreferenced_lfs_object1) { create(:lfs_object, oid: '1') }
|
||||
let!(:unreferenced_lfs_object1) { create(:lfs_object, oid: '1' * 64) }
|
||||
let!(:referenced_lfs_object) { create(:lfs_objects_project).lfs_object }
|
||||
let!(:unreferenced_lfs_object2) { create(:lfs_object, oid: '2') }
|
||||
let!(:unreferenced_lfs_object2) { create(:lfs_object, oid: '2' * 64) }
|
||||
|
||||
it 'returns lfs objects in batches' do
|
||||
stub_const('LfsObject::BATCH_SIZE', 1)
|
||||
|
|
|
@ -348,6 +348,18 @@ RSpec.describe Projects::UpdateService do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when archiving a project' do
|
||||
it 'publishes a ProjectTransferedEvent' do
|
||||
expect { update_project(project, user, archived: true) }
|
||||
.to publish_event(Projects::ProjectArchivedEvent)
|
||||
.with(
|
||||
project_id: project.id,
|
||||
namespace_id: project.namespace_id,
|
||||
root_namespace_id: project.root_namespace.id
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when changing operations feature visibility' do
|
||||
let(:feature_params) { { operations_access_level: ProjectFeature::DISABLED } }
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@ RSpec.describe RemoveUnreferencedLfsObjectsWorker do
|
|||
let(:worker) { described_class.new }
|
||||
|
||||
describe '#perform' do
|
||||
let!(:unreferenced_lfs_object1) { create(:lfs_object, oid: '1') }
|
||||
let!(:unreferenced_lfs_object2) { create(:lfs_object, oid: '2') }
|
||||
let!(:unreferenced_lfs_object1) { create(:lfs_object, oid: '1' * 64) }
|
||||
let!(:unreferenced_lfs_object2) { create(:lfs_object, oid: '2' * 64) }
|
||||
let!(:project1) { create(:project, lfs_enabled: true) }
|
||||
let!(:project2) { create(:project, lfs_enabled: true) }
|
||||
let!(:referenced_lfs_object1) { create(:lfs_object, oid: '3') }
|
||||
let!(:referenced_lfs_object2) { create(:lfs_object, oid: '4') }
|
||||
let!(:referenced_lfs_object1) { create(:lfs_object, oid: '3' * 64) }
|
||||
let!(:referenced_lfs_object2) { create(:lfs_object, oid: '4' * 64) }
|
||||
let!(:lfs_objects_project1_1) do
|
||||
create(:lfs_objects_project,
|
||||
project: project1,
|
||||
|
|
|
@ -3729,10 +3729,10 @@ core-js-pure@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
|
||||
integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
|
||||
|
||||
core-js@^3.24.0:
|
||||
version "3.24.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.0.tgz#4928d4e99c593a234eb1a1f9abd3122b04d3ac57"
|
||||
integrity sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ==
|
||||
core-js@^3.24.1:
|
||||
version "3.24.1"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f"
|
||||
integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==
|
||||
|
||||
core-js@~2.3.0:
|
||||
version "2.3.0"
|
||||
|
|
Loading…
Reference in New Issue