base-template
A base template for CI/CD workflows with MkDocs and Semantic Release
Usage
Create a new repository
- Click the
Use this template
button - Enter a name for your repository
- Click
Create repository from template
Add secrets for GitHub Actions
- Go to the
Settings
tab of your repository - Click
Secrets
in the left sidebar - Click
New repository secret
- Add the following secrets:
Name | Value |
---|---|
GITHUB_TOKEN | ${{ secrets.GITHUB_TOKEN }} |
NPM_TOKEN | ${{ secrets.NPM_TOKEN }} |
Initial release
Push a commit to the main
branch with the message feat: initial commit
GitHub Pages
- Modify the contents of the
mkdocs.yaml
file - Add content to the
docs
folder - Push a commit to the
main
branch - Wait for the
Publish docs via GitHub Pages
workflow to complete - Go to the
Settings
tab of your repository - Scroll down to the
pages
section - Select
Deploy from a branch
as the source - Select
gh-pages
as the branch and/(root)
as the folder, then clickSave
Features
- [x] Linting
- [x] Automated Release Draft
- [x] Semantic versioning
- [x] Documentation to PDF
- [x] Github Pages deployment (MkDocs)
Workflows
CI (Continuous Integration)
Lint
The Lint
workflow is automatically triggered whenever there is push activity in main
or pull request activity towards main
. It has one job:
- Lint the codebase with GitHub's Super-Linter.
CD (Continuous Deployment)
Docs to PDF
The Docs to PDF
workflow is automatically triggered whenever there is push activity in main
or pull request activity towards main
. It has one job:
- Build the documentation to PDF with Markdown to PDF
Release
The Release
workflow is automatically triggered whenever there is push activity in main
or pull request activity towards main
. It has one job:
- Create a release draft with semantic-release
Publish docs via GitHub Pages
The Publish docs via GitHub Pages
workflow is automatically triggered whenever there is push activity in main
or pull request activity towards main
. It has one job:
- Publish the documentation to GitHub Pages with MkDocs
Semantic Release
Commit message format
semantic-release uses the commit messages to determine the consumer impact of changes in the codebase. Following formalized conventions for commit messages, semantic-release automatically determines the next semantic version number, generates a changelog and publishes the release.
By default, semantic-release uses Angular Commit Message Conventions.
The commit message format can be changed with the preset
or config
options of the @semantic-release/commit-analyzer and @semantic-release/release-notes-generator plugins.
Tools such as commitizen or commitlint can be used to help contributors and enforce valid commit messages.
The table below shows which commit message gets you which release type when semantic-release
runs (using the default configuration):
Commit message | Release type |
---|---|
fix(pencil): stop graphite breaking when too much pressure applied |
~~Patch~~ Fix Release |
feat(pencil): add 'graphiteWidth' option |
~~Minor~~ Feature Release |
perf(pencil): remove graphiteWidth option BREAKING CHANGE: The graphiteWidth option has been removed. The default graphite width of 10mm is always used for performance reasons. |
~~Major~~ Breaking Release (Note that the BREAKING CHANGE: token must be in the footer of the commit) |
Automation with CI
semantic-release is meant to be executed on the CI environment after every successful build on the release branch. This way no human is directly involved in the release process and the releases are guaranteed to be unromantic and unsentimental.
Triggering a release
For each new commit added to one of the release branches (for example: main
, next
, beta
), with git push
or by merging a pull request or merging from another branch, a CI build is triggered and runs the semantic-release
command to make a release if there are codebase changes since the last release that affect the package functionalities.
Derived Templates
This template is used to create the following templates:
References
- Semantic Versioning
- Conventional Commits
- semantic-release
- Semantic Release Action
- Git Semantic Version
License
This project is released under the MIT License.