diff --git a/.gitignore b/.gitignore index bb422f7..0bbb03c 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ coverage.xml .kitchen .kitchen.local.yml kitchen.local.yml +junit-*.xml # Translations *.mo @@ -102,3 +103,20 @@ ENV/ # mypy .mypy_cache/ + +# Bundler +Gemfile.lock + +# copied `.md` files used for conversion to `.rst` using `m2r` +docs/*.md + +# Vim +*.sw? + +## Collected when centralising formulas (check and sort) +# `collectd-formula` +.pytest_cache/ +/.idea/ +Dockerfile.*_* +ignore/ +tmp/ diff --git a/.travis.yml b/.travis.yml index 1a78f20..b1f9805 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,92 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +stages: + - test + - commitlint + - name: release + if: branch = master AND type != pull_request + sudo: required cache: bundler language: ruby +dist: xenial services: - docker -before_install: - - bundle install - +# Make sure the instances listed below match up with +# the `platforms` defined in `kitchen.yml` +# NOTE: Please try to select up to six instances that add some meaningful +# testing of the formula's behaviour. If possible, try to refrain from +# the classical "chosing all the instances because I want to test on +# another/all distro/s" trap: it will just add time to the testing (see +# the discussion on #121). As an example, the set chosen below covers +# the most used distros families, systemd and non-systemd and the latest +# three supported Saltstack versions with python2 and 3. +# As for `kitchen.yml`, that should still contain all of the platforms, +# to allow for comprehensive local testing +# Ref: https://github.com/saltstack-formulas/template-formula/issues/118 +# Ref: https://github.com/saltstack-formulas/template-formula/issues/121 env: matrix: - - INSTANCE: deb-debian-9 - - INSTANCE: ubu16-ubuntu-1604 - - INSTANCE: ubu18-ubuntu-1804 - - INSTANCE: rpm-centos-7 - - INSTANCE: fed-fedora - - INSTANCE: sus-opensuse-leap-salt-minion + - INSTANCE: default-debian-10-develop-py3 + # - INSTANCE: default-ubuntu-1804-develop-py3 + # - INSTANCE: default-centos-7-develop-py3 + # - INSTANCE: default-fedora-30-develop-py3 + # - INSTANCE: default-opensuse-leap-15-develop-py3 + # - INSTANCE: default-amazonlinux-2-develop-py2 + # - INSTANCE: default-debian-9-2019-2-py3 + - INSTANCE: default-ubuntu-1804-2019-2-py3 + # - INSTANCE: default-centos-7-2019-2-py3 + # - INSTANCE: default-fedora-30-2019-2-py3 + # - INSTANCE: default-opensuse-leap-15-2019-2-py3 + - INSTANCE: default-amazonlinux-2-2019-2-py2 + # - INSTANCE: default-debian-9-2018-3-py2 + # - INSTANCE: default-ubuntu-1604-2018-3-py2 + # - INSTANCE: default-centos-7-2018-3-py2 + - INSTANCE: default-fedora-29-2018-3-py2 + - INSTANCE: default-opensuse-leap-15-2018-3-py2 + # - INSTANCE: default-amazonlinux-2-2018-3-py2 + # - INSTANCE: default-debian-8-2017-7-py2 + # - INSTANCE: default-ubuntu-1604-2017-7-py2 + - INSTANCE: default-centos-6-2017-7-py2 + # - INSTANCE: default-fedora-29-2017-7-py2 + # - INSTANCE: default-opensuse-leap-15-2017-7-py2 + # - INSTANCE: default-amazonlinux-2-2017-7-py2 script: - - bundle exec kitchen verify ${INSTANCE} + - bin/kitchen verify ${INSTANCE} + +jobs: + include: + # Define the commitlint stage + - stage: commitlint + language: node_js + node_js: lts/* + before_install: skip + script: + - npm install @commitlint/config-conventional -D + - npm install @commitlint/travis-cli -D + - commitlint-travis + # Define the release stage that runs semantic-release + - stage: release + language: node_js + node_js: lts/* + before_install: skip + script: + # Update `AUTHORS.md` + - export MAINTAINER_TOKEN=${GH_TOKEN} + - go get github.com/myii/maintainer + - maintainer contributor + + # Install all dependencies required for `semantic-release` + - npm install @semantic-release/changelog@3 -D + - npm install @semantic-release/exec@3 -D + - npm install @semantic-release/git@7 -D + deploy: + provider: script + skip_cleanup: true + script: + # Run `semantic-release` + - npx semantic-release@15 diff --git a/FORMULA b/FORMULA new file mode 100644 index 0000000..2f4e6c8 --- /dev/null +++ b/FORMULA @@ -0,0 +1,9 @@ +name: packages +os: Debian, Ubuntu, Raspbian, RedHat, Fedora, CentOS, Suse, openSUSE +os_family: Debian, RedHat, Suse +version: 3.2.1 +release: 1 +minimum_version: 2017.7 +summary: packages formula +description: Formula to install packages +top_level_dir: packages diff --git a/Gemfile b/Gemfile index d87d92d..3b36de3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,6 @@ source "https://rubygems.org" -gem "test-kitchen" -gem "kitchen-docker" -gem "kitchen-salt" -gem "kitchen-inspec" +gem 'kitchen-docker', '>= 2.9' +gem 'kitchen-salt', '>= 0.6.0' +gem 'kitchen-inspec', '>= 1.1' diff --git a/bin/kitchen b/bin/kitchen new file mode 100755 index 0000000..1cd44f3 --- /dev/null +++ b/bin/kitchen @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kitchen' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require "pathname" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", + Pathname.new(__FILE__).realpath) + +bundle_binstub = File.expand_path("../bundle", __FILE__) + +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.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("test-kitchen", "kitchen") diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..2f9d1aa --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], +}; diff --git a/README.rst b/docs/README.rst similarity index 70% rename from README.rst rename to docs/README.rst index 6539ebd..9505e4e 100644 --- a/README.rst +++ b/docs/README.rst @@ -1,11 +1,47 @@ -================ +.. _readme: + packages-formula ================ -A simple 'packages manager' formula, to install/remove packages without further -ado. +|img_travis| |img_sr| + +.. |img_travis| image:: https://travis-ci.com/saltstack-formulas/template-formula.svg?branch=master + :alt: Travis CI Build Status + :scale: 100% + :target: https://travis-ci.com/saltstack-formulas/template-formula +.. |img_sr| image:: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg + :alt: Semantic Release + :scale: 100% + :target: https://github.com/semantic-release/semantic-release + +A simple 'packages manager' formula, to install/remove packages without further + +.. contents:: **Table of Contents** + +General notes +------------- + +See the full `SaltStack Formulas installation and usage instructions +`_. + +If you are interested in writing or contributing to formulas, please pay attention to the `Writing Formula Section +`_. + +If you want to use this formula, please pay attention to the ``FORMULA`` file and/or ``git tag``, +which contains the currently released version. This formula is versioned according to `Semantic Versioning `_. + +See `Formula Versioning Section `_ for more details. + +Contributing to this repo +------------------------- + +**Commit message formatting is significant!!** + +Please see :ref:`How to contribute ` for more details. + +Available states +---------------- -.. image:: https://travis-ci.org/saltstack-formulas/packages-formula.svg?branch=master What this formula can do ======================== @@ -28,24 +64,18 @@ This formula is not intended to configure packages, nor setup services or daemon When you need to do that for a package, you should probably be using another formula. -.. note:: - - See the full `Salt Formulas installation and usage instructions - `_. - -Available states -================ - .. contents:: - :local: + :local: ``packages`` ------------- +^^^^^^^^^^^^ + +*Meta-state (This is a state that includes other states)*. Runs all the other states in the formula. ``packages.pkgs`` ------------------ +^^^^^^^^^^^^^^^^^ Allows you to manage system's packages. You can specify: @@ -98,7 +128,7 @@ Allows you to manage system's packages. You can specify: correct installation. ``packages.pips`` ------------------ +^^^^^^^^^^^^^^^^^ You can specify: @@ -113,7 +143,7 @@ You can specify: correct installation (ie, ``epel`` for RedHat families). ``packages.gems`` ------------------ +^^^^^^^^^^^^^^^^^ You can specify: @@ -128,7 +158,7 @@ You can specify: correct installation (ie, ``epel`` for RedHat families). ``packages.npms`` ------------------ +^^^^^^^^^^^^^^^^^ This formula **DOES NOT** install ``nodejs/npm``, as it's outside of its scope: nodejs/npm that comes with the distros is usually outdated, so it's required to add @@ -150,7 +180,7 @@ You can specify: correct installation (ie, ``epel`` for RedHat families). ``packages.archives`` -------------------- +^^^^^^^^^^^^^^^^^^^ 'Archive file` handler for common 'download' and 'checksum' states. All formats recognized by `salt.states.archive.extracted` (tar, rar, zip, etc) will be extracted. Alternatively `raw` formats are supported (`raw`, `bin`,) for standard and binary executable files. @@ -160,7 +190,7 @@ You can specify: ``packages.snaps`` ------------------ +^^^^^^^^^^^^^^^^^^ You can specify: @@ -187,7 +217,7 @@ You can specify: ``packages.remote_pkgs`` ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ You can specify a dictionary of remote system packages (deb/rpm) that you want to install, in the format: @@ -195,18 +225,47 @@ to install, in the format: ``name: url`` Testing -======= +------- -Testing is done with `Test Kitchen `_ -for machine setup and `inspec `_ -for integration tests. +Linux testing is done with ``kitchen-salt``. -Tested on +Requirements +^^^^^^^^^^^^ + +* Ruby +* Docker + +.. code-block:: bash + + $ gem install bundler + $ bundle install + $ bin/kitchen test [platform] + +Where ``[platform]`` is the platform name defined in ``kitchen.yml``, +e.g. ``debian-9-2019-2-py3``. + +``bin/kitchen converge`` +^^^^^^^^^^^^^^^^^^^^^^^^ + +Creates the docker instance and runs the ``template`` main state, ready for testing. + +``bin/kitchen verify`` +^^^^^^^^^^^^^^^^^^^^^^ + +Runs the ``inspec`` tests on the actual instance. + +``bin/kitchen destroy`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Removes the docker instance. + +``bin/kitchen test`` +^^^^^^^^^^^^^^^^^^^^ + +Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``. + +``bin/kitchen login`` +^^^^^^^^^^^^^^^^^^^^^ + +Gives you SSH access to the instance for manual testing. -* Debian/9 -* Debian/8 (with backports) -* Centos/7 -* Fedora/27 -* Ubuntu/16.04 -* Ubuntu/18.04 -* Opensuse/leap diff --git a/kitchen.yml b/kitchen.yml index e6a9296..e7da443 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -4,207 +4,148 @@ # For help on this file's format, see https://kitchen.ci/ driver: name: docker - -driver_config: use_sudo: false privileged: true - provision_command: mkdir -p /run/sshd + run_command: /lib/systemd/systemd # Make sure the platforms listed below match up with # the `env.matrix` instances defined in `.travis.yml` platforms: - # The `run_command` used for each platform is required to - # test `systemd` services in docker - - name: debian-9 - driver_config: - image: debian:9 - run_command: /lib/systemd/systemd + ## SALT `develop` + - name: debian-10-develop-py3 + driver: + image: netmanagers/salt-develop-py3:debian-10 provision_command: - - apt-get update && apt-get install -y udev locales git - - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh - - export PATH="${PATH}:/usr/local/go/bin" - - name: ubuntu-18.04 - driver_config: - image: ubuntu:18.04 - run_command: /lib/systemd/systemd + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python3 git develop + - name: ubuntu-1804-develop-py3 + driver: + image: netmanagers/salt-develop-py3:ubuntu-18.04 provision_command: - - apt-get update && apt-get install -y udev locales git - - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh - - export PATH="${PATH}:/usr/local/go/bin" - - name: ubuntu-16.04 - driver_config: - image: ubuntu:16.04 - run_command: /lib/systemd/systemd + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python3 git develop + - name: centos-7-develop-py3 + driver: + image: netmanagers/salt-develop-py3:centos-7 provision_command: - - apt-get update && apt-get install -y udev locales git - - locale-gen en_US.UTF-8 - - update-locale LANG=en_US.UTF-8 - - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh - - export PATH="${PATH}:/usr/local/go/bin" - - name: centos-7 - driver_config: - image: centos:7 + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python3 git develop + - name: fedora-30-develop-py3 + driver: + image: netmanagers/salt-develop-py3:fedora-30 + provision_command: + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python3 git develop + - name: opensuse-leap-15-develop-py3 + driver: + image: netmanagers/salt-develop-py3:opensuse-leap-15 + provision_command: + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python3 git develop run_command: /usr/lib/systemd/systemd + - name: amazonlinux-2-develop-py2 + driver: + image: netmanagers/salt-develop-py2:amazonlinux-2 provision_command: - - yum -y update && yum -y install udev git - # To test remote packages in RPM envs - - rpm --import https://zoom.us/linux/download/pubkey - - name: fedora - driver_config: - image: fedora + - curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com + - sh bootstrap-salt.sh -XdPbfrq -x python2 git develop + + ## SALT `2019.2` + - name: debian-9-2019-2-py3 + driver: + image: netmanagers/salt-2019.2-py3:debian-9 + - name: ubuntu-1804-2019-2-py3 + driver: + image: netmanagers/salt-2019.2-py3:ubuntu-18.04 + - name: centos-7-2019-2-py3 + driver: + image: netmanagers/salt-2019.2-py3:centos-7 + - name: fedora-30-2019-2-py3 + driver: + image: netmanagers/salt-2019.2-py3:fedora-30 + - name: opensuse-leap-15-2019-2-py3 + driver: + image: netmanagers/salt-2019.2-py3:opensuse-leap-15 run_command: /usr/lib/systemd/systemd - provision_command: - - yum -y update && yum -y install udev git - # To test remote packages in RPM envs - - rpm --import https://zoom.us/linux/download/pubkey - # As of February 2019, there have been problems getting `opensuse` to work: - # * `opensuse` is deprecated - # * `opensuse/leap` grabs `15.x`, which doesn't run the `inspec` tests - # * `opensuse/tumbleweed` doesn't install `salt-minion` - # * `opensuse/leap:42.3` does work - # * `opensuse/salt-minion` uses `42.3` with `salt-minion` pre-installed - - name: opensuse-leap-salt-minion - driver_config: - image: opensuse/salt-minion + - name: amazonlinux-2-2019-2-py2 + driver: + image: netmanagers/salt-2019.2-py2:amazonlinux-2 + + ## SALT `2018.3` + - name: debian-9-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:debian-9 + - name: ubuntu-1604-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:ubuntu-16.04 + - name: centos-7-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:centos-7 + - name: fedora-29-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:fedora-29 + - name: opensuse-leap-15-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:opensuse-leap-15 run_command: /usr/lib/systemd/systemd - provision_command: - - zypper refresh && zypper install -y udev git glibc-locale - - systemctl enable sshd.service - - cat /etc/os-release - # To test remote packages in RPM envs - - rpm --import https://zoom.us/linux/download/pubkey + - name: amazonlinux-2-2018-3-py2 + driver: + image: netmanagers/salt-2018.3-py2:amazonlinux-2 + + ## SALT `2017.7` + - name: debian-8-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:debian-8 + - name: ubuntu-1604-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:ubuntu-16.04 + - name: centos-6-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:centos-6 + run_command: /sbin/init + - name: fedora-29-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:fedora-29 + - name: opensuse-leap-15-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:opensuse-leap-15 + run_command: /usr/lib/systemd/systemd + - name: amazonlinux-2-2017-7-py2 + driver: + image: netmanagers/salt-2017.7-py2:amazonlinux-2 provisioner: name: salt_solo log_level: info + salt_install: none require_chef: false - salt_version: latest formula: packages salt_copy_filter: - .kitchen - .git - pillars_from_files: - packages.sls: pillar.example - pillars: - top.sls: - base: - '*': - - packages - state_top: - base: - '*': - - packages verifier: + # https://www.inspec.io/ name: inspec sudo: true # cli, documentation, html, progress, json, json-min, json-rspec, junit reporter: - cli - inspec_tests: - - path: test/integration/default suites: - - name: deb - excludes: - - ubuntu-16.04 - - ubuntu-18.04 - - centos-7 - - fedora - - opensuse-leap-salt-minion + - name: default provisioner: - dependencies: - - name: node - repo: git - source: https://github.com/saltstack-formulas/node-formula.git state_top: base: '*': - - node - packages + pillars: + top.sls: + base: + '*': + - packages pillars_from_files: packages.sls: pillar.example - pillars: - top.sls: - base: - '*': - - node - - packages - node.sls: - node: - version: 11.11.0-1nodesource1 - install_from_ppa: True - ppa: - repository_url: https://deb.nodesource.com/node_11.x - - - name: ubu18 - excludes: - - debian-9 - - ubuntu-16.04 - - centos-7 - - fedora - - opensuse-leap-salt-minion - provisioner: - pillars_from_files: - packages.sls: test/integration/default/pillar.example.ubuntu.1804 - - - name: ubu16 - excludes: - - debian-9 - - ubuntu-18.04 - - centos-7 - - fedora - - opensuse-leap-salt-minion - provisioner: - pillars_from_files: - packages.sls: test/integration/default/pillar.example.ubuntu.1604 - - - name: fed - excludes: - - debian-9 - - ubuntu-16.04 - - ubuntu-18.04 - - centos-7 - - opensuse-leap-salt-minion - provisioner: - pillars_from_files: - packages.sls: test/integration/default/pillar.example.fedora - - - name: sus - excludes: - - debian-9 - - ubuntu-16.04 - - ubuntu-18.04 - - centos-7 - - fedora - provisioner: - pillars_from_files: - packages.sls: test/integration/default/pillar.example.opensuse - - - name: rpm - excludes: - - debian-9 - - ubuntu-16.04 - - ubuntu-18.04 - - fedora - - opensuse-leap-salt-minion - provisioner: - dependencies: - - name: epel - repo: git - source: https://github.com/saltstack-formulas/epel-formula.git - state_top: - base: - '*': - - epel - - packages - pillars_from_files: - packages.sls: test/integration/default/pillar.example.redhat - pillars: - top.sls: - base: - '*': - - epel - - packages - epel.sls: - disabled: false + verifier: + inspec_tests: + - path: test/integration/default diff --git a/pre-commit_semantic-release.sh b/pre-commit_semantic-release.sh new file mode 100755 index 0000000..9d34d74 --- /dev/null +++ b/pre-commit_semantic-release.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +############################################################################### +# (A) Update `FORMULA` with `${nextRelease.version}` +############################################################################### +sed -i -e "s_^\(version:\).*_\1 ${1}_" FORMULA + + +############################################################################### +# (B) Use `m2r` to convert automatically produced `.md` docs to `.rst` +############################################################################### + +# Install `m2r` +sudo -H pip install m2r + +# Copy and then convert the `.md` docs +cp *.md docs/ +cd docs/ +m2r --overwrite *.md + +# Change excess `H1` headings to `H2` in converted `CHANGELOG.rst` +sed -i -e '/^=.*$/s/=/-/g' CHANGELOG.rst +sed -i -e '1,4s/-/=/g' CHANGELOG.rst + +# Use for debugging output, when required +# cat AUTHORS.rst +# cat CHANGELOG.rst + +# Return back to the main directory +cd .. diff --git a/release.config.js b/release.config.js new file mode 100644 index 0000000..afa0cb1 --- /dev/null +++ b/release.config.js @@ -0,0 +1,106 @@ +module.exports = { + branch: 'master', + plugins: [ + ['@semantic-release/commit-analyzer', { + preset: 'angular', + releaseRules: './release-rules.js', + }], + '@semantic-release/release-notes-generator', + ['@semantic-release/changelog', { + changelogFile: 'CHANGELOG.md', + changelogTitle: '# Changelog', + }], + ['@semantic-release/exec', { + prepareCmd: 'sh ./pre-commit_semantic-release.sh ${nextRelease.version}', + }], + ['@semantic-release/git', { + assets: ['*.md', 'docs/*.rst', 'FORMULA'], + }], + '@semantic-release/github', + ], + generateNotes: { + preset: 'angular', + writerOpts: { + // Required due to upstream bug preventing all types being displayed. + // Bug: https://github.com/conventional-changelog/conventional-changelog/issues/317 + // Fix: https://github.com/conventional-changelog/conventional-changelog/pull/410 + transform: (commit, context) => { + const issues = [] + + commit.notes.forEach(note => { + note.title = `BREAKING CHANGES` + }) + + // NOTE: Any changes here must be reflected in `CONTRIBUTING.md`. + if (commit.type === `feat`) { + commit.type = `Features` + } else if (commit.type === `fix`) { + commit.type = `Bug Fixes` + } else if (commit.type === `perf`) { + commit.type = `Performance Improvements` + } else if (commit.type === `revert`) { + commit.type = `Reverts` + } else if (commit.type === `docs`) { + commit.type = `Documentation` + } else if (commit.type === `style`) { + commit.type = `Styles` + } else if (commit.type === `refactor`) { + commit.type = `Code Refactoring` + } else if (commit.type === `test`) { + commit.type = `Tests` + } else if (commit.type === `build`) { + commit.type = `Build System` + // } else if (commit.type === `chore`) { + // commit.type = `Maintenance` + } else if (commit.type === `ci`) { + commit.type = `Continuous Integration` + } else { + return + } + + if (commit.scope === `*`) { + commit.scope = `` + } + + if (typeof commit.hash === `string`) { + commit.hash = commit.hash.substring(0, 7) + } + + if (typeof commit.subject === `string`) { + let url = context.repository + ? `${context.host}/${context.owner}/${context.repository}` + : context.repoUrl + if (url) { + url = `${url}/issues/` + // Issue URLs. + commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => { + issues.push(issue) + return `[#${issue}](${url}${issue})` + }) + } + if (context.host) { + // User URLs. + commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => { + if (username.includes('/')) { + return `@${username}` + } + + return `[@${username}](${context.host}/${username})` + }) + } + } + + // remove references that already appear in the subject + commit.references = commit.references.filter(reference => { + if (issues.indexOf(reference.issue) === -1) { + return true + } + + return false + }) + + return commit + }, + }, + }, +}; diff --git a/test/integration/default/README.md b/test/integration/default/README.md new file mode 100644 index 0000000..37cf963 --- /dev/null +++ b/test/integration/default/README.md @@ -0,0 +1,50 @@ +# InSpec Profile: `default` + +This shows the implementation of the `default` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). + +## Verify a profile + +InSpec ships with built-in features to verify a profile structure. + +```bash +$ inspec check default +Summary +------- +Location: default +Profile: profile +Controls: 4 +Timestamp: 2019-06-24T23:09:01+00:00 +Valid: true + +Errors +------ + +Warnings +-------- +``` + +## Execute a profile + +To run all **supported** controls on a local machine use `inspec exec /path/to/profile`. + +```bash +$ inspec exec default +.. + +Finished in 0.0025 seconds (files took 0.12449 seconds to load) +8 examples, 0 failures +``` + +## Execute a specific control from a profile + +To run one control from the profile use `inspec exec /path/to/profile --controls name`. + +```bash +$ inspec exec default --controls package +. + +Finished in 0.0025 seconds (files took 0.12449 seconds to load) +1 examples, 0 failures +``` + +See an [example control here](https://github.com/inspec/inspec/blob/master/examples/profile/controls/example.rb). diff --git a/test/integration/default/archives_spec.rb b/test/integration/default/controls/archives_spec.rb similarity index 100% rename from test/integration/default/archives_spec.rb rename to test/integration/default/controls/archives_spec.rb diff --git a/test/integration/default/gems_spec.rb b/test/integration/default/controls/gems_spec.rb similarity index 100% rename from test/integration/default/gems_spec.rb rename to test/integration/default/controls/gems_spec.rb diff --git a/test/integration/default/npms_spec.rb b/test/integration/default/controls/npms_spec.rb similarity index 100% rename from test/integration/default/npms_spec.rb rename to test/integration/default/controls/npms_spec.rb diff --git a/test/integration/default/pips_spec.rb b/test/integration/default/controls/pips_spec.rb similarity index 100% rename from test/integration/default/pips_spec.rb rename to test/integration/default/controls/pips_spec.rb diff --git a/test/integration/default/pkgs_spec.rb b/test/integration/default/controls/pkgs_spec.rb similarity index 100% rename from test/integration/default/pkgs_spec.rb rename to test/integration/default/controls/pkgs_spec.rb diff --git a/test/integration/default/remote_pkgs_spec.rb b/test/integration/default/controls/remote_pkgs_spec.rb similarity index 100% rename from test/integration/default/remote_pkgs_spec.rb rename to test/integration/default/controls/remote_pkgs_spec.rb diff --git a/test/integration/default/inspec.yml b/test/integration/default/inspec.yml new file mode 100644 index 0000000..befd377 --- /dev/null +++ b/test/integration/default/inspec.yml @@ -0,0 +1,14 @@ +name: default +title: packages formula +maintainer: SaltStack Formulas +license: Apache-2.0 +summary: Verify that the packages formula is setup and configured correctly +supports: + - platform-name: debian + - platform-name: ubuntu + - platform-name: centos + - platform-name: fedora + - platform-name: opensuse + - platform-name: suse + - platform-name: freebsd + - platform-name: amazon diff --git a/test/integration/default/pillar.example.fedora b/test/salt/pillar/pillar.example.fedora similarity index 100% rename from test/integration/default/pillar.example.fedora rename to test/salt/pillar/pillar.example.fedora diff --git a/test/integration/default/pillar.example.opensuse b/test/salt/pillar/pillar.example.opensuse similarity index 100% rename from test/integration/default/pillar.example.opensuse rename to test/salt/pillar/pillar.example.opensuse diff --git a/test/integration/default/pillar.example.redhat b/test/salt/pillar/pillar.example.redhat similarity index 100% rename from test/integration/default/pillar.example.redhat rename to test/salt/pillar/pillar.example.redhat diff --git a/test/integration/default/pillar.example.ubuntu.1604 b/test/salt/pillar/pillar.example.ubuntu.1604 similarity index 100% rename from test/integration/default/pillar.example.ubuntu.1604 rename to test/salt/pillar/pillar.example.ubuntu.1604 diff --git a/test/integration/default/pillar.example.ubuntu.1804 b/test/salt/pillar/pillar.example.ubuntu.1804 similarity index 100% rename from test/integration/default/pillar.example.ubuntu.1804 rename to test/salt/pillar/pillar.example.ubuntu.1804