瀏覽代碼

Merge pull request #44 from netmanagers/master

Update testing environment, attempt to use new formula format
tags/v0.8.1
Imran Iqbal 5 年之前
父節點
當前提交
13e4569921
沒有連結到貢獻者的電子郵件帳戶。
共有 25 個檔案被更改,包括 898 行新增205 行删除
  1. +111
    -1
      .gitignore
  2. +0
    -38
      .kitchen.yml
  3. +68
    -0
      .travis.yml
  4. +9
    -0
      FORMULA
  5. +6
    -0
      Gemfile
  6. +1
    -1
      LICENSE
  7. +0
    -68
      README.rst
  8. +41
    -42
      apt/map.jinja
  9. +29
    -0
      bin/kitchen
  10. +3
    -0
      commitlint.config.js
  11. +158
    -0
      docs/CONTRIBUTING.rst
  12. +145
    -0
      docs/README.rst
  13. +67
    -0
      kitchen.yml
  14. +3
    -0
      pillar.example
  15. +30
    -0
      pre-commit_semantic-release.sh
  16. +18
    -0
      release-rules.js
  17. +106
    -0
      release.config.js
  18. +9
    -10
      test/integration/preferences/controls/preferences_spec.rb
  19. +8
    -0
      test/integration/preferences/inspec.yml
  20. +41
    -0
      test/integration/repositories/controls/repositories_spec.rb
  21. +8
    -0
      test/integration/repositories/inspec.yml
  22. +0
    -36
      test/integration/repositories/serverspec/repositories_spec.rb
  23. +18
    -0
      test/salt/pillar/preferences.pillar.sls
  24. +19
    -0
      test/salt/pillar/repositories.pillar.sls
  25. +0
    -9
      test/shared/spec_helper.rb

+ 111
- 1
.gitignore 查看文件

@@ -1,3 +1,113 @@
*.swp
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a packager
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.kitchen
.kitchen.local.yml
kitchen.local.yml

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# dotenv
.env

# virtualenv
.venv
venv/
ENV/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# Bundler
Gemfile.lock

