feat(semantic-release): implement an automated changelog
This commit is contained in:
		
							parent
							
								
									fbaa2dcabb
								
							
						
					
					
						commit
						3161504bc1
					
				
							
								
								
									
										113
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										113
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,2 +1,113 @@ | ||||
| .kitchen/ | ||||
| # 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? | ||||
|  | ||||
							
								
								
									
										79
									
								
								.kitchen.yml
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								.kitchen.yml
									
									
									
									
									
								
							| @ -1,79 +0,0 @@ | ||||
| --- | ||||
| driver: | ||||
|   name: docker | ||||
| 
 | ||||
| driver_config: | ||||
|   use_sudo: false | ||||
|   privileged: true | ||||
|   provision_command: mkdir -p /run/sshd | ||||
|   run_command: /lib/systemd/systemd | ||||
| 
 | ||||
| platforms: | ||||
|   - name: debian-9 | ||||
|     driver_config: | ||||
|       provision_command: | ||||
|         - apt-get install udev net-tools -y | ||||
|   - name: ubuntu-18.04 | ||||
|     driver_config: | ||||
|       provision_command: | ||||
|         - apt-get install udev net-tools -y | ||||
|   - name: centos-7 | ||||
|     driver_config: | ||||
|       provision_command: | ||||
|         - yum install udev net-tools -y | ||||
|   - name: fedora-latest | ||||
|     driver_config: | ||||
|       provision_command: | ||||
|         - yum install udev net-tools -y | ||||
| 
 | ||||
| provisioner: | ||||
|   name: salt_solo | ||||
|   log_level: info | ||||
|   require_chef: false | ||||
|   salt_version: latest | ||||
|   formula: postfix | ||||
|   salt_copy_filter: | ||||
|     - .kitchen | ||||
|     - .git | ||||
|   pillars: | ||||
|     top.sls: | ||||
|       base: | ||||
|         '*': | ||||
|           - postfix | ||||
|     postfix.sls: | ||||
|       postfix: | ||||
|          manage_master_config: True | ||||
|          master_config: | ||||
|            services: | ||||
|              relay1: | ||||
|                wrap: True | ||||
|                command: smtp | ||||
|                chroot: false | ||||
|                type: unix | ||||
|                extras: '-o smtp_bind_address=127.0.0.1 -o syslog_name=relay1' | ||||
|                no_args: True | ||||
|              relay2: | ||||
|                wrap: True | ||||
|                command: smtp | ||||
|                chroot: false | ||||
|                type: unix | ||||
|                extras: '-o smtp_bind_address=127.0.0.2 -o syslog_name=relay2' | ||||
|                no_args: True | ||||
| 
 | ||||
| 
 | ||||
| verifier: | ||||
|   name: inspec | ||||
|   sudo: true | ||||
|   reporter: | ||||
|     - cli | ||||
|   inspec_tests: | ||||
|     - path: test/integration/default | ||||
| 
 | ||||
| suites: | ||||
|   - name: postfix | ||||
|     provisioner: | ||||
|       state_top: | ||||
|         base: | ||||
|           '*': | ||||
|             - postfix | ||||
|             - postfix.config | ||||
							
								
								
									
										77
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								.travis.yml
									
									
									
									
									
								
							| @ -1,3 +1,9 @@ | ||||
| stages: | ||||
|   - test | ||||
|   - commitlint | ||||
|   - name: release | ||||
|     if: branch = master AND type != pull_request | ||||
| 
 | ||||
| sudo: required | ||||
| cache: bundler | ||||
| language: ruby | ||||
| @ -5,16 +11,73 @@ language: ruby | ||||
| 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: postfix-debian-9 | ||||
|     - INSTANCE: postfix-ubuntu-1804 | ||||
|     - INSTANCE: postfix-centos-7 | ||||
|     - INSTANCE: postfix-fedora-latest | ||||
|     - INSTANCE: default-debian-9-2019-2-py3 | ||||
|     # - INSTANCE: default-ubuntu-1804-2019-2-py3 | ||||
|     - INSTANCE: default-centos-7-2019-2-py3 | ||||
|     # - INSTANCE: default-fedora-29-2019-2-py3 | ||||
|     - INSTANCE: default-opensuse-leap-15-2019-2-py3 | ||||
|     # - 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 | ||||
|     # TODO: Use this when fixed instead of `opensuse-leap-42` | ||||
|     # Ref: https://github.com/netmanagers/salt-image-builder/issues/2 | ||||
|     # - INSTANCE: default-opensuse-leap-15-2018-3-py2 | ||||
|     # - INSTANCE: default-opensuse-leap-42-2018-3-py2 | ||||
|     # - INSTANCE: default-debian-8-2017-7-py2 | ||||
|     # - INSTANCE: default-ubuntu-1604-2017-7-py2 | ||||
|     # TODO: Enable after improving the formula to work with other than `systemd` | ||||
|     - INSTANCE: default-centos-6-2017-7-py2 | ||||
|     # - INSTANCE: default-fedora-28-2017-7-py2 | ||||
|     # - INSTANCE: default-opensuse-leap-42-2017-7-py2 | ||||
| 
 | ||||
