spec/lib/tasks/monthly_rake_spec.rb (147 lines of code) (raw):
# frozen_string_literal: true
require 'rake_helper'
describe 'monthly tasks', :rake do
describe 'finalize:start', task: 'monthly:finalize:start' do
it 'starts the finalize stage' do
expect(ReleaseTools::Slack::ReleasePipelineStartNotifier).to receive(:new).with(release_type: :monthly, stage: :finalize)
.and_return(instance_double(ReleaseTools::Slack::ReleasePipelineStartNotifier, execute: true))
task.invoke
end
end
describe 'update_protected_branches', task: 'monthly:finalize:update_protected_branches' do
it 'disables omnibus nightly' do
expect(ReleaseTools::Monthly::Finalize::UpdateProtectedBranches).to receive(:new)
.and_return(instance_double(ReleaseTools::Monthly::Finalize::UpdateProtectedBranches, execute: true))
task.invoke
end
end
describe 'finalize:create_release_status_metric', task: 'monthly:finalize:create_release_status_metric' do
it 'creates a new release status metric with open status' do
expect(ReleaseTools::Metrics::MonthlyReleaseStatus).to receive(:new).with(status: :open)
.and_return(instance_double(ReleaseTools::Metrics::MonthlyReleaseStatus, execute: true))
task.invoke
end
end
describe 'finalize:create_version', task: 'monthly:finalize:create_version' do
before do
allow(GitlabReleases)
.to receive(:active_version)
.and_return("17.0.0")
end
it 'creates a new version on version.gitlab.com' do
expect(ReleaseTools::Services::CreateVersionService)
.to receive(:new)
.with(version: "17.0.0")
.and_return(instance_double(ReleaseTools::Services::CreateVersionService, execute: true))
task.invoke
end
end
describe 'initial_rc:start', task: 'monthly:initial_rc:start' do
it 'starts the initial RC creation stage' do
expect(ReleaseTools::Slack::ReleasePipelineStartNotifier).to receive(:new).with(release_type: :monthly, stage: :initial_rc)
.and_return(instance_double(ReleaseTools::Slack::ReleasePipelineStartNotifier, execute: true))
task.invoke
end
end
describe 'tag_day:check_omnibus_packages_tagging', task: 'monthly:tag_day:check_omnibus_packages_tagging' do
before do
allow(GitlabReleases)
.to receive(:active_version)
.and_return("17.0.0")
end
it 'calls ReleaseTools::Services::OmnibusPackages::Tagging with the correct version' do
expect(ReleaseTools::Services::OmnibusPackages::Tagging)
.to receive(:new)
.with(version: "17.0.0")
.and_return(instance_double(ReleaseTools::Services::OmnibusPackages::Tagging, execute: true))
task.invoke
end
end
describe 'tag_day:ensure_stable_branches_green', task: 'monthly:tag_day:ensure_stable_branches_green' do
it 'ensures stable branches are green' do
expect(ReleaseTools::Monthly::TagDay::ComponentBranchVerifier).to receive(:new)
.and_return(instance_double(ReleaseTools::Monthly::TagDay::ComponentBranchVerifier, execute: true))
task.invoke
end
end
describe 'release_day:start', task: 'monthly:release_day:start' do
it 'starts the release day stage' do
expect(ReleaseTools::Slack::ReleasePipelineStartNotifier).to receive(:new).with(release_type: :monthly, stage: :release_day)
.and_return(instance_double(ReleaseTools::Slack::ReleasePipelineStartNotifier, execute: true))
task.invoke
end
end
describe 'release_day:notify_release_publish', task: 'monthly:release_day:notify_release_publish' do
it 'sends a slack notification that the release packages will be published' do
expect(ReleaseTools::Monthly::ReleaseDay::NotifyReleasePublish).to receive(:new)
.and_return(instance_double(ReleaseTools::Monthly::ReleaseDay::NotifyReleasePublish, execute: true))
task.invoke
end
end
describe 'release_day:start_publish', task: 'monthly:release_day:start_publish' do
it 'starts the release day stage' do
expect(ReleaseTools::Slack::ReleasePipelineStartNotifier).to receive(:new).with(release_type: :monthly, stage: :publish)
.and_return(instance_double(ReleaseTools::Slack::ReleasePipelineStartNotifier, execute: true))
task.invoke
end
end
describe 'release_day:publish', task: 'monthly:release_day:publish' do
let(:version) { instance_double(ReleaseTools::Version) }
before do
allow(ReleaseTools::Version).to receive(:new).and_return(version)
allow(GitlabReleases).to receive(:active_version).and_return('16.0.0')
end
it 'starts the release day stage' do
expect(ReleaseTools::Tasks::Release::Publish).to receive(:new)
.with(version)
.and_return(instance_double(ReleaseTools::Tasks::Release::Publish, execute: true))
task.invoke
end
end
describe 'verify:start', task: 'monthly:verify:start' do
it 'starts the verification stage' do
expect(ReleaseTools::Slack::ReleasePipelineStartNotifier).to receive(:new).with(release_type: :monthly, stage: :verify)
.and_return(instance_double(ReleaseTools::Slack::ReleasePipelineStartNotifier, execute: true))
task.invoke
end
end
describe 'verify:check_omnibus_packages_publishing', task: 'monthly:verify:check_omnibus_packages_publishing' do
it 'Check packages are published by checking `check-packages-availability` job' do
allow(GitlabReleases).to receive(:active_version).and_return("16.0")
allow(ReleaseTools::Version).to receive(:new).with(GitlabReleases.active_version).and_return("16.0.0")
version = ReleaseTools::Version.new(GitlabReleases.active_version)
expect(ReleaseTools::Services::OmnibusPackages::Publishing).to receive(:new).with(version: version)
.and_return(instance_double(ReleaseTools::Services::OmnibusPackages::Publishing, execute: true))
task.invoke
end
end
describe 'verify:check_docker_tags', task: 'monthly:verify:check_docker_tags' do
it 'checks for docker tags on hub.docker.com' do
allow(GitlabReleases).to receive(:active_version).and_return("16.0")
allow(ReleaseTools::Version).to receive(:new).with(GitlabReleases.active_version).and_return("16.0.0")
version = ReleaseTools::Version.new(GitlabReleases.active_version)
expect(ReleaseTools::DockerHub::Verifier).to receive(:new).with(release_type: :monthly, version: version)
.and_return(instance_double(ReleaseTools::DockerHub::Verifier, execute: true))
task.invoke
end
end
describe 'update_paths:generate_dynamic_pipeline', task: 'monthly:update_paths:generate_dynamic_pipeline' do
let(:dynamic_pipeline) { instance_double(ReleaseTools::UpdatePaths::DynamicPipeline) }
let(:latest_version) { '1.2.1' }
before do
allow(GitlabReleases).to receive(:active_version).and_return(latest_version)
allow(ReleaseTools::Version).to receive(:new).with(GitlabReleases.active_version).and_return(latest_version)
allow(ReleaseTools::UpdatePaths::DynamicPipeline).to receive(:new).with(latest_version).and_return(dynamic_pipeline)
allow(dynamic_pipeline).to receive(:generate)
allow(File).to receive(:write)
end
it 'calls generate method on the ReleaseTools::UpdatePaths::DynamicPipeline instance' do
expect(ReleaseTools::UpdatePaths::DynamicPipeline).to receive(:new).with(latest_version).and_return(dynamic_pipeline)
expect(dynamic_pipeline).to receive(:generate)
task.invoke
end
it 'writes the generated YAML content to dynamic-gitlab-ci.yml' do
expect(File).to receive(:write).with('dynamic-gitlab-ci.yml', dynamic_pipeline.generate)
task.invoke
end
end
end