ci: merge travis matrix, add `salt-lint` & `rubocop` to `lint` jobtags/v0.9.1
@@ -0,0 +1,12 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
--- | |||
# General overrides used across formulas in the org | |||
Metrics/LineLength: | |||
# Increase from default of `80` | |||
# Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) | |||
Max: 88 | |||
# Any offenses that should be fixed, e.g. collected via. `rubocop --auto-gen-config` | |||
Metrics/BlockLength: | |||
Max: 55 |
@@ -0,0 +1,13 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
--- | |||
exclude_paths: [] | |||
skip_list: | |||
# Using `salt-lint` for linting other files as well, such as Jinja macros/templates | |||
- 205 # Use ".sls" as a Salt State file extension | |||
# Skipping `207` and `208` because `210` is sufficient, at least for the time-being | |||
# I.e. Allows 3-digit unquoted codes to still be used, such as `644` and `755` | |||
- 207 # File modes should always be encapsulated in quotation marks | |||
- 208 # File modes should always contain a leading zero | |||
tags: [] | |||
verbosity: 1 |
@@ -1,56 +1,70 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
--- | |||
## Machine config | |||
dist: bionic | |||
stages: | |||
- test | |||
- lint | |||
- name: release | |||
if: branch = master AND type != pull_request | |||
sudo: required | |||
cache: bundler | |||
language: ruby | |||
services: | |||
- docker | |||
# Make sure the instances listed below match up with | |||
# the `platforms` defined in `kitchen.yml` | |||
env: | |||
matrix: | |||
- INSTANCE: repositories-debian-10-develop-py3 | |||
# - INSTANCE: preferences-debian-10-develop-py3 | |||
# - INSTANCE: repositories-ubuntu-1804-develop-py3 | |||
# - INSTANCE: preferences-ubuntu-1804-develop-py3 | |||
- INSTANCE: repositories-debian-9-2019-2-py3 | |||
- INSTANCE: preferences-debian-9-2019-2-py3 | |||
- INSTANCE: repositories-ubuntu-1804-2019-2-py3 | |||
- INSTANCE: preferences-ubuntu-1804-2019-2-py3 | |||
## Language and cache config | |||
language: ruby | |||
cache: bundler | |||
## Script to run for the test stage | |||
script: | |||
- bin/kitchen verify ${INSTANCE} | |||
- bin/kitchen verify "${INSTANCE}" | |||
## Stages and jobs matrix | |||
stages: | |||
- test | |||
- name: release | |||
if: branch = master AND type != pull_request | |||
jobs: | |||
include: | |||
# Define the `lint` stage (runs `yamllint` and `commitlint`) | |||
- stage: lint | |||
language: node_js | |||
## Define the test stage that runs the linters (and testing matrix, if applicable) | |||
# Run all of the linters in a single job | |||
- language: node_js | |||
node_js: lts/* | |||
env: Lint | |||
name: 'Lint: salt-lint, yamllint, rubocop & commitlint' | |||
before_install: skip | |||
script: | |||
# Install and run `salt-lint` | |||
- pip install --user salt-lint | |||
- git ls-files | grep '\.sls$\|\.jinja$\|\.j2$\|\.tmpl$' | |||
| xargs -I {} salt-lint {} | |||
# Install and run `yamllint` | |||
# Need at least `v1.17.0` for the `yaml-files` setting | |||
- pip install --user yamllint>=1.17.0 | |||
- yamllint -s . | |||
# Install and run `rubocop` | |||
- gem install rubocop | |||
- rubocop -d | |||
# Install and run `commitlint` | |||
- npm install @commitlint/config-conventional -D | |||
- npm install @commitlint/travis-cli -D | |||
- commitlint-travis | |||
# Define the release stage that runs `semantic-release` | |||
## Define the rest of the matrix based on Kitchen testing | |||
# Make sure the instances listed below match up with | |||
# the `platforms` defined in `kitchen.yml` | |||
- env: INSTANCE=repositories-debian-10-develop-py3 | |||
# - env: INSTANCE=preferences-debian-10-develop-py3 | |||
# - env: INSTANCE=repositories-ubuntu-1804-develop-py3 | |||
# - env: INSTANCE=preferences-ubuntu-1804-develop-py3 | |||
- env: INSTANCE=repositories-debian-9-2019-2-py3 | |||
- env: INSTANCE=preferences-debian-9-2019-2-py3 | |||
- env: INSTANCE=repositories-ubuntu-1804-2019-2-py3 | |||
- env: INSTANCE=preferences-ubuntu-1804-2019-2-py3 | |||
## Define the release stage that runs `semantic-release` | |||
- stage: release | |||
language: node_js | |||
node_js: lts/* | |||
env: Release | |||
name: 'Run semantic-release inc. file updates to AUTHORS, CHANGELOG & FORMULA' | |||
before_install: skip | |||
script: | |||
# Update `AUTHORS.md` |
@@ -17,6 +17,7 @@ yaml-files: | |||
# Default settings | |||
- '*.yaml' | |||
- '*.yml' | |||
- .salt-lint | |||
- .yamllint | |||
# SaltStack Formulas additional settings | |||
- '*.example' |
@@ -1,6 +1,7 @@ | |||
source "https://rubygems.org" | |||
# frozen_string_literal: true | |||
source 'https://rubygems.org' | |||
gem 'kitchen-docker', '>= 2.9' | |||
gem 'kitchen-salt', '>= 0.6.0' | |||
gem 'kitchen-inspec', '>= 1.1' | |||
gem 'kitchen-salt', '>= 0.6.0' |
@@ -8,22 +8,25 @@ | |||
# this file is here to facilitate running it. | |||
# | |||
require "pathname" | |||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", | |||
Pathname.new(__FILE__).realpath) | |||
require 'pathname' | |||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', | |||
Pathname.new(__FILE__).realpath) | |||
bundle_binstub = File.expand_path("../bundle", __FILE__) | |||
bundle_binstub = File.expand_path('bundle', __dir__) | |||
if File.file?(bundle_binstub) | |||
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ | |||
load(bundle_binstub) | |||
else | |||
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. | |||
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") | |||
abort( | |||
'Your `bin/bundle` was not generated by Bundler, '\ | |||
'so this binstub cannot run. Replace `bin/bundle` by running '\ | |||
'`bundle binstubs bundler --force`, then run this command again.' | |||
) | |||
end | |||
end | |||
require "rubygems" | |||
require "bundler/setup" | |||
require 'rubygems' | |||
require 'bundler/setup' | |||
load Gem.bin_path("test-kitchen", "kitchen") | |||
load Gem.bin_path('test-kitchen', 'kitchen') |
@@ -1,3 +1,5 @@ | |||
# frozen_string_literal: true | |||
control 'Apt preferences' do | |||
title 'should be configured' | |||
@@ -18,7 +20,11 @@ control 'Apt preferences' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match("Package: rspamd\nPin: origin rspamd.com\nPin-Priority: 650\n") } | |||
its(:content) do | |||
should match( | |||
"Package: rspamd\nPin: origin rspamd.com\nPin-Priority: 650\n" | |||
) | |||
end | |||
end | |||
describe file('/etc/apt/preferences.d/01-all') do | |||
@@ -26,7 +32,11 @@ control 'Apt preferences' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match("Package: *\nPin: release stable\nPin-Priority: 610\n") } | |||
its(:content) do | |||
should match( | |||
"Package: *\nPin: release stable\nPin-Priority: 610\n" | |||
) | |||
end | |||
end | |||
describe file('/etc/apt/preferences.d/02-all') do | |||
@@ -34,7 +44,11 @@ control 'Apt preferences' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match("Package: *\nPin: release testing\nPin-Priority: 600\n") } | |||
its(:content) do | |||
should match( | |||
"Package: *\nPin: release testing\nPin-Priority: 600\n" | |||
) | |||
end | |||
end | |||
describe file('/etc/apt/preferences.d/03-all') do | |||
@@ -42,6 +56,10 @@ control 'Apt preferences' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match("Package: *\nPin: release unstable\nPin-Priority: 50\n") } | |||
its(:content) do | |||
should match( | |||
"Package: *\nPin: release unstable\nPin-Priority: 50\n" | |||
) | |||
end | |||
end | |||
end |
@@ -1,11 +1,13 @@ | |||
# frozen_string_literal: true | |||
control 'Apt repositories' do | |||
title 'should be configured' | |||
if os[:name] == 'ubuntu' | |||
keyring_package = 'ubuntu-keyring' | |||
else | |||
keyring_package = 'debian-archive-keyring' | |||
end | |||
keyring_package = if os[:name] == 'ubuntu' | |||
'ubuntu-keyring' | |||
else | |||
'debian-archive-keyring' | |||
end | |||
describe package(keyring_package) do | |||
it { should be_installed } | |||
@@ -28,7 +30,11 @@ control 'Apt repositories' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match(%r{deb \[arch=amd64\] http://repository.spotify.com stable non-free}) } | |||
its(:content) do | |||
should match( | |||
%r{deb \[arch=amd64\] http://repository.spotify.com stable non-free} | |||
) | |||
end | |||
end | |||
describe file('/etc/apt/sources.list.d/heroku-binary.list') do | |||
@@ -36,6 +42,10 @@ control 'Apt repositories' do | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its(:content) { should match(%r{deb \[arch=amd64\] https://cli-assets.heroku.com/apt ./}) } | |||
its(:content) do | |||
should match( | |||
%r{deb \[arch=amd64\] https://cli-assets.heroku.com/apt ./} | |||
) | |||
end | |||
end | |||
end |