| 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
									
								
								FORMULA
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								FORMULA
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| name: postfix | ||||
| os: Debian, Ubuntu, Raspbian, RedHat, Fedora, CentOS, Suse, openSUSE | ||||
| os_family: Debian, RedHat, Suse | ||||
| version: 1.0.0rc | ||||
| release: 1 | ||||
| minimum_version: 2016.11 | ||||
| summary: Postfix formula | ||||
| description: Formula to install and configure Postfix mail server | ||||
| top_level_dir: postfix | ||||
							
								
								
									
										7
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Gemfile
									
									
									
									
									
								
							| @ -1,7 +1,6 @@ | ||||
| source "https://rubygems.org" | ||||
| 
 | ||||
| gem "test-kitchen", '>=1.23.2' | ||||
| gem "kitchen-docker" | ||||
| gem "kitchen-salt", ">=0.2.5" | ||||
| gem "kitchen-inspec" | ||||
| gem 'kitchen-docker', '>= 2.9' | ||||
| gem 'kitchen-salt', '>= 0.6.0' | ||||
| gem 'kitchen-inspec', '>= 1.1' | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										62
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								README.rst
									
									
									
									
									
								
							| @ -1,62 +0,0 @@ | ||||
| postfix-formula | ||||
| =============== | ||||
| 
 | ||||
| Formulas to set up and configure the Postfix mail transfer agent. | ||||
| 
 | ||||
| .. 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: | ||||
| 
 | ||||
| 
 | ||||
| ``postfix`` | ||||
| ----------- | ||||
| 
 | ||||
| Installs and starts postfix SMTP server | ||||
| 
 | ||||
| ``postfix.config`` | ||||
| ------------------ | ||||
| 
 | ||||
| Manages postfix main.cf and optionally the master.cf configuration file | ||||
| 
 | ||||
| ``postfix.policyd-spf`` | ||||
| ------------------ | ||||
| 
 | ||||
| Installs and configures policyd-spf | ||||
| 
 | ||||
| ``postfix.postgrey`` | ||||
| ------------------ | ||||
| 
 | ||||
| Installs and starts Postgrey service | ||||
| 
 | ||||
| ``postfix.mysql`` | ||||
| ------------------ | ||||
| 
 | ||||
| Installs postfix mysql package ( Debian only) | ||||
| 
 | ||||
| ``postfix.pcre`` | ||||
| ------------------ | ||||
| 
 | ||||
| Installs postfix pcre package ( Debian only) | ||||
| 
 | ||||
| 
 | ||||
| ``postfix.postsrsd`` | ||||
| ------------------ | ||||
| 
 | ||||
| Installs postfix postsrsd package | ||||
| 
 | ||||
| 
 | ||||
| Integration testing | ||||
| =================== | ||||
| 
 | ||||
| A rudimentary test-suite exists to verify basic functionality of the postfix-formula. | ||||
| Testing is done using the [Kitchen CI Framework](https://kitchen.ci/). Pull-Requests are verified using [Travis CI](https://travis-ci.org/). | ||||
| 
 | ||||
| A general getting started guide for kitchen-salt can be found at <https://github.com/saltstack/kitchen-salt/blob/master/docs/gettingstarted.md>. | ||||
							
								
								
									
										29
									
								
								bin/kitchen
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								bin/kitchen
									
									
									
									
									
										Executable file
									
								
							| @ -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
									
								
								commitlint.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								commitlint.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| module.exports = { | ||||
|     extends: ['@commitlint/config-conventional'], | ||||
| }; | ||||
							
								
								
									
										159
									
								
								docs/CONTRIBUTING.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								docs/CONTRIBUTING.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,159 @@ | ||||
| .. _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. | ||||
| 
 | ||||
							
								
								
									
										128
									
								
								docs/README.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								docs/README.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | ||||
| .. _readme: | ||||
| 
 | ||||
| postfix-formula | ||||
| =============== | ||||
| 
 | ||||
| |img_travis| |img_sr| | ||||
| 
 | ||||
| .. |img_travis| image:: https://travis-ci.com/saltstack-formulas/postfix-formula.svg?branch=master | ||||
|    :alt: Travis CI Build Status | ||||
|    :scale: 100% | ||||
|    :target: https://travis-ci.com/saltstack-formulas/postfix-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 SaltStack formula to install and configure Postfix mail server. | ||||
| 
 | ||||
| .. 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: | ||||
| 
 | ||||
| ``postfix`` | ||||
| ^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs and starts postfix SMTP server | ||||
| 
 | ||||
| ``postfix.config`` | ||||
| ^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Manages postfix main.cf and optionally the master.cf configuration file | ||||
| 
 | ||||
| ``postfix.policyd-spf`` | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs and configures policyd-spf | ||||
| 
 | ||||
| ``postfix.postgrey`` | ||||
| ^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs and starts Postgrey service | ||||
| 
 | ||||
| ``postfix.mysql`` | ||||
| ^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs postfix mysql package ( Debian only) | ||||
| 
 | ||||
| ``postfix.pcre`` | ||||
| ^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs postfix pcre package ( Debian only) | ||||
| 
 | ||||
| ``postfix.postsrsd`` | ||||
| ^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| Installs postfix postsrsd 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 main state(s), 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. | ||||
| 
 | ||||
							
								
								
									
										109
									
								
								kitchen.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								kitchen.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,109 @@ | ||||
| # -*- 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: | ||||
|   ## 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-29-2019-2-py3 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2019.2-py3:fedora-29 | ||||
|   - name: opensuse-leap-15-2019-2-py3 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2019.2-py3:opensuse-leap-15 | ||||
|       run_command: /usr/lib/systemd/systemd | ||||
| 
 | ||||
|   ## 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 | ||||
|   # TODO: Use this when fixed instead of `opensuse-leap-42` | ||||
|   # Ref: https://github.com/netmanagers/salt-image-builder/issues/2 | ||||
|   # - name: opensuse-leap-15-2018-3-py2 | ||||
|   #   driver: | ||||
|   #     image: netmanagers/salt-2018.3-py2:opensuse-leap-15 | ||||
|   #     run_command: /usr/lib/systemd/systemd | ||||
|   - name: opensuse-leap-42-2018-3-py2 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2018.3-py2:opensuse-leap-42 | ||||
|       run_command: /usr/lib/systemd/systemd | ||||
| 
 | ||||
|   ## 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 | ||||
|   # TODO: Modify the formula to work for non-`systemd` platforms | ||||
|   - name: centos-6-2017-7-py2 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2017.7-py2:centos-6 | ||||
|       run_command: /sbin/init | ||||
|   - name: fedora-28-2017-7-py2 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2017.7-py2:fedora-28 | ||||
|   - name: opensuse-leap-42-2017-7-py2 | ||||
|     driver: | ||||
|       image: netmanagers/salt-2017.7-py2:opensuse-leap-42 | ||||
|       run_command: /usr/lib/systemd/systemd | ||||
| 
 | ||||
| provisioner: | ||||
|   name: salt_solo | ||||
|   log_level: info | ||||
|   salt_install: none | ||||
|   require_chef: false | ||||
|   formula: postfix | ||||
|   salt_copy_filter: | ||||
|     - .kitchen | ||||
|     - .git | ||||
|   state_top: | ||||
|     base: | ||||
|       '*': | ||||
|         - postfix | ||||
|         - postfix.config | ||||
|   pillars: | ||||
|     top.sls: | ||||
|       base: | ||||
|         '*': | ||||
|           - postfix | ||||
|   pillars_from_files: | ||||
|     postfix.sls: './test/salt/pillar/default.sls' | ||||
| 
 | ||||
| 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: default | ||||
							
								
								
									
										30
									
								
								pre-commit_semantic-release.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								pre-commit_semantic-release.sh
									
									
									
									
									
										Executable file
									
								
							| @ -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
									
								
								release-rules.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								release-rules.js
									
									
									
									
									
										Normal file
									
								
							| @ -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
									
								
								release.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								release.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||
|       }, | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
							
								
								
									
										12
									
								
								test/integration/default/inspec.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/integration/default/inspec.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| name: postfix | ||||
| title: Postfix Formula | ||||
| maintainer: Saltstack Formulas | ||||
| license: Apache-2.0 | ||||
| summary: Verify that the postfix formula is setup and configured correctly | ||||
| supports: | ||||
|   - os-name: debian | ||||
|   - os-name: ubuntu | ||||
|   - os-name: centos | ||||
|   - os-name: fedora | ||||
|   - os-name: opensuse | ||||
|   - os-name: suse | ||||
							
								
								
									
										0
									
								
								test/salt/pillar/default.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								test/salt/pillar/default.sls
									
									
									
									
									
										Normal file
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Eric Veiras Galisson
						Eric Veiras Galisson