From 4ec69b0cf747f54f4e6e28de0ccc0809c944b19f Mon Sep 17 00:00:00 2001 From: Alexander Olofsson <alexander.olofsson@liu.se> Date: Mon, 21 Nov 2022 09:33:23 +0100 Subject: [PATCH] Pipeline work --- .gitlab-ci.yml | 119 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 83 insertions(+), 36 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5346fb6..efd2161 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ --- variables: - CI_FOREMAN_PLUGIN: foreman_vmware_advanced - # CI_FOREMAN_WEB: true + CI_FOREMAN_PLUGIN: $CI_PROJECT_NAME + CI_FOREMAN_WEB: false POSTGRES_DB: test POSTGRES_USER: postgres @@ -23,7 +23,11 @@ lint: - gem install bundler -N - bundle config set path vendor - bundle install -j $(nproc) --retry=3 - - bundle exec rubocop app/ lib/ + - bundle exec rubocop app/ config/ db/ lib/ -f p -f ju -o junit.xml + + artifacts: + reports: + junit: junit.xml test: parallel: @@ -40,7 +44,6 @@ test: key: foreman-$FOREMAN_VERSION paths: - vendor/ruby - - node_modules when: always variables: @@ -49,53 +52,97 @@ test: DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL: "true" before_script: - # Set up Ruby build dependencies - - apt-get update -yqq - - apt-get install -yqq build-essential libcurl4-openssl-dev postgresql-client-13 zlib1g-dev libpq-dev - - apt-get install -yqq --no-install-recommends npm - - gem install bundler -N + - | + # Set up Foreman for tests + if [ -d "$CI_PROJECT_DIR/test" ]; then + # Set up Ruby build dependencies + apt-get update -yqq + apt-get install -yqq build-essential libcurl4-openssl-dev postgresql-client-13 zlib1g-dev libpq-dev + apt-get install -yqq --no-install-recommends npm + gem install bundler -N - # Install foreman - - FOREMAN_DIR="$(dirname "$CI_PROJECT_DIR")/foreman" - - git clone -b "$FOREMAN_VERSION" --depth=1 -- https://github.com/theforeman/foreman "$FOREMAN_DIR" - - cd "$FOREMAN_DIR" - - bundle config set path "$CI_PROJECT_DIR/vendor" - - bundle config set without console development ec2 gce journald libvirt openstack ovirt sqlite vmware - - bundle install -j $(nproc) --retry=3 + # Install foreman + FOREMAN_DIR="$(dirname "$CI_PROJECT_DIR")/foreman" + git clone -b "$FOREMAN_VERSION" --depth=1 -- https://github.com/theforeman/foreman "$FOREMAN_DIR" + cd "$FOREMAN_DIR" + bundle config set path "$CI_PROJECT_DIR/vendor" + bundle config set without console development ec2 gce journald libvirt openstack ovirt sqlite vmware + bundle install -j $(nproc) --retry=3 - # Configure database - - bundle exec rake db:create - - bundle exec rake db:migrate + # Configure database + bundle exec rake db:create + bundle exec rake db:migrate - # Install plugin - - "echo \"gem '$CI_FOREMAN_PLUGIN', path: '$CI_PROJECT_DIR'\" > bundler.d/local.rb" - - bundle install -j $(nproc) --retry=3 - - bundle exec rake db:migrate + # Install plugin + "echo \"gem '$CI_FOREMAN_PLUGIN', path: '$CI_PROJECT_DIR'\" > bundler.d/local.rb" + bundle install -j $(nproc) --retry=3 + bundle exec rake db:migrate - - | - if [ -n "$CI_FOREMAN_WEB" ]; then - mkdir -p "$CI_PROJECT_DIR/node_modules" - ln -s "$CI_PROJECT_DIR/node_modules" node_modules - npm install --legacy-peer-deps - bundle exec rake webpack:compile + if [ "$CI_FOREMAN_WEB" = "true" ]; then + mkdir -p "$CI_PROJECT_DIR/node_modules" + ln -s "$CI_PROJECT_DIR/node_modules" node_modules + npm install --legacy-peer-deps + bundle exec rake webpack:compile + fi fi + script: # Foreman-side tasks - cd "$FOREMAN_DIR" - | if [ -d "$CI_PROJECT_DIR/test" ]; then - bundle exec rake "test:$CI_FOREMAN_PLUGIN" - [ -d 'jenkins/reports' ] && mv jenkins/reports "$CI_PROJECT_DIR" + bundle exec rake "test:$CI_FOREMAN_PLUGIN" + [ -d 'jenkins/reports' ] && mv jenkins/reports "$CI_PROJECT_DIR" fi - - '[ -d "$CI_PROJECT_DIR/app/assets" ] && RAILS_ENV=production bundle exec rake "plugin:assets:precompile[$CI_FOREMAN_PLUGIN]"' - # Plugin-side tasks - - cd "$CI_PROJECT_DIR" + artifacts: + reports: + junit: reports/unit/*.xml + +package: + cache: + key: foreman-package + paths: + - vendor/ruby + - node_modules + when: always + + services: [] + before_script: + - | + # Install asset building dependencies if necessary + if [ -d "$CI_PROJECT_DIR/app/assets" ]; then + # Set up Ruby build dependencies + apt-get update -yqq + apt-get install -yqq build-essential libcurl4-openssl-dev zlib1g-dev + apt-get install -yqq --no-install-recommends npm + gem install bundler -N + + # Install foreman + FOREMAN_DIR="$(dirname "$CI_PROJECT_DIR")/foreman" + git clone --depth=1 -- https://github.com/theforeman/foreman "$FOREMAN_DIR" + cd "$FOREMAN_DIR" + bundle config set path "$CI_PROJECT_DIR/vendor" + bundle config set without console development ec2 gce journald libvirt openstack ovirt postgresql sqlite vmware + bundle install -j $(nproc) --retry=3 + + # Install plugin + echo "gem '$CI_FOREMAN_PLUGIN', path: '$CI_PROJECT_DIR'" > bundler.d/local.rb + bundle install -j $(nproc) --retry=3 + cd "$CI_PROJECT_DIR" + fi + + script: + - | + # Precompile any existing assets + if [ -d "$CI_PROJECT_DIR/app/assets" ]; then + cd "$FOREMAN_DIR" + RAILS_ENV=production bundle exec rake "plugin:assets:precompile[$CI_FOREMAN_PLUGIN]" + cd "$CI_PROJECT_DIR" + fi - gem build $CI_FOREMAN_PLUGIN.gemspec artifacts: paths: - '*.gem' - 'public' - reports: - junit: reports/unit/*.xml -- GitLab