# copied `.md` files used for conversion to `.rst` using `m2r`
docs/*.md

# Vim
*.sw?

+ 0
- 38
.kitchen.yml 查看文件

@@ -1,38 +0,0 @@
---
driver:
name: vagrant

platforms:
- name: debian-jessie64
driver_config:
box: ssplatt/salt-deb-8

provisioner:
name: salt_solo
salt_version: 2015.8.8
data_path: test/shared
is_file_root: true
pillars-from-files:
apt.sls: pillar.example
pillars:
top.sls:
base:
'*':
- apt
grains:
os_family: Debian

suites:
- name: repositories
provisioner:
state_top:
base:
'*':
- apt.repositories
- apt.update
- name: preferences
provisioner:
state_top:
base:
'*':
- apt.preferences

+ 68
- 0
.travis.yml 查看文件

@@ -0,0 +1,68 @@
stages:
- test
- commitlint
- 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`
# 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: repositories-debian-9-2019-2-py3
- INSTANCE: repositories-ubuntu-1804-2019-2-py3
- INSTANCE: preferences-debian-9-2019-2-py3
- INSTANCE: preferences-ubuntu-1804-2019-2-py3

script:
- bundle exec 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

+ 9
- 0
FORMULA 查看文件

@@ -0,0 +1,9 @@
name: apt
os: Debian, Ubuntu, Raspbian
os_family: Debian
version: 0.2.0
release: 1
minimum_version: 2017.7
summary: Apt formula
description: Formula to configure APT and related resources
top_level_dir: apt

+ 6
- 0
Gemfile 查看文件

@@ -0,0 +1,6 @@
source "https://rubygems.org"

gem 'kitchen-docker', '>= 2.9'
gem 'kitchen-salt', '>= 0.6.0'
gem 'kitchen-inspec', '>= 1.1'


+ 1
- 1
LICENSE 查看文件

@@ -1,4 +1,4 @@
Copyright (c) 2013-2015 Salt Stack Formulas
Copyright (c) 2014 Salt Stack Formulas

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

+ 0
- 68
README.rst 查看文件

@@ -1,68 +0,0 @@
apt
===

Formulas to update, upgrade, and dist-upgrade within apt.

.. note::

See the full `Salt Formulas installation and usage instructions
<http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.

Available states
================

.. contents::
:local:

``apt.dist_upgrade``
--------------------

Runs ``apt-get -y dist-upgrade``.

``apt.update``
--------------

Runs ``apt-get -y update``.

``apt.upgrade``
---------------

Runs ``apt-get -y upgrade``.

``apt.repositories``
--------------------

Allows you to configure and manage repositories from pillar. Check ``pillar.example``
to see possible values. If used and no repositories are provided, sane default
values from ``map.jinja`` are used.

Check https://wiki.debian.org/SourcesList for an explanation about the resulting
files structure.

``apt.preferences``
-------------------

Allows you to configure and manage apt's preferences from pillar. Check
``pillar.example`` to see possible values. If used and no repositories are
provided, sane default values from ``map.jinja`` are used.

Check https://wiki.debian.org/AptPreferences?action=show&redirect=preferences
and ``man 5 apt_preferences`` for an explanation about the resulting files structure.

``apt.ppa``
-----------
Installs ``python-software-properties``
(``$ /usr/bin/apt-add-repository ppa:user/repository``).

``apt.unattended``
------------------
Installs and configures ``unattended-upgrades``

``apt.transports.debtorrent``
-------------------------------
Installs ``apt-transport-debtorrent``.

``apt.transports.https``
--------------------------
Installs ``apt-transport-https``.


+ 41
- 42
apt/map.jinja 查看文件

@@ -20,27 +20,26 @@
'default_url': 'http://deb.debian.org/debian/',
'default_keyring_package': 'debian-archive-keyring',
'repositories': {
'sane_default': {
'distro': distribution,
'url': 'http://deb.debian.org/debian/',
'arch': arch,
'comps': ['main'],
},
'security-stable': {
'distro': distribution ~ '/updates',
'url': 'http://security.debian.org/',
'arch': arch,
'comps': ['main'],
},
'default-updates': {
'distro': distribution ~ '-updates',
'url': 'http://deb.debian.org/debian/',
'arch': arch,
'comps': ['main'],
},
'sane_default': {
'distro': distribution,
'url': 'http://deb.debian.org/debian/',
'arch': arch,
'comps': ['main'],
},
'security-stable': {
'distro': distribution ~ '/updates',
'url': 'http://security.debian.org/',
'arch': arch,
'comps': ['main'],
},
'default-updates': {
'distro': distribution ~ '-updates',
'url': 'http://deb.debian.org/debian/',
'arch': arch,
'comps': ['main'],
},
},
},

'Ubuntu': {
'pkgs': ['unattended-upgrades'],
'confd_dir': '/etc/apt/apt.conf.d',
@@ -60,28 +59,28 @@
'default_url': 'http://archive.ubuntu.com/ubuntu/',
'default_keyring_package': 'ubuntu-keyring',
'repositories': {
'default': {
'distro': distribution,
'url': 'http://archive.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},
'default-security': {
'distro': distribution ~ '-security',
'url': 'http://security.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},

'default-updates': {
'distro': distribution ~ '-updates',
'url': 'http://archive.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},

'default': {
'distro': distribution,
'url': 'http://archive.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},
'default-security': {
'distro': distribution ~ '-security',
'url': 'http://security.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},
'default-updates': {
'distro': distribution ~ '-updates',
'url': 'http://archive.ubuntu.com/ubuntu/',
'arch': arch,
'comps': ['main'],
},
},
},

}, grain='os', merge=salt['pillar.get']('apt:lookup'), default='Debian') %}

}, grain='os', merge=salt['grains.filter_by']({
'Mint': {
'keyring_package': 'linuxmint-keyring'
},
}, grain='oscodename', merge=salt['pillar.get']('apt:lookup'), default='Debian')) %}

+ 29
- 0
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")

+ 3
- 0
commitlint.config.js 查看文件

@@ -0,0 +1,3 @@
module.exports = {
extends: ['@commitlint/config-conventional'],
};

+ 158
- 0
docs/CONTRIBUTING.rst 查看文件

@@ -0,0 +1,158 @@
.. _contributing:

How to contribute
=================

This document will eventually outline all aspects of guidance to make your contributing experience a fruitful and enjoyable one.
What it already contains is information about *commit message formatting* and how that directly affects the numerous automated processes that are used for this repo.
It also covers how to contribute to this *formula's documentation*.

.. contents:: **Table of Contents**

Overview
--------

Submitting a pull request is more than just code!
To achieve a quality product, the *tests* and *documentation* need to be updated as well.
An excellent pull request will include these in the changes, wherever relevant.

Commit message formatting
-------------------------

Since every type of change requires making Git commits,
we will start by covering the importance of ensuring that all of your commit
messages are in the correct format.

Automation of multiple processes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This formula uses `semantic-release <https://github.com/semantic-release/semantic-release>`_ for automating numerous processes such as bumping the version number appropriately, creating new tags/releases and updating the changelog.
The entire process relies on the structure of commit messages to determine the version bump, which is then used for the rest of the automation.

Full details are available in the upstream docs regarding the `Angular Commit Message Conventions <https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines>`_.
The key factor is that the first line of the commit message must follow this format:

.. code-block::

type(scope): subject


* E.g. ``docs(contributing): add commit message formatting instructions``.

Besides the version bump, the changelog and release notes are formatted accordingly.
So based on the example above:

..

.. raw:: html

<h3>Documentation</h3>

* **contributing:** add commit message formatting instructions


* The ``type`` translates into a ``Documentation`` sub-heading.
* The ``(scope):`` will be shown in bold text without the brackets.
* The ``subject`` follows the ``scope`` as standard text.

Linting commit messages in Travis CI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This formula uses `commitlint <https://github.com/conventional-changelog/commitlint>`_ for checking commit messages during CI testing.
This ensures that they are in accordance with the ``semantic-release`` settings.

For more details about the default settings, refer back to the ``commitlint`` `reference rules <https://conventional-changelog.github.io/commitlint/#/reference-rules>`_.

Relationship between commit type and version bump
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This formula applies some customisations to the defaults, as outlined in the table below,
based upon the `type <https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type>`_ of the commit:

.. list-table::
:name: commit-type-vs-version-bump
:header-rows: 1
:stub-columns: 0
:widths: 1,2,3,1,1

* - Type
- Heading
- Description
- Bump (default)
- Bump (custom)
* - ``build``
- Build System
- Changes related to the build system
- –
-
* - ``chore``
- –
- Changes to the build process or auxiliary tools and libraries such as
documentation generation
- –
-
* - ``ci``
- Continuous Integration
- Changes to the continuous integration configuration
- –
-
* - ``docs``
- Documentation
- Documentation only changes
- –
- 0.0.1
* - ``feat``
- Features
- A new feature
- 0.1.0
-
* - ``fix``
- Bug Fixes
- A bug fix
- 0.0.1
-
* - ``perf``
- Performance Improvements
- A code change that improves performance
- 0.0.1
-
* - ``refactor``
- Code Refactoring
- A code change that neither fixes a bug nor adds a feature
- –
- 0.0.1
* - ``revert``
- Reverts
- A commit used to revert a previous commit
- –
- 0.0.1
* - ``style``
- Styles
- Changes that do not affect the meaning of the code (white-space,
formatting, missing semi-colons, etc.)
- –
- 0.0.1
* - ``test``
- Tests
- Adding missing or correcting existing tests
- –
- 0.0.1

Use ``BREAKING CHANGE`` to trigger a ``major`` version change
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Adding ``BREAKING CHANGE`` to the footer of the extended description of the commit message will **always** trigger a ``major`` version change, no matter which type has been used.
This will be appended to the changelog and release notes as well.
To preserve good formatting of these notes, the following format is prescribed:

* ``BREAKING CHANGE: <explanation in paragraph format>.``

An example of that:

.. code-block:: git

...

BREAKING CHANGE: With the removal of all of the `.sls` files under
`template package`, this formula no longer supports the installation of
packages.

+ 145
- 0
docs/README.rst 查看文件

@@ -0,0 +1,145 @@
.. _readme:

apt
===

|img_travis| |img_sr|

.. |img_travis| image:: https://travis-ci.com/saltstack-formulas/apt-formula.svg?branch=master
:alt: Travis CI Build Status
:scale: 100%
:target: https://travis-ci.com/saltstack-formulas/apt-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 formula to configure and manage update, upgrade, and dist-upgrade within apt.

.. contents:: **Table of Contents**

General notes
-------------

See the full `SaltStack Formulas installation and usage instructions
<https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.

If you are interested in writing or contributing to formulas, please pay attention to the `Writing Formula Section
<https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html#writing-formulas>`_.

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 <http://semver.org/>`_.

See `Formula Versioning Section <https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html#versioning>`_ for more details.

Contributing to this repo
-------------------------

**Commit message formatting is significant!!**

Please see :ref:`How to contribute <CONTRIBUTING>` for more details.

Available states
----------------

.. contents::
:local:

``apt.dist_upgrade``
^^^^^^^^^^^^^^^^^^^^

Runs ``apt-get -y dist-upgrade``.

``apt.update``
^^^^^^^^^^^^^^

Runs ``apt-get -y update``.

``apt.upgrade``
^^^^^^^^^^^^^^^

Runs ``apt-get -y upgrade``.

``apt.repositories``
^^^^^^^^^^^^^^^^^^^^

Allows you to configure and manage repositories from pillar. Check ``pillar.example``
to see possible values. If used and no repositories are provided, sane default
values from ``map.jinja`` are used.

Check https://wiki.debian.org/SourcesList for an explanation about the resulting
files structure.

``apt.preferences``
^^^^^^^^^^^^^^^^^^^

Allows you to configure and manage apt's preferences from pillar. Check
``pillar.example`` to see possible values. If used and no repositories are
provided, sane default values from ``map.jinja`` are used.

Check https://wiki.debian.org/AptPreferences?action=show&redirect=preferences
and ``man 5 apt_preferences`` for an explanation about the resulting files structure.

``apt.ppa``
^^^^^^^^^^^
Installs ``python-software-properties``
(``$ /usr/bin/apt-add-repository ppa:user/repository``).

``apt.unattended``
^^^^^^^^^^^^^^^^^^
Installs and configures ``unattended-upgrades``

``apt.transports.debtorrent``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Installs ``apt-transport-debtorrent``.

``apt.transports.https``
^^^^^^^^^^^^^^^^^^^^^^^^
Installs ``apt-transport-https``. **Note that `apt-transport-https` has been deprecated
since Debian 9 and it's now a dummy package**

Testing
-------

Linux testing is done with ``kitchen-salt``.

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 ``apt`` 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.


+ 67
- 0
kitchen.yml 查看文件

@@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
# For help on this file's format, see https://kitchen.ci/
driver:
name: docker
use_sudo: false
privileged: true
run_command: /lib/systemd/systemd

# Make sure the platforms listed below match up with
# the `env.matrix` instances defined in `.travis.yml`
platforms:
- 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

provisioner:
name: salt_solo
log_level: info
salt_install: none
require_chef: false
formula: apt
salt_copy_filter:
- .kitchen
- .git
pillars:
top.sls:
base:
'*':
- apt

verifier:
# https://www.inspec.io/
name: inspec
sudo: true
# cli, documentation, html, progress, json, json-min, json-rspec, junit
reporter:
- cli

suites:
- name: repositories
provisioner:
state_top:
base:
'*':
- apt.repositories
- apt.update
pillars_from_files:
apt.sls: test/salt/pillar/repositories.pillar.sls
verifier:
inspec_tests:
- path: test/integration/repositories
- name: preferences
provisioner:
state_top:
base:
'*':
- apt.preferences
pillars_from_files:
apt.sls: test/salt/pillar/preferences.pillar.sls
verifier:
inspec_tests:
- path: test/integration/preferences

+ 3
- 0
pillar.example 查看文件

@@ -1,3 +1,6 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
apt:
# Set the right keyring for the distro (ie ubuntu-keyring or ...)
keyring_package: debian-archive-keyring

+ 30
- 0
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 ..

+ 18
- 0
release-rules.js 查看文件

@@ -0,0 +1,18 @@
// No release is triggered for the types commented out below.
// Commits using these types will be incorporated into the next release.
//
// NOTE: Any changes here must be reflected in `CONTRIBUTING.md`.
module.exports = [
{breaking: true, release: 'major'},
// {type: 'build', release: 'patch'},
// {type: 'chore', release: 'patch'},
// {type: 'ci', release: 'patch'},
{type: 'docs', release: 'patch'},
{type: 'feat', release: 'minor'},
{type: 'fix', release: 'patch'},
{type: 'perf', release: 'patch'},
{type: 'refactor', release: 'patch'},
{type: 'revert', release: 'patch'},
{type: 'style', release: 'patch'},
{type: 'test', release: 'patch'},
];

+ 106
- 0
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
},
},
},
};

test/integration/preferences/serverspec/preferences_spec.rb → test/integration/preferences/controls/preferences_spec.rb 查看文件

@@ -1,48 +1,47 @@
require_relative '../../../kitchen/data/spec_helper'

describe 'apt.preferences' do
control 'Apt preferences' do
title 'should be configured'

describe file('/etc/apt/preferences') do
it { should_not exist }
it { should exist }
its(:size) { should eq 0 }
end

describe file('/etc/apt/preferences.d') do
it { should be_directory }
it { should be_mode 755 }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its('mode') { should cmp '0755' }
end

describe file('/etc/apt/preferences.d/00-rspamd') do
it { should exist }
it { should be_mode 644 }
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") }
end

describe file('/etc/apt/preferences.d/01-all') do
it { should exist }
it { should be_mode 644 }
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") }
end

describe file('/etc/apt/preferences.d/02-all') do
it { should exist }
it { should be_mode 644 }
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") }
end

describe file('/etc/apt/preferences.d/03-all') do
it { should exist }
it { should be_mode 644 }
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") }
end

end

+ 8
- 0
test/integration/preferences/inspec.yml 查看文件

@@ -0,0 +1,8 @@
name: preferences
title: Apt Formula
maintainer: Saltstack-formulas org
license: Apache-2.0
summary: Verify that the apt preferences are configured correctly
supports:
- os-name: debian
- os-name: ubuntu

+ 41
- 0
test/integration/repositories/controls/repositories_spec.rb 查看文件

@@ -0,0 +1,41 @@
control 'Apt repositories' do
title 'should be configured'

if os[:name] == 'ubuntu'
keyring_package = 'ubuntu-keyring'
else
keyring_package = 'debian-archive-keyring'
end

describe package(keyring_package) do
it { should be_installed }
end

describe file('/etc/apt/sources.list') do
it { should exist }
its(:size) { should eq 0 }
end

describe file('/etc/apt/sources.list.d') do
it { should be_directory }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its('mode') { should cmp '0755' }
end

describe file('/etc/apt/sources.list.d/spotify-binary.list') do
it { should exist }
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}) }
end

describe file('/etc/apt/sources.list.d/heroku-binary.list') do
it { should exist }
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 ./}) }
end
end

+ 8
- 0
test/integration/repositories/inspec.yml 查看文件

@@ -0,0 +1,8 @@
name: repositories
title: Apt Formula
maintainer: Saltstack-formulas org
license: Apache-2.0
summary: Verify that the apt repositories are configured correctly
supports:
- os-name: debian
- os-name: ubuntu

+ 0
- 36
test/integration/repositories/serverspec/repositories_spec.rb 查看文件

@@ -1,36 +0,0 @@
require_relative '../../../kitchen/data/spec_helper'

describe 'apt.repositories' do

describe package('debian-archive-keyring') do
it { should be_installed }
end

describe file('/etc/apt/sources.list') do
it { should exist }
its(:size) { should eq 0 }
end

describe file('/etc/apt/sources.list.d') do
it { should be_directory }
it { should be_mode 755 }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
end

describe file('/etc/apt/sources.list.d/debian-jessie-source.list') do
it { should exist }
it { should be_mode 644 }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its(:content) { should match('deb-src http://httpredir.debian.org/debian jessie contrib non-free main') }
end

describe file('/etc/apt/sources.list.d/dropbox-binary.list') do
it { should exist }
it { should be_mode 644 }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its(:content) { should match(%r{deb \[arch=i386,amd64\] http://linux.dropbox.com/debian jessie main}) }
end
end

+ 18
- 0
test/salt/pillar/preferences.pillar.sls 查看文件

@@ -0,0 +1,18 @@
apt:
remove_preferences: true
clean_preferences_d: true

preferences:
00-rspamd:
package: rspamd
pin: origin rspamd.com
priority: 650
01-all:
pin: release stable
priority: 610
02-all:
pin: release testing
priority: 600
03-all:
pin: release unstable
priority: 50

+ 19
- 0
test/salt/pillar/repositories.pillar.sls 查看文件

@@ -0,0 +1,19 @@
apt:
remove_sources_list: true
clean_sources_list_d: true

repositories:
spotify:
distro: stable
url: http://repository.spotify.com
arch: [amd64]
comps: [non-free]
keyid: 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90
keyserver: keyserver.ubuntu.com
heroku:
distro: ./
url: https://cli-assets.heroku.com/apt
arch: [amd64]
comps: []
key_url: https://cli-assets.heroku.com/apt/release.key


+ 0
- 9
test/shared/spec_helper.rb 查看文件

@@ -1,9 +0,0 @@
require "serverspec"
require "pathname"

# Set backend type
set :backend, :exec

RSpec.configure do |c|
c.path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
end

Loading…
取消
儲存