New dockerfile

This commit is contained in:
Wedge 2021-03-01 17:54:44 +03:00
parent 6fdf834e64
commit 628d373ee8
22 changed files with 91 additions and 722 deletions

28
.dockerignore Normal file
View File

@ -0,0 +1,28 @@
*~
1.sh
.bundle
.rvmrc
.DS_Store
db/*.sqlite3
log/*.log
tmp/
config/database.yml
.idea
config/application.yml
public/assets/*
config/initializers/local.rb
public/system/*
public/downloads/*
*.swp
*.tmproj
.sass-cache/
dump.rdb
crash.log
config/newrelic.yml
config/deploy/*.rb
config/deploy.rb
.swo
.swn
.ruby-gemset
.ruby-version
.localeapp

36
Dockerfile Normal file
View File

@ -0,0 +1,36 @@
FROM ruby:2.6.6-alpine3.13 as rosa-build-gems
WORKDIR /rosa-build
RUN apk add --no-cache libpq tzdata ca-certificates git icu rpm nodejs python2 redis && \
apk add --virtual .ruby-builddeps --no-cache postgresql-dev build-base cmake icu-dev
RUN gem install bundler:1.17.3
COPY vendor ./vendor
COPY Gemfile Gemfile.lock ./
RUN bundle install --without development test --jobs 16 --clean --deployment --no-cache --verbose && \
apk add --no-cache file imagemagick curl gnupg openssh-keygen findutils && \
apk del .ruby-builddeps && rm -rf /root/.bundle && rm -rf /proxy/vendor/bundle/ruby/2.6.0/cache && \
git clone -b 2.2.0 https://github.com/pygments/pygments.git && cd pygments && python setup.py install && cd .. && rm -rf pygments && \
cd /rosa-build/vendor/bundle/ruby && find -name *.o -exec rm {} \;
FROM scratch
COPY --from=rosa-build-gems / /
RUN touch /MIGRATE
ENV RAILS_ENV production
ENV GEM_HOME /usr/local/bundle
ENV BUNDLE_APP_CONFIG /usr/local/bundle
ENV DATABASE_URL postgresql://postgres@postgres/rosa-build?pool=100&prepared_statements=false
WORKDIR /rosa-build
COPY bin ./bin
COPY lib ./lib
COPY config ./config
COPY db ./db
COPY app/ ./app
COPY script ./script
COPY vendor ./vendor
COPY Rakefile config.ru entrypoint.sh entrypoint_resque.sh entrypoint_resque_scheduler.sh ./
RUN git config --global user.email "abf@openmandriva.org"
RUN git config --global user.name "ABF"
ENTRYPOINT ["/rosa-build/entrypoint.sh"]

View File

@ -22,8 +22,6 @@ gem 'russian'
gem 'state_machines-activerecord' gem 'state_machines-activerecord'
gem 'redis-rails' gem 'redis-rails'
#gem 'newrelic_rpm'
gem 'jbuilder' gem 'jbuilder'
gem 'sprockets' gem 'sprockets'
gem 'will_paginate' gem 'will_paginate'

View File

@ -6,10 +6,7 @@ module AbfWorkerMethods
module ClassMethods module ClassMethods
def log_server def log_server
@log_server ||= Redis.new( @log_server ||= Redis.new(url: ENV['REDIS_URL'])
host: APP_CONFIG['abf_worker']['log_server']['host'],
port: APP_CONFIG['abf_worker']['log_server']['port']
)
end end
def next_build def next_build

View File

@ -1,80 +0,0 @@
common: &common
project_name: ABF
repo_project_name: ABF
anonymous_access: true
preregistration: false
file_store_url: <%= ENV["FILE_STORE_URL"] %>
distr_types: ['mdv', 'rhel', 'nau5']
github_organization: 'OpenMandrivaAssociation'
allowed_addresses:
- 127.0.0.1
abf_worker:
publish_workers_count: <%= ENV["ABF_WORKER_PUBLISH_WORKERS_COUNT"] %>
log_server:
host: <%= ENV["ABF_WORKER_LOG_SERVER_HOST"] %>
port: <%= ENV["ABF_WORKER_LOG_SERVER_PORT"] %>
airbrake:
api_key: <%= ENV["AIRBRAKE_API_KEY"] %>
host: <%= ENV["AIRBRAKE_HOST"] %>
keys:
key_pair_secret_key: <%= ENV["KEY_PAIR_SECRET_KEY"] %>
node_instruction_secret_key: <%= ENV["NODE_INSTRUCTION_SECRET_KEY"] %>
secret_token: <%= ENV["SECRET_TOKEN"] %>
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
devise:
pepper: <%= ENV["DEVISE_PEPPER"] %>
secret: <%= ENV["DEVISE_SECRET"] %>
github:
id: <%= ENV["GITHUB_APP_ID"] %>
secret: <%= ENV["GITHUB_APP_SECRET"] %>
google:
id: <%= ENV["GOOGLE_APP_ID"] %>
secret: <%= ENV["GOOGLE_APP_SECRET"] %>
facebook:
id: <%= ENV["FACEBOOK_APP_ID"] %>
secret: <%= ENV["FACEBOOK_APP_SECRET"] %>
downloads_url: <%= ENV["DOWNLOADS_URL"] %>
wiki_formats:
markdown: "Markdown"
textile: "Textile"
# rdoc: "RDoc"
org: "Org-mode"
# creole: "Creole"
# mediawiki: "MediaWiki"
feedback:
email:
- <%= ENV["FEEDBACK_EMAIL"] %>
cc:
- <%= ENV["FEEDBACK_CC"] %>
subject_prefixes:
- 'abf-users'
- 'feeback_form'
shell_user: 'git'
development:
<<: *common
root_path: /share
git_path: /share
tmpfs_path: /dev/shm
do-not-reply-email: do-not-reply@localhost
github_services:
ip: 127.0.0.1
port: 1234
production:
<<: *common
root_path: <%= ENV["ROOT_PATH"] %>
git_path: <%= ENV["GIT_PATH"] %>
tmpfs_path: <%= ENV["TMPFS_PATH"] %>
do-not-reply-email: <%= ENV["DO_NOT_REPLY_EMAIL"] %>
mailer_https_url: <%= ENV["MAILER_HTTPS_URL"] %>
github_services:
ip: <%= ENV["GITHUB_SERVICES_ID"] %>
port: <%= ENV["GITHUB_SERVICES_PORT"] %>
test:
<<: *common
tmpfs_path: "use Rails.root/tmp/test_root in spec"
root_path: "use Rails.root/tmp/test_root in spec"
git_path: "use Rails.root/tmp/test_root in spec"
do-not-reply-email: do-not-reply@localhost

View File

@ -1,65 +0,0 @@
common: &common
project_name: ABF
repo_project_name: ABF
anonymous_access: true
preregistration: false
file_store_url: 'https://file-store.openmandriva.org'
distr_types: ['mdv', 'rhel', 'nau5']
allowed_addresses:
- 127.0.0.100
abf_worker:
publish_workers_count: 2
log_server:
host: 127.0.0.1
port: 6379
airbrake:
api_key: 'airbrake_api_key'
host: 'errbit.example.com'
keys:
key_pair_secret_key: 'key_pair_secret_key'
node_instruction_secret_key: 'node_instruction_secret_key'
devise_pepper: 'e295a79fb7966e94a6e8b184ba65791a'
secret_token: 'e295a79fb7966e94a6e8b184ba65791a'
devise:
pepper: 'e295a79fb7966e94a6e8b184ba65791a'
secret: '82e10b58b3f4a764f551fb104aa76808f539380f82da75d3f29edfc09ed9c3a153c22ceacc87890a9b19d0ad89bb6484481f4e021e0ecf942d80c34d930829e9'
github:
id: 'APP_ID'
secret: 'APP_SECRET'
google:
id: 'APP_ID'
secret: 'APP_SECRET'
facebook:
id: 'APP_ID'
secret: 'APP_SECRET'
downloads_url: 'http://abf-downloads.openmandriva.org'
wiki_formats:
markdown: "Markdown"
textile: "Textile"
# rdoc: "RDoc"
org: "Org-mode"
# creole: "Creole"
# mediawiki: "MediaWiki"
feedback:
email:
- 'test@example.com'
- 'test1@example.com'
# or
# email: 'test@example.com'
# optional parameters
cc:
- 'test2@example.com' # or like email
bcc:
- 'test3@example.com' # or like email
subject_prefixes: # or one line
- 'from_feedback'
subject_postfixes: # or one line
- 'sample_postfix'
shell_user: 'git'
test:
<<: *common
root_path: /home/travis/build/rosa-abf/rosa-build/tmp/test_root
git_path: /home/travis/build/rosa-abf/rosa-build/tmp/test_root
do-not-reply-email: do-not-reply@localhost

View File

@ -1,18 +0,0 @@
production:
adapter: postgresql
encoding: unicode
database: <%= ENV["DATABASE_NAME"] %>
template: template0
host: <%= ENV["DATABASE_HOST"] %>
username: <%= ENV["DATABASE_USERNAME"] %>
password: <%= ENV["DATABASE_PASSWORD"] %>
pool: <%= ENV["DATABASE_POOL"] %>
timeout: <%= ENV["DATABASE_TIMEOUT"] %>
prepared_statements: false
test:
adapter: postgresql
encoding: unicode
template: template0
database: rosa_build_test
username: postgres

View File

@ -52,7 +52,7 @@ Rails.application.configure do
# Use a different cache store in production. # Use a different cache store in production.
# config.cache_store = :mem_cache_store # config.cache_store = :mem_cache_store
config.cache_store = :redis_store, (ENV["REDIS_URL"].to_s), { expires_in: 10.minutes } config.cache_store = :redis_store, (ENV["REDIS_CACHE_URL"].to_s), { expires_in: 10.minutes }
# Enable serving of images, stylesheets, and JavaScripts from an asset server. # Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = "http://assets.example.com" # config.action_controller.asset_host = "http://assets.example.com"

View File

@ -66,7 +66,7 @@ Devise.setup do |config|
config.stretches = Rails.env.test? ? 1 : 10 config.stretches = Rails.env.test? ? 1 : 10
# Setup a pepper to generate the encrypted password. # Setup a pepper to generate the encrypted password.
config.pepper = APP_CONFIG['keys']['devise']['pepper'] config.pepper = ENV["DEVISE_PEPPER"]
# ==> Configuration for :confirmable # ==> Configuration for :confirmable
# A period that the user is allowed to access the website even without # A period that the user is allowed to access the website even without
@ -184,7 +184,6 @@ Devise.setup do |config|
# Add a new OmniAuth provider. Check the wiki for more information on setting # Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks. # up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo'
config.omniauth :github, APP_CONFIG['keys']['github']['id'], APP_CONFIG['keys']['github']['secret'], scope: 'user:email'
# require 'openid/store/filesystem' # require 'openid/store/filesystem'
# config.omniauth :openid, :name => 'open_id' #, :store => OpenID::Store::Filesystem.new('./tmp') # config.omniauth :openid, :name => 'open_id' #, :store => OpenID::Store::Filesystem.new('./tmp')
@ -199,7 +198,7 @@ Devise.setup do |config|
# manager.default_strategies(:scope => :user).unshift :some_external_strategy # manager.default_strategies(:scope => :user).unshift :some_external_strategy
# end # end
config.secret_key = APP_CONFIG['keys']['devise']['secret'] config.secret_key = ENV["DEVISE_SECRET"]
config.reconfirmable = false config.reconfirmable = false
end end

View File

@ -1,8 +0,0 @@
# Be sure to restart your server when you modify this file.
# Your secret key for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
Rosa::Application.config.secret_token = APP_CONFIG['keys']['secret_token']
Rosa::Application.config.secret_key_base = APP_CONFIG['keys']['secret_key_base']

View File

@ -1,229 +0,0 @@
#
# This file configures the New Relic Agent. New Relic monitors
# Ruby, Java, .NET, PHP, and Python applications with deep visibility and low overhead.
# For more information, visit www.newrelic.com.
#
# Generated January 26, 2012
#
# This configuration file is custom generated for Rosalab
# Here are the settings that are common to all environments:
common: &default_settings
# ============================== LICENSE KEY ===============================
# You must specify the license key associated with your New Relic
# account. This key binds your Agent's data to your account in the
# New Relic service.
license_key: 'license_key'
# Agent Enabled (Ruby/Rails Only)
# Use this setting to force the agent to run or not run.
# Default is 'auto' which means the agent will install and run only
# if a valid dispatcher such as Mongrel is running. This prevents
# it from running with Rake or the console. Set to false to
# completely turn the agent off regardless of the other settings.
# Valid values are true, false and auto.
# agent_enabled: auto
# Application Name
# Set this to be the name of your application as you'd like it show
# up in New Relic. New Relic will then auto-map instances of your application
# into a New Relic "application" on your home dashboard page. If you want
# to map this instance into multiple apps, like "AJAX Requests" and
# "All UI" then specify a semicolon-separated list of up to three
# distinct names. If you comment this out, it defaults to the
# capitalized RAILS_ENV (i.e., Production, Staging, etc)
app_name: ABF
# When "true", the agent collects performance data about your
# application and reports this data to the New Relic service at
# newrelic.com. This global switch is normally overridden for each
# environment below. (formerly called 'enabled')
monitor_mode: true
# Developer mode should be off in every environment but
# development as it has very high overhead in memory.
developer_mode: false
# The newrelic agent generates its own log file to keep its logging
# information separate from that of your application. Specify its
# log level here.
log_level: info
# The newrelic agent communicates with the New Relic service via http by
# default. If you want to communicate via https to increase
# security, then turn on SSL by setting this value to true. Note,
# this will result in increased CPU overhead to perform the
# encryption involved in SSL communication, but this work is done
# asynchronously to the threads that process your application code,
# so it should not impact response times.
ssl: false
# EXPERIMENTAL: enable verification of the SSL certificate sent by
# the server. This setting has no effect unless SSL is enabled
# above. This may block your application. Only enable it if the data
# you send us needs end-to-end verified certificates.
#
# This means we cannot cache the DNS lookup, so each request to the
# New Relic service will perform a lookup. It also means that we cannot
# use a non-blocking lookup, so in a worst case, if you have DNS
# problems, your app may block indefinitely.
# verify_certificate: true
# Set your application's Apdex threshold value with the 'apdex_t'
# setting, in seconds. The apdex_t value determines the buckets used
# to compute your overall Apdex score.
# Requests that take less than apdex_t seconds to process will be
# classified as Satisfying transactions; more than apdex_t seconds
# as Tolerating transactions; and more than four times the apdex_t
# value as Frustrating transactions.
# For more about the Apdex standard, see
# http://newrelic.com/docs/general/apdex
apdex_t: 0.5
# Proxy settings for connecting to the New Relic server.
#
# If a proxy is used, the host setting is required. Other settings
# are optional. Default port is 8080.
#
# proxy_host: hostname
# proxy_port: 8080
# proxy_user:
# proxy_pass:
# Tells transaction tracer and error collector (when enabled)
# whether or not to capture HTTP params. When true, frameworks can
# exclude HTTP parameters from being captured.
# Rails: the RoR filter_parameter_logging excludes parameters
# Java: create a config setting called "ignored_params" and set it to
# a comma separated list of HTTP parameter names.
# ex: ignored_params: credit_card, ssn, password
capture_params: false
# Transaction tracer captures deep information about slow
# transactions and sends this to the New Relic service once a
# minute. Included in the transaction is the exact call sequence of
# the transactions including any SQL statements issued.
transaction_tracer:
# Transaction tracer is enabled by default. Set this to false to
# turn it off. This feature is only available at the Professional
# product level.
enabled: true
# Threshold in seconds for when to collect a transaction
# trace. When the response time of a controller action exceeds
# this threshold, a transaction trace will be recorded and sent to
# New Relic. Valid values are any float value, or (default) "apdex_f",
# which will use the threshold for an dissatisfying Apdex
# controller action - four times the Apdex T value.
transaction_threshold: apdex_f
# When transaction tracer is on, SQL statements can optionally be
# recorded. The recorder has three modes, "off" which sends no
# SQL, "raw" which sends the SQL statement in its original form,
# and "obfuscated", which strips out numeric and string literals.
record_sql: obfuscated
# Threshold in seconds for when to collect stack trace for a SQL
# call. In other words, when SQL statements exceed this threshold,
# then capture and send to New Relic the current stack trace. This is
# helpful for pinpointing where long SQL calls originate from.
stack_trace_threshold: 0.500
# Determines whether the agent will capture query plans for slow
# SQL queries. Only supported in mysql and postgres. Should be
# set to false when using other adapters.
# explain_enabled: true
# Threshold for query execution time below which query plans will not
# not be captured. Relevant only when `explain_enabled` is true.
# explain_threshold: 0.5
# Error collector captures information about uncaught exceptions and
# sends them to New Relic for viewing
error_collector:
# Error collector is enabled by default. Set this to false to turn
# it off. This feature is only available at the Professional
# product level.
enabled: true
# Rails Only - tells error collector whether or not to capture a
# source snippet around the place of the error when errors are View
# related.
capture_source: true
# To stop specific errors from reporting to New Relic, set this property
# to comma-separated values. Default is to ignore routing errors,
# which are how 404's get triggered.
ignore_errors: ActionController::RoutingError
# (Advanced) Uncomment this to ensure the CPU and memory samplers
# won't run. Useful when you are using the agent to monitor an
# external resource
# disable_samplers: true
# If you aren't interested in visibility in these areas, you can
# disable the instrumentation to reduce overhead.
#
# disable_view_instrumentation: true
# disable_activerecord_instrumentation: true
# disable_memcache_instrumentation: true
# disable_dj: true
# Certain types of instrumentation such as GC stats will not work if
# you are running multi-threaded. Please let us know.
# multi_threaded = false
# Application Environments
# ------------------------------------------
# Environment-specific settings are in this section.
# For Rails applications, RAILS_ENV is used to determine the environment.
# For Java applications, pass -Dnewrelic.environment <environment> to set
# the environment.
# NOTE if your application has other named environments, you should
# provide newrelic configuration settings for these environments here.
development:
<<: *default_settings
# Turn off communication to New Relic service in development mode (also
# 'enabled').
# NOTE: for initial evaluation purposes, you may want to temporarily
# turn agent communication on in development mode.
monitor_mode: false
# Rails Only - when running in Developer Mode, the New Relic Agent will
# present performance information on the last 100 transactions you have
# executed since starting the app server.
# NOTE: There is substantial overhead when running in developer mode.
# Do not use for production or load testing.
developer_mode: true
# Enable textmate links
# textmate: true
test:
<<: *default_settings
# It almost never makes sense to turn on the agent when running
# unit, functional or integration tests or the like.
monitor_mode: false
# Turn on the agent in production for 24x7 monitoring. New Relic
# testing shows an average performance impact of < 5 ms per
# transaction, so you can leave this on all the time without
# incurring any user-visible performance degradation.
production:
<<: *default_settings
monitor_mode: true
dispatcher: 'puma'
# Many applications have a staging environment which behaves
# identically to production. Support for that environment is provided
# here. By default, the staging environment has the agent turned on.
staging:
<<: *default_settings
monitor_mode: true
app_name: ABF (Staging)
dispatcher: 'puma'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

17
entrypoint.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
set -ex
if [ -f /MIGRATE ]
then
bundle exec rake db:migrate
rm /MIGRATE
fi
rm -rf public/assets/*
bundle exec rake assets:precompile
cd public/assets
rm -f new_application.css new_application.js
ln -sv new_application*.css new_application.css
ln -sv new_application*.js new_application.js
cd ../..
RUBYOPT="-W0" bundle exec puma -C /rosa-build/config/puma/production.rb

6
entrypoint_sidekiq.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -ex
cd /rosa-build
bundle exec sidekiq -q iso_worker_observer -q low -q middle -q notification -q publish_observer -q rpm_worker_observer -c 5 -e production

View File

@ -1,31 +0,0 @@
require 'spec_helper'
describe CleanApiDefenderStatisticsJob do
it 'ensures that not raises error' do
lambda do
CleanApiDefenderStatisticsJob.perform
end.should_not raise_exception
end
it 'ensures that cleans only old statistics' do
today = Date.today
Timecop.freeze(today) do
key1 = "throttle:key1:#{today.strftime('%Y-%m-%d')}"
key2 = "throttle:key2:#{today.strftime('%Y-%m-%d')}T01"
key3 = "throttle:key1:#{(today - 32.days).strftime('%Y-%m-%d')}"
key4 = "throttle:key2:#{(today - 32.days).strftime('%Y-%m-%d')}T01"
key5 = "other:throttle:key:#{(today - 32.days).strftime('%Y-%m-%d')}"
@redis_instance.set key1, 1
@redis_instance.set key2, 1
@redis_instance.set key3, 1
@redis_instance.set key4, 1
@redis_instance.set key5, 1
CleanApiDefenderStatisticsJob.perform
@redis_instance.keys.should include(key1, key2, key5)
@redis_instance.keys.should_not include(key3, key4)
end
end
end

View File

@ -1,40 +0,0 @@
require 'spec_helper'
describe BuildLists::CleanBuildrootJob do
before { stub_symlink_methods }
subject { BuildLists::CleanBuildrootJob }
it 'ensures that not raises error' do
FactoryGirl.create(:build_list, status: BuildList::BUILD_ERROR)
expect(FileStoreService::File).to_not receive(:new)
expect do
subject.perform
end.to_not raise_exception
end
it 'cleans RPM buildroot' do
results = [
{ 'sha1' => 'sha1-1', 'file_name' => BuildLists::CleanBuildrootJob::FILENAME },
{ 'sha1' => 'sha1-2', 'file_name' => 'test.log' }
]
FactoryGirl.create(:build_list,
results: results,
save_buildroot: true,
status: BuildList::BUILD_ERROR
)
bl = FactoryGirl.create(:build_list,
results: results,
save_buildroot: true,
status: BuildList::BUILD_ERROR,
updated_at: Time.now - 2.hours
)
file_store_service = double(:file_store_service, destroy: true)
expect(FileStoreService::File).to receive(:new).with(sha1: 'sha1-1').and_return(file_store_service)
subject.perform
expect(bl.reload.results).to eq [{ 'sha1' => 'sha1-2', 'file_name' => 'test.log' }]
end
end

View File

@ -1,97 +0,0 @@
require 'spec_helper'
describe CreateEmptyMetadataJob do
before { stub_symlink_methods }
subject { BuildLists::CleanBuildrootJob }
context 'create_empty_metadata' do
let(:job) { CreateEmptyMetadataJob.new }
let(:platform) { FactoryGirl.build(:platform) }
let(:path) { platform.path }
it 'creates metadata for rhel platform' do
platform.distrib_type = 'rhel'
job.send :create_empty_metadata, platform, path.dup
expect(Dir["#{ path }/repodata/*"]).to be_present
expect(Dir["#{ path }/media_info/*"]).to be_empty
end
it 'creates metadata for mdv platform' do
platform.distrib_type = 'mdv'
job.send :create_empty_metadata, platform, path.dup
expect(Dir["#{ path }/media_info/*"]).to be_present
expect(Dir["#{ path }/repodata/*"]).to be_empty
end
it 'does nothing for other platforms' do
platform.distrib_type = 'test'
job.send :create_empty_metadata, platform, path.dup
expect(Dir["#{ path }/media_info/*"]).to be_empty
expect(Dir["#{ path }/repodata/*"]).to be_empty
end
end
context 'create_empty_metadata_for_repository' do
let(:job) { CreateEmptyMetadataJob.new }
let(:repository) { FactoryGirl.build(:repository) }
let(:platform) { repository.platform }
before do
allow(job).to receive(:arch_names).and_return(%w(i586 x86_64))
end
it 'repository of main platform' do
paths = <<-STR
#{ platform.path }/repository/i586/#{ repository.name }/release
#{ platform.path }/repository/i586/#{ repository.name }/updates
#{ platform.path }/repository/x86_64/#{ repository.name }/release
#{ platform.path }/repository/x86_64/#{ repository.name }/updates
STR
paths.split("\n").each do |path|
expect(job).to receive(:create_empty_metadata).with(platform, path.strip)
end
job.send :create_empty_metadata_for_repository, repository
end
it 'repository of personal platform' do
platform.platform_type = Platform::TYPE_PERSONAL
Platform.stub_chain(:main, :opened).and_return([platform])
paths = <<-STR
#{ platform.path }/repository/#{ platform.name }/i586/#{ repository.name }/release
#{ platform.path }/repository/#{ platform.name }/i586/#{ repository.name }/updates
#{ platform.path }/repository/#{ platform.name }/x86_64/#{ repository.name }/release
#{ platform.path }/repository/#{ platform.name }/x86_64/#{ repository.name }/updates
STR
paths.split("\n").each do |path|
expect(job).to receive(:create_empty_metadata).with(platform, path.strip)
end
job.send :create_empty_metadata_for_repository, repository
end
end
context 'create_empty_metadata_for_platform' do
let(:platform) { FactoryGirl.build(:platform, id: 123) }
let(:repository1) { FactoryGirl.build(:personal_repository) }
let(:repository2) { FactoryGirl.build(:personal_repository) }
let(:job) { CreateEmptyMetadataJob.new('Platform', 123) }
before do
Platform.stub_chain(:main, :opened, :find).and_return(platform)
Repository.stub_chain(:joins, :where, :find_each).and_yield(repository1).and_yield(repository2)
end
it 'creates metadata for all personal repositories' do
expect(job).to receive(:create_empty_metadata_for_repository).with(repository1)
expect(job).to receive(:create_empty_metadata_for_repository).with(repository2)
job.send :create_empty_metadata_for_platform
end
end
end

View File

@ -1,64 +0,0 @@
require 'spec_helper'
describe BuildLists::DependentPackagesJob do
let(:build_list) { FactoryGirl.build(:build_list, id: 123) }
let(:user) { build_list.user }
let(:project) { build_list.project }
let(:project_ids) { [build_list.project_id] }
let(:arch_ids) { [build_list.arch_id] }
let(:options) { {
'auto_publish_status' => 'none',
'auto_create_container' => '0',
'include_testing_subrepository' => '0',
'use_cached_chroot' => '0',
'use_extra_tests' => '0'
} }
before do
stub_symlink_methods
allow(BuildList).to receive(:find).with(123).and_return(build_list)
allow(Project).to receive_message_chain(:where, :to_a).and_return([project])
allow(Arch).to receive_message_chain(:where, :to_a).and_return([build_list.arch])
allow_any_instance_of(BuildList).to receive(:update_statistic)
allow_any_instance_of(BuildListPolicy).to receive(:show?).and_return(true)
allow_any_instance_of(ProjectPolicy).to receive(:write?).and_return(true)
allow_any_instance_of(BuildListPolicy).to receive(:create?).and_return(true)
end
subject { BuildLists::DependentPackagesJob }
it 'ensures that not raises error' do
expect do
subject.perform build_list.id, user.id, project_ids, arch_ids, options
end.to_not raise_exception
end
it 'ensures that creates build_list' do
expect do
subject.perform build_list.id, user.id, project_ids, arch_ids, options
end.to change(BuildList, :count).by(1)
end
it 'ensures that do nothing if user has no access for show of build_list' do
allow_any_instance_of(BuildListPolicy).to receive(:show?).and_return(false)
expect do
subject.perform build_list.id, user.id, project_ids, arch_ids, options
end.to change(BuildList, :count).by(0)
end
it 'ensures that do nothing if user has no access for write of project' do
allow_any_instance_of(ProjectPolicy).to receive(:write?).and_return(false)
expect do
subject.perform build_list.id, user.id, project_ids, arch_ids, options
end.to change(BuildList, :count).by(0)
end
it 'ensures that do nothing if user has no access for create of build_list' do
allow_any_instance_of(BuildListPolicy).to receive(:create?).and_return(false)
expect do
subject.perform build_list.id, user.id, project_ids, arch_ids, options
end.to change(BuildList, :count).by(0)
end
end

View File

@ -1,19 +0,0 @@
require 'spec_helper'
describe DestroyProjectFromRepositoryJob do
let(:project) { FactoryGirl.build(:project, id: 123) }
let(:repository) { FactoryGirl.build(:repository, id: 234) }
before do
stub_symlink_methods
end
subject { DestroyProjectFromRepositoryJob }
it 'ensures that not raises error' do
expect do
subject.perform project, repository
end.to_not raise_exception
end
end

View File

@ -1,12 +0,0 @@
require 'spec_helper'
describe PublishTaskManagerJob do
subject { PublishTaskManagerJob }
it 'ensures that not raises error' do
expect do
subject.perform
end.to_not raise_exception
end
end

View File

@ -1,49 +0,0 @@
require 'spec_helper'
describe RunExtraMassBuildsJob do
let(:mass_build1) { FactoryGirl.build(:mass_build, id: 123) }
let(:mass_build2) { FactoryGirl.build(:mass_build, id: 234, extra_mass_builds: [mass_build1.id]) }
let(:build_list) { FactoryGirl.build(:build_list, id: 345, mass_build: mass_build) }
let(:job) { RunExtraMassBuildsJob.new }
before do
stub_symlink_methods
MassBuild.stub_chain(:where, :find_each).and_yield(mass_build2)
MassBuild.stub_chain(:where, :to_a).and_return([mass_build1])
allow(job).to receive(:not_ready?).with(mass_build1).and_return(false)
allow(mass_build2).to receive(:build_all)
end
it 'ensures that not raises error' do
expect do
job.perform
end.to_not raise_exception
end
it 'ensures that calls #build_all' do
expect(mass_build2).to receive(:build_all)
job.perform
end
it 'ensures that do nothing when no extra_mass_builds' do
mass_build2.extra_mass_builds = []
expect(mass_build2).to_not receive(:build_all)
job.perform
end
it 'ensures that do nothing when extra mass build not ready' do
allow(job).to receive(:not_ready?).with(mass_build1).and_return(true)
expect(mass_build2).to_not receive(:build_all)
job.perform
end
it 'ensures that do nothing when some extra mass builds have no status SUCCESS' do
mass_build0 = FactoryGirl.build(:mass_build, id: 1)
mass_build2.extra_mass_builds = [mass_build0, mass_build1]
MassBuild.stub_chain(:where, :to_a).and_return([mass_build1])
expect(mass_build2).to_not receive(:build_all)
job.perform
end
end