diff --git a/lib/travis/build/addons.rb b/lib/travis/build/addons.rb index 80f4c2069b..89e3e8acd2 100644 --- a/lib/travis/build/addons.rb +++ b/lib/travis/build/addons.rb @@ -2,6 +2,7 @@ require 'travis/build/addons/apt' require 'travis/build/addons/apt_packages' require 'travis/build/addons/apt_retries' +require 'travis/build/addons/yum' require 'travis/build/addons/snaps' require 'travis/build/addons/artifacts' require 'travis/build/addons/chrome' diff --git a/lib/travis/build/addons/yum.rb b/lib/travis/build/addons/yum.rb new file mode 100644 index 0000000000..9f1d91f905 --- /dev/null +++ b/lib/travis/build/addons/yum.rb @@ -0,0 +1,68 @@ +require 'travis/build/addons/base' +require 'shellwords' + +module Travis + module Build + class Addons + class Yum < Base + SUPPORTED_OPERATING_SYSTEMS = %w[ + linux + /^linux.*/ + ].freeze + + SUPPORTED_DISTS = %w( + rhel + ).freeze + + def before_prepare? + SUPPORTED_OPERATING_SYSTEMS.any? do |os_match| + data[:config][:os].to_s == os_match + end + end + + def before_prepare + return if config_yum.empty? + sh.newline + sh.fold('yum') do + install_yum + end + sh.newline + end + + def before_configure? + config + end + + def before_configure + sh.echo "Configuring default yum options", ansi: :yellow + tmp_dest = "${TRAVIS_TMPDIR}/99-travis-yum-conf" + sh.file tmp_dest, <<~YUM_CONF + assumeyes=1 + retries=5 + timeout=30 + YUM_CONF + sh.cmd %Q{sudo mv #{tmp_dest} ${TRAVIS_ROOT}/usr/local/etc/yum.conf} + end + + def config + @config ||= Hash(super) + end + + def install_yum + sh.echo "Installing #{config_yum.count} packages", ansi: :yellow + + packages = config_yum.map{|v| Shellwords.escape(v)}.join(' ') + sh.cmd "sudo yum install -y #{packages}", echo: true, timing: true, assert: true + end + + def config_yum + @config_yum ||= Array(config[:packages]).flatten.compact + rescue TypeError => e + if e.message =~ /no implicit conversion of Symbol into Integer/ + raise Travis::Build::YumConfigError.new + end + end + end + end + end +end diff --git a/lib/travis/build/appliances/disable_initramfs.rb b/lib/travis/build/appliances/disable_initramfs.rb index f186f8c55b..7f25dc63ca 100644 --- a/lib/travis/build/appliances/disable_initramfs.rb +++ b/lib/travis/build/appliances/disable_initramfs.rb @@ -5,7 +5,7 @@ module Build module Appliances class DisableInitramfs < Base def apply - sh.raw "if [ ! $(uname|egrep 'Darwin|FreeBSD') ]; then echo update_initramfs=no | sudo tee -a /etc/initramfs-tools/update-initramfs.conf > /dev/null; fi" + sh.raw "if [[ ! $(uname|egrep 'Darwin|FreeBSD') && ! -f /etc/redhat-release ]]; then echo update_initramfs=no | sudo tee -a /etc/initramfs-tools/update-initramfs.conf > /dev/null; fi" end end end diff --git a/lib/travis/build/appliances/enable_i386.rb b/lib/travis/build/appliances/enable_i386.rb index 2ecfecb2aa..aff12329f7 100644 --- a/lib/travis/build/appliances/enable_i386.rb +++ b/lib/travis/build/appliances/enable_i386.rb @@ -5,7 +5,7 @@ module Build module Appliances class EnableI386 < Base def apply - sh.if "$(uname -m) == x86_64 && $(command -v lsb_release) && $(lsb_release -cs) != precise" do + sh.if "$(uname -m) == x86_64 && $(command -v lsb_release) && $(lsb_release -cs) != precise && $(lsb_release -cs) != Ootpa" do sh.cmd 'dpkg --add-architecture i386', echo: false, assert: false, sudo: true end end diff --git a/lib/travis/build/bash/travis_setup_postgresql.bash b/lib/travis/build/bash/travis_setup_postgresql.bash index 399fa4878a..f8ced62e84 100644 --- a/lib/travis/build/bash/travis_setup_postgresql.bash +++ b/lib/travis/build/bash/travis_setup_postgresql.bash @@ -19,11 +19,14 @@ travis_setup_postgresql() { focal) version='12' ;; + Ootpa) + version='12' + ;; jammy) version='14' ;; *) - echo -e "${ANSI_RED}Unrecognized operating system.${ANSI_CLEAR}" + echo -e "${ANSI_RED}Unrecognized operating system ${TRAVIS_DIST}.${ANSI_CLEAR}" ;; esac fi @@ -34,6 +37,9 @@ travis_setup_postgresql() { if [[ "${TRAVIS_INIT}" == upstart ]]; then start_cmd="sudo service postgresql start ${version}" stop_cmd="sudo service postgresql stop" + elif [[ "${TRAVIS_DIST}" == Ootpa ]]; then + start_cmd="sudo systemctl start postgresql-${version}" + stop_cmd="sudo systemctl stop postgresql" elif [[ "${TRAVIS_INIT}" == systemd ]]; then start_cmd="sudo systemctl start postgresql@${version}-main" stop_cmd="sudo systemctl stop postgresql" diff --git a/lib/travis/build/errors.rb b/lib/travis/build/errors.rb index f24ad4f711..cc8e63f98d 100644 --- a/lib/travis/build/errors.rb +++ b/lib/travis/build/errors.rb @@ -81,6 +81,17 @@ def doc_path '/user/installing-dependencies' end end + + + class YumConfigError < CompilationError + def initialize(msg = "\\`yum\\` should be a list.") + super + end + + def doc_path + '/user/installing-dependencies' + end + end class GithubAppsTokenFetchError < CompilationError def initialize(msg = "Unable to fetch GitHub Apps Token. GitHub may be unavailable. " \ diff --git a/spec/build/script/shared/appliances/disable_initramfs.rb b/spec/build/script/shared/appliances/disable_initramfs.rb index 18a31d54de..952a6be978 100644 --- a/spec/build/script/shared/appliances/disable_initramfs.rb +++ b/spec/build/script/shared/appliances/disable_initramfs.rb @@ -1,5 +1,5 @@ shared_examples_for 'disables updating initramfs' do - let(:disable_initramfs) { %(if [ ! $(uname|egrep 'Darwin|FreeBSD') ]; then echo update_initramfs=no | sudo tee -a /etc/initramfs-tools/update-initramfs.conf > /dev/null; fi) } + let(:disable_initramfs) { %(if [[ ! $(uname|egrep 'Darwin|FreeBSD') && ! -f /etc/redhat-release ]]; then echo update_initramfs=no | sudo tee -a /etc/initramfs-tools/update-initramfs.conf > /dev/null; fi) } it 'disables updating initramfs' do should include_sexp [:raw, disable_initramfs]