From 8c91168b1c091bd3c6f8d35b7c0074fc4833bc41 Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Tue, 26 Nov 2019 16:19:28 +0000 Subject: [PATCH] feat(fail2ban): add notification about upcoming `ng` promotion * https://github.com/saltstack-formulas/fail2ban-formula/issues/34#issuecomment-539986988 * https://github.com/saltstack-formulas/fail2ban-formula/issues/35 --- ssf/defaults.yaml | 4 +- .../pre-commit_semantic-release.sh | 42 +++++++ .../tofs_fail2ban-formula/release.config.js | 106 ++++++++++++++++++ 3 files changed, 150 insertions(+), 2 deletions(-) create mode 100755 ssf/files/tofs_fail2ban-formula/pre-commit_semantic-release.sh create mode 100644 ssf/files/tofs_fail2ban-formula/release.config.js diff --git a/ssf/defaults.yaml b/ssf/defaults.yaml index 21a21798..4fc4d343 100644 --- a/ssf/defaults.yaml +++ b/ssf/defaults.yaml @@ -22,8 +22,8 @@ ssf_node_anchors: # An alternative method could be to use: # `git describe --abbrev=0 --tags` # yamllint disable rule:line-length - title: 'ci(travis): run `shellcheck` during lint job [skip ci]' - body: '* Automated using https://github.com/myii/ssf-formula/pull/106' + title: 'feat: update deprecation version number in `semantic-release` run' + body: '* Automated using https://github.com/myii/ssf-formula/pull/104' # yamllint enable rule:line-length github: owner: 'saltstack-formulas' diff --git a/ssf/files/tofs_fail2ban-formula/pre-commit_semantic-release.sh b/ssf/files/tofs_fail2ban-formula/pre-commit_semantic-release.sh new file mode 100755 index 00000000..4f4b24a5 --- /dev/null +++ b/ssf/files/tofs_fail2ban-formula/pre-commit_semantic-release.sh @@ -0,0 +1,42 @@ +#!/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/ || exit +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 .. + + +############################################################################### +# (C) Update last version before `v1.0.0` with `${nextRelease.version}` +############################################################################### +# Only apply this while the version number is below `v1.0.0`! +V_REPR=v${1} +MAJOR=$(echo "${V_REPR}" | cut -c-2) +if [ "${MAJOR}" = "v0" ]; then + sed -i -e "s@^\(\s\+\`\).*\(\s\`_\.\)@\1${V_REPR}\2${V_REPR}\3@" docs/README.rst + sed -i -e "s@^\(\s\+# the final release tag before \`v1.0.0\`, which is expected to be \`\).*\(\`.\s\+#\)@\1${V_REPR}\2@" fail2ban/deprecated.sls +fi diff --git a/ssf/files/tofs_fail2ban-formula/release.config.js b/ssf/files/tofs_fail2ban-formula/release.config.js new file mode 100644 index 00000000..cb421756 --- /dev/null +++ b/ssf/files/tofs_fail2ban-formula/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', 'fail2ban/deprecated.sls'], + }], + '@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.shortHash = 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 + }, + }, + }, +};