|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Error out if there are any failures |
| 4 | +set -e |
| 5 | +set -o pipefail |
| 6 | +set -u |
| 7 | + |
| 8 | +# Notes |
| 9 | +# xargs -P2 is used to run 2 parallel processes at once. This speeds up |
| 10 | +# performance on multi-core systems. |
| 11 | + |
| 12 | +if [ -e /proc/cpuinfo ]; then |
| 13 | + cores=$(awk 'BEGIN { c = 0 }; $1 == "processor" { c++ }; END { print c }' /proc/cpuinfo) |
| 14 | +else |
| 15 | + cores=2 |
| 16 | +fi |
| 17 | + |
| 18 | +# Use Puppet Enterprise Ruby to check ruby and yaml files |
| 19 | +export PATH="/opt/puppetlabs/puppet/bin:/opt/puppetlabs/bin:$PATH" |
| 20 | + |
| 21 | +# Localize Gems on a per-job basis to prevent conflicts |
| 22 | +gem_home="$(gem env gempath | cut -d: -f1)" |
| 23 | +# Trim off the leading part of $HOME |
| 24 | +gem_suffix=${gem_home##*/.gem/} |
| 25 | +# Set GEM_HOME to a job specific location |
| 26 | +export GEM_HOME="${HOME}/jobs/${CI_JOB_NAME:-lint}/gem/${gem_suffix}" |
| 27 | + |
| 28 | +# If we need to install a gem, do so into HOME |
| 29 | +# e.g. /home/gitlab-runner/.gem/ruby/2.1.0 |
| 30 | +export PATH="${GEM_HOME}/bin:$PATH" |
| 31 | + |
| 32 | +echo '######## BEGIN DEPENDENCY SETUP #########' |
| 33 | + |
| 34 | +# Display the gem environment |
| 35 | +gem env |
| 36 | + |
| 37 | +if ! (which bundle 2>&1 >/dev/null); then |
| 38 | + gem install bundler --no-ri --no-rdoc |
| 39 | +fi |
| 40 | + |
| 41 | +# List the files changes from $BASEBRANCH on stdout |
| 42 | +files_changed() { |
| 43 | + # File status flags: |
| 44 | + # M modified - File has been modified |
| 45 | + # C copy-edit - File has been copied and modified |
| 46 | + # R rename-edit - File has been renamed and modified |
| 47 | + # A added - File has been added |
| 48 | + # D deleted - File has been deleted |
| 49 | + # U unmerged - File has conflicts after a merge |
| 50 | + git diff --name-status "${BASEBRANCH:=production}" \ |
| 51 | + | awk '$1 ~ /^[MCRA]$/' \ |
| 52 | + | cut -f2- |
| 53 | +} |
| 54 | + |
| 55 | +# Install dependencies |
| 56 | +bundle install |
| 57 | + |
| 58 | +echo '######## END DEPENDENCY SETUP #########' |
| 59 | +echo |
| 60 | +echo |
| 61 | +echo '######## BEGIN LINT CHECKS #########' |
| 62 | +# Lint only the manifest files changed |
| 63 | +files_changed \ |
| 64 | + | awk '/manifests\/.*\.(pp)$/' \ |
| 65 | + | xargs --no-run-if-empty -t -P$cores -n1 \ |
| 66 | + bundle exec puppet-lint |
| 67 | + |
| 68 | +echo '######## END LINT CHECKS #########' |
| 69 | + |
| 70 | +# vim:tabstop=2 |
| 71 | +# vim:shiftwidth=2 |
| 72 | +# vim:expandtab |
0 commit comments