Commit 55eac264 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent 81cd24de30d5
......@@ -8,7 +8,7 @@ module InvisibleCaptcha
end
def on_honeypot_spam_callback
return unless Feature.enabled?(:invisible_captcha) || experiment_enabled?(:signup_flow)
return unless Feature.enabled?(:invisible_captcha)
invisible_captcha_honeypot_counter.increment
log_request('Invisible_Captcha_Honeypot_Request')
......@@ -17,7 +17,7 @@ def on_honeypot_spam_callback
end
def on_timestamp_spam_callback
return unless Feature.enabled?(:invisible_captcha) || experiment_enabled?(:signup_flow)
return unless Feature.enabled?(:invisible_captcha)
invisible_captcha_timestamp_counter.increment
log_request('Invisible_Captcha_Timestamp_Request')
......
......@@ -21,6 +21,8 @@ def create
end
def archive
return render_404 if html_request?
set_cache_headers
return if archive_not_modified?
......
......@@ -763,8 +763,8 @@ def artifacts_expire_in=(value)
end
end
def has_expiring_artifacts?
artifacts_expire_at.present? && artifacts_expire_at > Time.now
def has_expiring_archive_artifacts?
has_expiring_artifacts? && job_artifacts_archive.present?
end
def keep_artifacts!
......@@ -979,6 +979,10 @@ def options_retry
value.with_indifferent_access
end
end
def has_expiring_artifacts?
artifacts_expire_at.present? && artifacts_expire_at > Time.now
end
end
end
......
......@@ -15,7 +15,7 @@ class BuildArtifactEntity < Grape::Entity
fast_download_project_job_artifacts_path(project, job)
end
expose :keep_path, if: -> (*) { job.has_expiring_artifacts? } do |job|
expose :keep_path, if: -> (*) { job.has_expiring_archive_artifacts? } do |job|
fast_keep_project_job_artifacts_path(project, job)
end
......
......@@ -31,7 +31,7 @@ class BuildDetailsEntity < JobEntity
browse_project_job_artifacts_path(project, build)
end
expose :keep_path, if: -> (*) { build.has_expiring_artifacts? && can?(current_user, :update_build, build) } do |build|
expose :keep_path, if: -> (*) { build.has_expiring_archive_artifacts? && can?(current_user, :update_build, build) } do |build|
keep_project_job_artifacts_path(project, build)
end
......
......@@ -58,7 +58,8 @@ def preloaded_relations
pending_builds: :project,
project: [:route, { namespace: :route }],
artifacts: {
project: [:route, { namespace: :route }]
project: [:route, { namespace: :route }],
job_artifacts_archive: []
}
},
{ triggered_by_pipeline: [:project, :user] },
......
......@@ -29,11 +29,11 @@ def execute
private
def import_failure_service
@import_failure_service ||= Gitlab::ImportExport::ImportFailureService.new(@project)
Gitlab::ImportExport::ImportFailureService.new(@project)
end
def repository
@repository ||= @project.repository
@project.repository
end
end
end
......@@ -13,7 +13,7 @@
:feature_category: :continuous_delivery
:has_external_dependencies:
:latency_sensitive:
:resource_boundary: :unknown
:resource_boundary: :cpu
:weight: 3
- :name: chaos:chaos_cpu_spin
:feature_category: :chaos_engineering
......
......@@ -5,6 +5,7 @@ class AutoMergeProcessWorker
queue_namespace :auto_merge
feature_category :continuous_delivery
worker_resource_boundary :cpu
def perform(merge_request_id)
MergeRequest.find_by_id(merge_request_id).try do |merge_request|
......
---
title: Return 404 when repository archive cannot be retrieved
merge_request: 23926
author:
type: fixed
---
title: Remove keep button for non archive artifacts
merge_request: 23762
author:
type: fixed
---
title: Use state machine in Merge Train to avoid race conditions
merge_request: 23395
author:
type: fixed
# frozen_string_literal: true
class AddDurationToMergeTrains < ActiveRecord::Migration[5.2]
DOWNTIME = false
def change
add_column :merge_trains, :merged_at, :datetime_with_timezone
add_column :merge_trains, :duration, :integer
end
end
......@@ -2624,6 +2624,8 @@
t.integer "target_project_id", null: false
t.text "target_branch", null: false
t.integer "status", limit: 2, default: 0, null: false
t.datetime_with_timezone "merged_at"
t.integer "duration"
t.index ["merge_request_id"], name: "index_merge_trains_on_merge_request_id", unique: true
t.index ["pipeline_id"], name: "index_merge_trains_on_pipeline_id"
t.index ["target_project_id", "target_branch", "status"], name: "index_for_status_per_branch_per_project"
......
......@@ -5,7 +5,6 @@
describe ConfirmEmailWarning do
before do
stub_feature_flags(soft_email_confirmation: true)
allow(User).to receive(:allow_unconfirmed_access_for).and_return 2.days
end
controller(ApplicationController) do
......@@ -52,15 +51,6 @@ def index
context 'with an unconfirmed user' do
let(:user) { create(:user, confirmed_at: nil) }
context 'when executing a peek request' do
before do
request.path = '/-/peek'
get :index
end
it { is_expected.not_to set_confirm_warning_for(user.email) }
end
context 'when executing a json request' do
before do
get :index, format: :json
......
......@@ -88,6 +88,14 @@
end
end
context "when the request format is HTML" do
it "renders 404" do
get :archive, params: { namespace_id: project.namespace, project_id: project, id: 'master' }, format: "html"
expect(response).to have_gitlab_http_status(:not_found)
end
end
describe 'caching' do
it 'sets appropriate caching headers' do
get_archive
......
......@@ -4,7 +4,7 @@
describe "User deletes branch", :js do
set(:user) { create(:user) }
set(:project) { create(:project, :repository) }
let(:project) { create(:project, :repository) }
before do
project.add_developer(user)
......@@ -20,6 +20,8 @@
accept_alert { find(".btn-remove").click }
end
wait_for_requests
expect(page).to have_css(".js-branch-improve\\/awesome", visible: :hidden)
end
end
......@@ -2338,14 +2338,24 @@ def create_mr(build, pipeline, factory: :merge_request, created_at: Time.now)
end
end
describe '#has_expiring_artifacts?' do
describe '#has_expiring_archive_artifacts?' do
context 'when artifacts have expiration date set' do
before do
build.update(artifacts_expire_at: 1.day.from_now)
end
it 'has expiring artifacts' do
expect(build).to have_expiring_artifacts
context 'and job artifacts archive record exists' do
let!(:archive) { create(:ci_job_artifact, :archive, job: build) }
it 'has expiring artifacts' do
expect(build).to have_expiring_archive_artifacts
end
end
context 'and job artifacts archive record does not exist' do
it 'does not have expiring artifacts' do
expect(build).not_to have_expiring_archive_artifacts
end
end
end
......@@ -2355,7 +2365,7 @@ def create_mr(build, pipeline, factory: :merge_request, created_at: Time.now)
end
it 'does not have expiring artifacts' do
expect(build).not_to have_expiring_artifacts
expect(build).not_to have_expiring_archive_artifacts
end
end
end
......
......@@ -3,7 +3,7 @@
require 'spec_helper'
describe BuildArtifactEntity do
let(:job) { create(:ci_build, name: 'test:job', artifacts_expire_at: 1.hour.from_now) }
let(:job) { create(:ci_build, :artifacts, name: 'test:job', artifacts_expire_at: 1.hour.from_now) }
let(:entity) do
described_class.new(job, request: double)
......
......@@ -176,5 +176,22 @@
expect(subject[:reports].first[:file_type]).to eq('codequality')
end
end
context 'when the build has no archive type artifacts' do
let!(:report) { create(:ci_job_artifact, :codequality, job: build) }
it 'does not expose any artifact actions path' do
expect(subject[:artifact].keys).not_to include(:download_path, :browse_path, :keep_path)
end
end
context 'when the build has archive type artifacts' do
let!(:build) { create(:ci_build, :artifacts, artifacts_expire_at: 7.days.from_now) }
let!(:report) { create(:ci_job_artifact, :codequality, job: build) }
it 'exposes artifact details' do
expect(subject[:artifact].keys).to include(:download_path, :browse_path, :keep_path, :expire_at, :expired)
end
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment