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