diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000000..4106122f71f --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,56 @@ +name: CI + +on: [push, pull_request] + +jobs: + ci: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + ruby-version: + - '2.6' + node-version: + - 12 + test-suite: + - spec + - spec:compile + - spec:debride + - spec:javascript + - spec:jest + - spec:routes + services: + postgres: + image: manageiq/postgresql:10 + env: + POSTGRESQL_USER: root + POSTGRESQL_PASSWORD: smartvm + POSTGRESQL_DATABASE: vmdb_test + options: --health-cmd pg_isready --health-interval 2s --health-timeout 5s --health-retries 5 + ports: + - 5432:5432 + env: + TEST_SUITE: ${{ matrix.test-suite }} + PGHOST: localhost + PGPASSWORD: smartvm + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + steps: + - uses: actions/checkout@v4 + - name: Set up system + run: bin/before_install + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true + - name: Set up Node + if: ${{ matrix.test-suite == 'spec:compile' || matrix.test-suite == 'spec:javascript' || matrix.test-suite == 'spec:jest' }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: yarn + registry-url: https://npm.manageiq.org/ + - name: Prepare tests + run: bin/setup + - name: Run tests + run: bundle exec rake diff --git a/.gitignore b/.gitignore index 103589f2375..5b6a5c46da6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ package-lock.json Gemfile.lock Gemfile.dev.rb _yardoc/ -bin/* coverage/ doc/ pkg/ @@ -21,3 +20,4 @@ config/webpack/paths.json cypress/screenshots cypress/videos .DS_Store +.yarn/ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f18b5585d64..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -language: ruby -python: '2.7' -rvm: -- 2.6.6 -cache: - bundler: true - yarn: true - timeout: 600 -addons: - postgresql: '10' - chrome: beta -env: - matrix: - - TEST_SUITE=spec - - TEST_SUITE=spec:routes - - TEST_SUITE=spec:javascript - - TEST_SUITE=spec:compile - - TEST_SUITE=spec:jest - - TEST_SUITE=spec:debride -bundler_args: "--no-deployment" -before_install: source bin/ci/before_install.sh -install: bin/setup -before_script: source bin/ci/before_script.sh -after_script: source bin/ci/after_script.sh -notifications: - webhooks: - urls: - - https://webhooks.gitter.im/e/9a9f972a1225d28e0f05 - on_success: change - on_failure: always - on_start: never -dist: bionic diff --git a/README.md b/README.md index 0b26ed528be..2b9adb92aae 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # ManageIQ::UI::Classic [![Gem Version](https://badge.fury.io/rb/manageiq-ui-classic.svg)](http://badge.fury.io/rb/manageiq-ui-classic) -[![Build Status](https://travis-ci.com/ManageIQ/manageiq-ui-classic.svg?branch=morphy)](https://travis-ci.com/ManageIQ/manageiq-ui-classic) +[![CI](https://github.com/ManageIQ/manageiq-ui-classic/actions/workflows/ci.yaml/badge.svg?branch=morphy)](https://github.com/ManageIQ/manageiq-ui-classic/actions/workflows/ci.yaml) [![Code Climate](https://codeclimate.com/github/ManageIQ/manageiq-ui-classic.svg)](https://codeclimate.com/github/ManageIQ/manageiq-ui-classic) [![Test Coverage](https://codeclimate.com/github/ManageIQ/manageiq-ui-classic/badges/coverage.svg)](https://codeclimate.com/github/ManageIQ/manageiq-ui-classic/coverage) [![Coverage Status](https://coveralls.io/repos/github/ManageIQ/manageiq-ui-classic/badge.svg?branch=morphy)](https://coveralls.io/github/ManageIQ/manageiq-ui-classic?branch=morphy) diff --git a/bin/before_install b/bin/before_install new file mode 100755 index 00000000000..2bc530bd05a --- /dev/null +++ b/bin/before_install @@ -0,0 +1,40 @@ +#!/bin/bash + +if [ -n "$CI" ]; then + echo "== Installing system packages ==" + sudo apt-get update + sudo apt-get install -y libcurl4-openssl-dev + echo +fi + +if [ -n "$CI" -a \( "$TEST_SUITE" = "spec:javascript" -o "$TEST_SUITE" = "spec:jest" \) ]; then + # Install google-chrome-beta + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' + sudo apt-get update + sudo apt-get install -y google-chrome-beta + echo +fi + +if [ -n "$ACT" ]; then + # Install yarn + curl -o- -L https://yarnpkg.com/install.sh | bash + echo "$HOME/.yarn/bin" >> $GITHUB_PATH + echo "$HOME/.config/yarn/global/node_modules/.bin" >> $GITHUB_PATH + + # Install cmake so we can build rugged gem + sudo apt-get install -y cmake + echo +fi + +gem_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." &>/dev/null && pwd)" +spec_manageiq="$gem_root/spec/manageiq" + +if [ -n "$MANAGEIQ_REPO" ]; then + echo "== Symlinking spec/manageiq to $MANAGEIQ_REPO ==" + rm -rf "$spec_manageiq" + ln -s "$(cd "$MANAGEIQ_REPO" &>/dev/null && pwd)" "$spec_manageiq" +elif [ ! -d "$spec_manageiq" ]; then + echo "== Cloning manageiq sample app ==" + git clone https://github.com/ManageIQ/manageiq.git --branch morphy --depth 1 "$spec_manageiq" +fi diff --git a/bin/ci/after_script.sh b/bin/ci/after_script.sh deleted file mode 100644 index 193ba21943e..00000000000 --- a/bin/ci/after_script.sh +++ /dev/null @@ -1,16 +0,0 @@ -# this is *not* used in cross-repo - -(cd spec/manageiq ; git log -1 --oneline) - -if [ "$TEST_SUITE" = "spec:compile" ]; then - # Collapse Travis output https://github.com/travis-ci/travis-ci/issues/2158 - echo "travis_fold:start:GEMFILE_LOCK" - bundle show - echo "travis_fold:end:GEMFILE_LOCK" -fi - -if [ "$TEST_SUITE" = "spec:javascript" ]; then - echo "travis_fold:start:YARN_LOCK" - yarn list - echo "travis_fold:end:YARN_LOCK" -fi diff --git a/bin/ci/before_install.sh b/bin/ci/before_install.sh deleted file mode 100644 index 6e9469adaf3..00000000000 --- a/bin/ci/before_install.sh +++ /dev/null @@ -1,7 +0,0 @@ -if [ "$TEST_SUITE" = "spec:javascript" -o "$TEST_SUITE" = "spec:jest" -o "$TEST_SUITE" = "spec:compile" ]; then - # Check if `nvm` is available as a command or bash function - type nvm >/dev/null 2>&1 - if [ $? -ne 0 ]; then . ~/.nvm/nvm.sh; fi - - nvm install 12 -fi diff --git a/bin/ci/before_script.sh b/bin/ci/before_script.sh deleted file mode 100644 index df36a7a5f3d..00000000000 --- a/bin/ci/before_script.sh +++ /dev/null @@ -1,7 +0,0 @@ -if [ "$TEST_SUITE" = "spec:javascript" -o "$TEST_SUITE" = "spec:jest" -o "$TEST_SUITE" = "spec:compile" ]; then - # make sure yarn is installed, in the right version - bundle exec rake webpacker:check_yarn || npm install -g yarn - - # install & compile dependencies - bundle exec rake update:ui -fi diff --git a/bin/ci/dead_method_check.sh b/bin/ci/dead_method_check.sh index fe7e4f9a822..8e4c0926f7b 100644 --- a/bin/ci/dead_method_check.sh +++ b/bin/ci/dead_method_check.sh @@ -1,5 +1,5 @@ # Run only against PR that is based on master -if [ "$TRAVIS_PULL_REQUEST" != "false" -a "$TRAVIS_BRANCH" = "master" ]; then +if [ "$GITHUB_BASE_REF" = "master" ]; then OLD=`mktemp` NEW=`mktemp` diff --git a/bin/setup b/bin/setup index 68ea357ab15..10efe78bf46 100755 --- a/bin/setup +++ b/bin/setup @@ -1,20 +1,14 @@ #!/usr/bin/env ruby -require 'pathname' -require 'fileutils' + +require "pathname" gem_root = Pathname.new(__dir__).join("..") -spec_manageiq = gem_root.join("spec/manageiq") +system(gem_root.join("bin/before_install").to_s) -if ENV.key?("MANAGEIQ_REPO") - manageiq_repo = Pathname.new(ENV["MANAGEIQ_REPO"]) - puts "== Symlinking spec/manageiq to #{manageiq_repo}" +require gem_root.join("spec/manageiq/lib/manageiq/environment") +ManageIQ::Environment.manageiq_plugin_setup(gem_root) - FileUtils.rm_rf(spec_manageiq.expand_path) - FileUtils.ln_s(manageiq_repo.expand_path, spec_manageiq.expand_path) -elsif !spec_manageiq.exist? - puts "== Cloning manageiq sample app ==" - system "git clone https://github.com/ManageIQ/manageiq.git --branch morphy --depth 1 spec/manageiq" +if %w[spec:compile spec:javascript spec:jest].include?(ENV["TEST_SUITE"]) + puts "\n== Updating UI assets ==" + exit $?.exitstatus unless system("bundle exec rake update:ui") end - -require gem_root.join("spec/manageiq/lib/manageiq/environment").to_s -ManageIQ::Environment.manageiq_plugin_setup(gem_root) diff --git a/bin/update b/bin/update index 398ac4d0ae5..4846db4826e 100755 --- a/bin/update +++ b/bin/update @@ -13,4 +13,5 @@ end require gem_root.join("spec/manageiq/lib/manageiq/environment").to_s ManageIQ::Environment.manageiq_plugin_update(gem_root) +puts "\n== Updating UI assets ==" ManageIQ::Environment.update_ui diff --git a/lib/tasks/manageiq/ui_tasks.rake b/lib/tasks/manageiq/ui_tasks.rake index 2fd22ce21d0..275d82f4f62 100644 --- a/lib/tasks/manageiq/ui_tasks.rake +++ b/lib/tasks/manageiq/ui_tasks.rake @@ -91,7 +91,7 @@ end # compile and clobber when running assets:* tasks if Rake::Task.task_defined?("assets:precompile") Rake::Task["assets:precompile"].enhance do - Rake::Task["webpack:compile"].invoke unless ENV["TRAVIS"] + Rake::Task["webpack:compile"].invoke unless ENV["CI"] end Rake::Task["assets:precompile"].actions.each do |action| @@ -103,7 +103,7 @@ end if Rake::Task.task_defined?("assets:clobber") Rake::Task["assets:clobber"].enhance do - Rake::Task["webpack:clobber"].invoke unless ENV["TRAVIS"] + Rake::Task["webpack:clobber"].invoke unless ENV["CI"] end Rake::Task["assets:clobber"].actions.each do |action| diff --git a/manageiq-ui-classic.gemspec b/manageiq-ui-classic.gemspec index 855bb981836..53f580e892f 100644 --- a/manageiq-ui-classic.gemspec +++ b/manageiq-ui-classic.gemspec @@ -34,7 +34,7 @@ Gem::Specification.new do |s| s.add_development_dependency "guard-rspec", '~> 4.7.3' s.add_development_dependency "manageiq-style" s.add_development_dependency "rails-controller-testing", '~> 1.0.2' - s.add_development_dependency "simplecov" + s.add_development_dependency "simplecov", "~> 0.16.1" # core because jasmine gem depends on major version only, meaning breakages when not the latest s.add_development_dependency "jasmine", "~> 3.4.0" diff --git a/spec/other/travis_spec.rb b/spec/other/travis_spec.rb deleted file mode 100644 index b3151abe2fa..00000000000 --- a/spec/other/travis_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -describe 'travis.yml' do - let(:travis) { YAML.safe_load(File.read(ManageIQ::UI::Classic::Engine.root.join('.travis.yml'))) } - let(:versions) { travis['rvm'] } - - it "matches versions and excludes for multiple ruby versions" do - if versions.length > 1 - excludes = travis.dig('matrix', 'exclude').map { |ex| ex['rvm'] }.sort.uniq - expect(excludes.length).to eq(versions.length - 1) - expect(versions[0..-2]).to eq(excludes) - end - end - - it "does not exclude any testsuite for single ruby version" do - if versions.length == 1 - excludes = travis.dig('matrix', 'exclude') - expect(excludes).to be(nil) - end - end -end