Compare commits
40 Commits
bd6133529c
...
v0.1.0
Author | SHA1 | Date | |
---|---|---|---|
3ec66f5186 | |||
67d089d850 | |||
cb3628a9e1 | |||
f17ad4d9b1 | |||
a654b9c86d | |||
c1c15120d6 | |||
fb20e0ee0c | |||
ee4489ef8d | |||
51ffc6221d | |||
0eff437862 | |||
206f2db656 | |||
3fde33c99c | |||
f3eebaf9c1 | |||
00cdaae24b | |||
7aeda9199c | |||
f1f1257051 | |||
8428ecab2e | |||
923f07d9cf | |||
3d56dc2780 | |||
98caf6d9cf | |||
9eaeabbcb3 | |||
2088671dc7 | |||
1a819e0fa8 | |||
24f9083948 | |||
7307621124 | |||
0e10e063c0 | |||
815c9f1685 | |||
896f3c3ad1 | |||
63768e9af5 | |||
d24b78021f | |||
9a1b77944c | |||
6aecfb1cec | |||
06c939145f | |||
c17d26f44e | |||
f6ed624bba | |||
ba4def156e | |||
852636d2e1 | |||
fa8cda57b8 | |||
6cb409c757 | |||
4dc3eabcd8 |
64
.gitea/workflows/build-container-image.yaml
Normal file
64
.gitea/workflows/build-container-image.yaml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: Build and Deploy
|
||||||
|
run-name: ${{ gitea.actor }} is building container
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
jobs:
|
||||||
|
Build-Container-Image:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
git.dev-null.rocks/alexohneander/alexohneander-zola
|
||||||
|
tags: |
|
||||||
|
type=schedule,pattern={{date 'YYYYMMDDHHMM'}}
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Set up Docker Context for Buildx
|
||||||
|
id: buildx-context
|
||||||
|
run: |
|
||||||
|
export DOCKER_HOST=tcp://docker:2376/
|
||||||
|
export DOCKER_TLS_CERTDIR="/certs"
|
||||||
|
export DOCKER_TLS_VERIFY=1
|
||||||
|
export DOCKER_CERT_PATH="/certs/client"
|
||||||
|
docker context create builders
|
||||||
|
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
# buildkitd-flags: --debug
|
||||||
|
endpoint: builders
|
||||||
|
env:
|
||||||
|
DOCKER_HOST: "tcp://docker:2376/"
|
||||||
|
DOCKER_TLS_CERTDIR: "/certs"
|
||||||
|
DOCKER_TLS_VERIFY: 1
|
||||||
|
DOCKER_CERT_PATH: "/certs/client"
|
||||||
|
|
||||||
|
- name: Login to Gitea
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: git.dev-null.rocks
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.GA_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push the image
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
file: Dockerfile
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
env:
|
||||||
|
DOCKER_HOST: "tcp://docker:2376/"
|
||||||
|
DOCKER_TLS_CERTDIR: "/certs"
|
||||||
|
DOCKER_TLS_VERIFY: 1
|
||||||
|
DOCKER_CERT_PATH: "/certs/client"
|
8
.gitea/workflows/config.js
Normal file
8
.gitea/workflows/config.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
module.exports = {
|
||||||
|
"endpoint": "https://git.dev-null.rocks/api/v1", // replace it with your actual endpoint
|
||||||
|
"gitAuthor": "Renovate Bot <renovate-bot@dev-null.rocks>",
|
||||||
|
"platform": "gitea",
|
||||||
|
"onboardingConfigFileName": "renovate.json",
|
||||||
|
"autodiscover": true,
|
||||||
|
"optimizeForDisabled": true,
|
||||||
|
};
|
20
.gitea/workflows/renovate.yaml
Normal file
20
.gitea/workflows/renovate.yaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
name: renovate
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "@daily"
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
renovate:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: ghcr.io/renovatebot/renovate:39.207.2
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- run: renovate
|
||||||
|
env:
|
||||||
|
RENOVATE_CONFIG_FILE: ".gitea/workflows/config.js" # replace it with your config.js path
|
||||||
|
LOG_LEVEL: "debug"
|
||||||
|
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }} # your Revonate bot token
|
1112
CHANGELOG.md
1112
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -1,128 +0,0 @@
|
|||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
We as members, contributors, and leaders pledge to make participation in our
|
|
||||||
community a harassment-free experience for everyone, regardless of age, body
|
|
||||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
||||||
identity and expression, level of experience, education, socio-economic status,
|
|
||||||
nationality, personal appearance, race, religion, or sexual identity
|
|
||||||
and orientation.
|
|
||||||
|
|
||||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
||||||
diverse, inclusive, and healthy community.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to a positive environment for our
|
|
||||||
community include:
|
|
||||||
|
|
||||||
* Demonstrating empathy and kindness toward other people
|
|
||||||
* Being respectful of differing opinions, viewpoints, and experiences
|
|
||||||
* Giving and gracefully accepting constructive feedback
|
|
||||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
|
||||||
and learning from the experience
|
|
||||||
* Focusing on what is best not just for us as individuals, but for the
|
|
||||||
overall community
|
|
||||||
|
|
||||||
Examples of unacceptable behavior include:
|
|
||||||
|
|
||||||
* The use of sexualized language or imagery, and sexual attention or
|
|
||||||
advances of any kind
|
|
||||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
|
||||||
* Publishing others' private information, such as a physical or email
|
|
||||||
address, without their explicit permission
|
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
|
||||||
professional setting
|
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
|
||||||
|
|
||||||
Community leaders are responsible for clarifying and enforcing our standards of
|
|
||||||
acceptable behavior and will take appropriate and fair corrective action in
|
|
||||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
||||||
or harmful.
|
|
||||||
|
|
||||||
Community leaders have the right and responsibility to remove, edit, or reject
|
|
||||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
|
||||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
|
||||||
decisions when appropriate.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies within all community spaces, and also applies when
|
|
||||||
an individual is officially representing the community in public spaces.
|
|
||||||
Examples of representing our community include using an official e-mail address,
|
|
||||||
posting via an official social media account, or acting as an appointed
|
|
||||||
representative at an online or offline event.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported to the community leaders responsible for enforcement at
|
|
||||||
tabi@osc.garden.
|
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
|
||||||
reporter of any incident.
|
|
||||||
|
|
||||||
## Enforcement Guidelines
|
|
||||||
|
|
||||||
Community leaders will follow these Community Impact Guidelines in determining
|
|
||||||
the consequences for any action they deem in violation of this Code of Conduct:
|
|
||||||
|
|
||||||
### 1. Correction
|
|
||||||
|
|
||||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
|
||||||
unprofessional or unwelcome in the community.
|
|
||||||
|
|
||||||
**Consequence**: A private, written warning from community leaders, providing
|
|
||||||
clarity around the nature of the violation and an explanation of why the
|
|
||||||
behavior was inappropriate. A public apology may be requested.
|
|
||||||
|
|
||||||
### 2. Warning
|
|
||||||
|
|
||||||
**Community Impact**: A violation through a single incident or series
|
|
||||||
of actions.
|
|
||||||
|
|
||||||
**Consequence**: A warning with consequences for continued behavior. No
|
|
||||||
interaction with the people involved, including unsolicited interaction with
|
|
||||||
those enforcing the Code of Conduct, for a specified period of time. This
|
|
||||||
includes avoiding interactions in community spaces as well as external channels
|
|
||||||
like social media. Violating these terms may lead to a temporary or
|
|
||||||
permanent ban.
|
|
||||||
|
|
||||||
### 3. Temporary Ban
|
|
||||||
|
|
||||||
**Community Impact**: A serious violation of community standards, including
|
|
||||||
sustained inappropriate behavior.
|
|
||||||
|
|
||||||
**Consequence**: A temporary ban from any sort of interaction or public
|
|
||||||
communication with the community for a specified period of time. No public or
|
|
||||||
private interaction with the people involved, including unsolicited interaction
|
|
||||||
with those enforcing the Code of Conduct, is allowed during this period.
|
|
||||||
Violating these terms may lead to a permanent ban.
|
|
||||||
|
|
||||||
### 4. Permanent Ban
|
|
||||||
|
|
||||||
**Community Impact**: Demonstrating a pattern of violation of community
|
|
||||||
standards, including sustained inappropriate behavior, harassment of an
|
|
||||||
individual, or aggression toward or disparagement of classes of individuals.
|
|
||||||
|
|
||||||
**Consequence**: A permanent ban from any sort of public interaction within
|
|
||||||
the community.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
||||||
version 2.0, available at
|
|
||||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
|
||||||
enforcement ladder](https://github.com/mozilla/diversity).
|
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
|
||||||
https://www.contributor-covenant.org/faq. Translations are available at
|
|
||||||
https://www.contributor-covenant.org/translations.
|
|
122
CONTRIBUTING.md
122
CONTRIBUTING.md
@@ -1,122 +0,0 @@
|
|||||||
# Contributing to tabi
|
|
||||||
|
|
||||||
Halló!
|
|
||||||
|
|
||||||
Thanks for contributing to [tabi](https://github.com/welpo/tabi). Before implementing new features and changes, please [submit an issue](https://github.com/welpo/tabi/issues/new) so that we can discuss it.
|
|
||||||
|
|
||||||
We welcome contributions in many forms, including:
|
|
||||||
|
|
||||||
- Bug reports;
|
|
||||||
- New translations;
|
|
||||||
- Improvements to existing translations;
|
|
||||||
- Feature requests;
|
|
||||||
- Code patches;
|
|
||||||
- Documentation improvements;
|
|
||||||
- UI/UX suggestions.
|
|
||||||
|
|
||||||
If you're not sure how to contribute or need help with something, please don't hesitate to reach out via the [issue tracker](https://github.com/welpo/tabi/issues) or [mail](mailto:tabi@osc.garden?subject=[GitHub]%20tabi).
|
|
||||||
|
|
||||||
## Pull Requests
|
|
||||||
|
|
||||||
Working on your first Pull Request? You can learn how from this free video series:
|
|
||||||
|
|
||||||
[**How to Contribute to an Open Source Project on GitHub**](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)
|
|
||||||
|
|
||||||
Please make sure the following is done when submitting a pull request:
|
|
||||||
|
|
||||||
1. **Keep your PR small**. Small pull requests are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it.
|
|
||||||
2. **Use descriptive titles**. It is recommended to follow this [commit message style](#conventional-commit-messages-with-gitmoji).
|
|
||||||
3. **Test your changes**. Make sure to test different configurations that might affect your changes.
|
|
||||||
4. **Fill the PR template**. The template will guide you through the process of submitting a PR.
|
|
||||||
|
|
||||||
### Conventional Commit Messages with Gitmoji
|
|
||||||
|
|
||||||
See how a minor change to your commit message style can make you a better programmer.
|
|
||||||
|
|
||||||
Format: `<gitmoji> <type>(<scope>): <description>`
|
|
||||||
|
|
||||||
`<gitmoji>` is an emoji from the [gitmoji](https://gitmoji.dev/) list. It makes it easier to visually scan the commit history and quickly grasp the purpose of changes.
|
|
||||||
|
|
||||||
`<scope>` is optional. If your change affects a specific part of the codebase, consider adding the scope. Scopes should be brief but recognizable, e.g. `config`, `feed`, or `search`.
|
|
||||||
|
|
||||||
The various types of commits:
|
|
||||||
|
|
||||||
- `feat`: a new API or behaviour **for the end user**.
|
|
||||||
- `fix`: a bug fix **for the end user**.
|
|
||||||
- `style`: changes to the visual appearance of the theme, e.g. CSS, fonts, images…
|
|
||||||
- `docs`: a change to the website or other Markdown documents.
|
|
||||||
- `refactor`: a change to code that doesn't change behaviour, e.g. splitting files, renaming internal variables, improving code style…
|
|
||||||
- `chore`: upgrading dependencies, releasing new versions… Chores that are **regularly done** for maintenance purposes.
|
|
||||||
- `misc`: anything else that doesn't change production code, yet is not `chore`. e.g. updating GitHub actions workflow.
|
|
||||||
|
|
||||||
The commits within your PR don't need to follow this convention (we'll [squash them](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/configuring-commit-squashing-for-pull-requests)). However, the PR title should be in this format. If you're not sure about the title, don't worry, we'll help you fix it. Your code is more important than conventions!
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```text
|
|
||||||
🐛 fix(i18n): localise date in single taxonomy listing
|
|
||||||
^ ^-^^----^ ^--------------------------------------^
|
|
||||||
| | | |
|
|
||||||
| | | +-> Description in imperative and lowercase.
|
|
||||||
| | |
|
|
||||||
| | +-> The scope of the change.
|
|
||||||
| |
|
|
||||||
| +-------> Type: see above for the list we use.
|
|
||||||
|
|
|
||||||
+----------> A valid gitmoji.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coding Style Guidelines
|
|
||||||
|
|
||||||
While we don't enforce a strict coding style, we appreciate it when contributions follow the existing code style of the project (e.g. indenting with 4 spaces). This makes the codebase easier to read and maintain. If you are making significant changes or additions, please try to maintain consistency with the current coding patterns and idioms.
|
|
||||||
|
|
||||||
For JavaScript files, we use [Prettier](https://prettier.io/) to format the code.
|
|
||||||
|
|
||||||
The CSS properties are sorted following [Concentric-CSS](https://github.com/brandon-rhodes/Concentric-CSS). If you use VSCode, the [Sort CSS](https://marketplace.visualstudio.com/items?itemName=piyushsarkar.sort-css-properties) extension makes this super easy.
|
|
||||||
|
|
||||||
## Pre-commit Githook
|
|
||||||
|
|
||||||
### Introduction
|
|
||||||
|
|
||||||
We use a pre-commit githook to maintain code and file quality. [This script](https://github.com/welpo/tabi/blob/main/.githooks/pre-commit) performs a series of checks and updates before a commit is made.
|
|
||||||
|
|
||||||
### Setting Up
|
|
||||||
|
|
||||||
To use the pre-commit githook, run the following command from the root of the repository to configure the git hooks path and make the script executable:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git config core.hooksPath .githooks
|
|
||||||
chmod +x .githooks/pre-commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
The pre-commit githook performs the following actions:
|
|
||||||
|
|
||||||
#### Automatic Updates
|
|
||||||
|
|
||||||
- **Front Matter in Markdown Files**: Automatically updates the "updated" field in the front matter of `.md` files.
|
|
||||||
- **PNG Compression**: Compresses PNG files using either [`oxipng`](https://github.com/shssoichiro/oxipng) or [`optipng`](https://optipng.sourceforge.net/), whichever is available on your system.
|
|
||||||
- **Font Subsetting**: Runs `subset_font` if `config.toml` has been modified.
|
|
||||||
|
|
||||||
#### Commit Checks
|
|
||||||
|
|
||||||
The script prevents you from committing if:
|
|
||||||
|
|
||||||
- The `.md` file is marked as a draft.
|
|
||||||
- Any file contains a "TODO".
|
|
||||||
- A JavaScript file is being committed without a corresponding minified version.
|
|
||||||
- A minified JavaScript file is not as small as it could be. Requires installing [UglifyJS](https://github.com/mishoo/UglifyJS) and/or [terser](https://github.com/terser/terser).
|
|
||||||
- `config.toml` and `theme.toml` have different numbers of lines in their `[extra]` sections.
|
|
||||||
|
|
||||||
These checks are in place to ensure code quality and consistency throughout the project.
|
|
||||||
|
|
||||||
## Code of Conduct
|
|
||||||
|
|
||||||
We expect all contributors to follow our [Code of Conduct](./CODE_OF_CONDUCT.md). Please be respectful and professional when interacting with other contributors.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The code is available under the [MIT license](./LICENSE).
|
|
||||||
|
|
||||||
Thank you for your contributions!
|
|
9
Dockerfile
Normal file
9
Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
FROM ghcr.io/getzola/zola:v0.20.0 as zola
|
||||||
|
|
||||||
|
COPY . /project
|
||||||
|
WORKDIR /project
|
||||||
|
RUN ["zola", "build"]
|
||||||
|
|
||||||
|
FROM ghcr.io/static-web-server/static-web-server:2
|
||||||
|
WORKDIR /
|
||||||
|
COPY --from=zola /project/public /public
|
21
LICENSE
21
LICENSE
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2023 Óscar Fernández
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
243
README.md
243
README.md
@@ -1,243 +1,6 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="CONTRIBUTING.md#pull-requests">
|
<a href="https://git.dev-null.rocks/alexohneander/alexohneander-zola/actions">
|
||||||
<img src="https://img.shields.io/badge/PRs-welcome-0?style=flat-square&labelColor=202b2d&color=087e96" alt="PRs welcome"></a>
|
<img src="https://git.dev-null.rocks/alexohneander/alexohneander-zola/actions/workflows/build-container-image.yaml/badge.svg?branch=main" alt="Build status"></a>
|
||||||
<a href="https://github.com/welpo/tabi/graphs/contributors">
|
|
||||||
<img src="https://img.shields.io/github/contributors/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Contributors"></a>
|
|
||||||
<a href="https://github.com/welpo/tabi/forks">
|
|
||||||
<img src="https://img.shields.io/github/forks/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Forks"></a>
|
|
||||||
<a hfref="https://github.com/welpo/tabi/commits/main/">
|
|
||||||
<img src="https://img.shields.io/github/last-commit/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Last commit"></a>
|
|
||||||
<br>
|
|
||||||
<a href="https://github.com/welpo/tabi/releases">
|
|
||||||
<img src="https://img.shields.io/github/v/release/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="Latest release"></a>
|
|
||||||
<a href="https://welpo.github.io/tabi/blog/mastering-tabi-settings/">
|
|
||||||
<img src="https://img.shields.io/website?url=https%3A%2F%2Fwelpo.github.io%2Ftabi&style=flat-square&label=docs&labelColor=202b2d" alt="Documentation"></a>
|
|
||||||
<a href="https://github.com/welpo/tabi/blob/main/LICENSE">
|
|
||||||
<img src="https://img.shields.io/github/license/welpo/tabi?style=flat-square&labelColor=202b2d&color=087e96" alt="License"></a>
|
|
||||||
<a href="https://github.com/welpo/git-sumi">
|
|
||||||
<img src="https://img.shields.io/badge/clean_commits-git--sumi-0?style=flat-square&labelColor=202b2d&color=087e96" alt="Clean commits"></a>
|
|
||||||
<a href="https://isitmaintained.com/project/welpo/tabi">
|
|
||||||
<img src="https://isitmaintained.com/badge/resolution/welpo/tabi.svg" alt="Average time to resolve an issue"></a>
|
|
||||||
<a href="https://isitmaintained.com/project/welpo/tabi">
|
|
||||||
<img src="https://isitmaintained.com/badge/open/welpo/tabi.svg" alt="Percentage of issues still open"></a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# 🌱 tabi
|
# 🌱 alexohneander
|
||||||
|
|
||||||
An accessible [Zola](https://www.getzola.org) theme with [search](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#search), [multi-language support](https://welpo.github.io/tabi/blog/faq-languages/), [optional JavaScript](https://welpo.github.io/tabi/blog/javascript/), a perfect Lighthouse score, and [comprehensive documentation](https://welpo.github.io/tabi). Crafted for personal websites and blogs.
|
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> Want to start blogging right away? Use the [tabi-start template](https://github.com/welpo/tabi-start) to get a complete site up and running in minutes.
|
|
||||||
|
|
||||||
See a live preview (and the theme's documentation) [here](https://welpo.github.io/tabi).
|
|
||||||
|
|
||||||
Explore the [Sites Using tabi section](#sites-using-tabi) to see real-world applications.
|
|
||||||
|
|
||||||
> tabi (旅, /<span title="/t/: 't' in 'sty'">t</span><span title="/ɐ/: a sound between 'a' in 'sofa' and 'u' in 'nut'">ɐ</span><span title="/ˈ/: primary stress mark, indicating that the following syllable is pronounced with greater emphasis">ˈ</span><span title="/b/: 'b' in 'cab'">b</span><span title="/i/: 'i' in 'fleece'">i</span>/): Journey.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
tabi has a perfect score on Google's Lighthouse audit:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- [X] [Set any language as default](https://welpo.github.io/tabi/blog/faq-languages/#how-do-i-set-a-default-language-for-my-site). Set your base site to Chinese, Spanish, French, Hindi… or any [other supported language](/i18n). The theme's interface will be translated accordingly.
|
|
||||||
- [X] [Integration with remote repositories](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#git-repository-integration) on GitHub, GitLab, Gitea & Codeberg for commit history and showing the site source.
|
|
||||||
- [X] [Series support](https://welpo.github.io/tabi/blog/series/) for creating sequential content like tutorials, courses, and multi-part stories.
|
|
||||||
- [X] Dark and light themes. Defaults to the OS setting, with a switcher in the navigation bar.
|
|
||||||
- [X] Thorough documentation. See [Mastering tabi Settings: A Comprehensive Guide](https://welpo.github.io/tabi/blog/mastering-tabi-settings/).
|
|
||||||
- [X] Perfect Lighthouse score (Performance, Accessibility, Best Practices and SEO).
|
|
||||||
- [X] [Comprehensive multi-language support](https://welpo.github.io/tabi/blog/faq-languages/#how-does-tabi-handle-multilingual-support). Add as many languages as you wish.
|
|
||||||
- [X] Support for [comments using giscus, utterances, Hyvor Talk, or Isso](https://welpo.github.io/tabi/blog/comments/).
|
|
||||||
- [X] Code syntax highlighting with colours based on [Catppuccin](https://github.com/catppuccin/catppuccin) Frappé.
|
|
||||||
- [X] [Mermaid support](https://welpo.github.io/tabi/blog/shortcodes/#mermaid-diagrams) to create diagrams and charts with text.
|
|
||||||
- [X] [Local search](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#search) with an accessible, multi-lingual interface.
|
|
||||||
- [X] [Custom Twitter card](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#social-media-cards) and automatic Open Graph tags.
|
|
||||||
- [X] [KaTeX](https://katex.org/) support for mathematical notation.
|
|
||||||
- [X] [Stylized and human readable Atom feed](https://welpo.github.io/tabi/atom.xml).
|
|
||||||
- [X] [Stylized and human readable sitemap](https://welpo.github.io/tabi/sitemap.xml).
|
|
||||||
- [X] [Mail encoding](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#encoded-email) for spam protection.
|
|
||||||
- [X] All JavaScript can be [fully disabled](https://welpo.github.io/tabi/blog/javascript/).
|
|
||||||
- [X] [Customizable Table of Contents](https://welpo.github.io/tabi/blog/toc/).
|
|
||||||
- [X] [Customizable secure headers](https://welpo.github.io/tabi/blog/security/).
|
|
||||||
- [X] [Copy button for code blocks](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#copy-button-on-code-blocks).
|
|
||||||
- [X] [Quick navigation buttons](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#quick-navigation-buttons).
|
|
||||||
- [X] [Custom copyright notice](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#copyright).
|
|
||||||
- [X] [Custom canonical URLs](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#canonical-url).
|
|
||||||
- [X] [Custom shortcodes](https://welpo.github.io/tabi/blog/shortcodes/).
|
|
||||||
- [X] [Customizable skins](https://welpo.github.io/tabi/blog/customise-tabi/).
|
|
||||||
- [X] [Social media cards](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#social-media-cards).
|
|
||||||
- [X] Responsive design.
|
|
||||||
- [X] [Projects page](https://welpo.github.io/tabi/projects/).
|
|
||||||
- [X] [Archive page](https://welpo.github.io/tabi/archive/).
|
|
||||||
- [X] [Pinned posts](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#pinning-posts).
|
|
||||||
- [X] [Social links](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#social-media-icons).
|
|
||||||
- [X] [Tags](https://welpo.github.io/tabi/blog/mastering-tabi-settings/#tags).
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> The fastest way to create a new site is to use the [tabi-start template](https://github.com/welpo/tabi-start). This gives you a complete blog setup with all the essential configuration ready to go.
|
|
||||||
|
|
||||||
### Manual installation
|
|
||||||
|
|
||||||
To add tabi to you existing Zola site:
|
|
||||||
|
|
||||||
0. Initialize a Git repository in your project directory (if you haven't already):
|
|
||||||
|
|
||||||
```
|
|
||||||
git init
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Add the theme as a git submodule:
|
|
||||||
|
|
||||||
```
|
|
||||||
git submodule add https://github.com/welpo/tabi.git themes/tabi
|
|
||||||
```
|
|
||||||
|
|
||||||
Or clone the theme into your themes directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
git clone https://github.com/welpo/tabi.git themes/tabi
|
|
||||||
```
|
|
||||||
|
|
||||||
### Required configuration
|
|
||||||
|
|
||||||
2. Enable the theme in your `config.toml`:
|
|
||||||
|
|
||||||
```
|
|
||||||
theme = "tabi"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Set a `title` in your `config.toml`:
|
|
||||||
|
|
||||||
```
|
|
||||||
title = "Your Site Title"
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Configure code block highlighting in your `config.toml`:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[markdown]
|
|
||||||
highlight_code = true
|
|
||||||
highlight_theme = "css"
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Create a `content/_index.md` file. This file controls how your home page looks and behaves. Choose one of the following options:
|
|
||||||
|
|
||||||
**Option A: Serve posts from `/`**:
|
|
||||||
|
|
||||||
```
|
|
||||||
+++
|
|
||||||
title = "Home"
|
|
||||||
paginate_by = 5 # Show 5 posts per page.
|
|
||||||
+++
|
|
||||||
```
|
|
||||||
|
|
||||||
- This will display posts in `content/` with pagination.
|
|
||||||
|
|
||||||
**Option B: Serve posts from a different path (e.g., `blog/`)**:
|
|
||||||
|
|
||||||
```
|
|
||||||
+++
|
|
||||||
title = "Home"
|
|
||||||
# Note we're not setting `paginate_by` here.
|
|
||||||
|
|
||||||
[extra]
|
|
||||||
section_path = "blog/_index.md" # Where to find your posts.
|
|
||||||
max_posts = 5 # Show 5 posts on the home page.
|
|
||||||
+++
|
|
||||||
```
|
|
||||||
|
|
||||||
- This will display the latest 5 posts from the `blog/` section.
|
|
||||||
- Do not set `paginate_by` if you choose this option.
|
|
||||||
- Use the full path to the section's `_index.md` file. Using `section_path = "blog/"` will not work.
|
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Do not set both `paginate_by` and `section_path` in `content/_index.md`.
|
|
||||||
>
|
|
||||||
> These settings are mutually exclusive and using both may result in no posts being displayed.
|
|
||||||
|
|
||||||
1. If you want an introduction section (see screenshot above), add these lines to `content/_index.md`:
|
|
||||||
|
|
||||||
```
|
|
||||||
[extra]
|
|
||||||
header = {title = "Hello! I'm tabi~", img = "img/main.webp", img_alt = "Your Name" }
|
|
||||||
```
|
|
||||||
|
|
||||||
The content outside the front matter will be rendered between the header title and the posts listing. In the screenshot above, it's the text that reads "tabi is a fast, lightweight, and modern Zola theme…".
|
|
||||||
|
|
||||||
7. If you want a multilingual site, you will need to set up each language. In `config.toml`, set the title and taxonomies for each language, like:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[languages.es]
|
|
||||||
title = "~/tabi"
|
|
||||||
taxonomies = [{name = "tags", feed = true}]
|
|
||||||
```
|
|
||||||
|
|
||||||
You will need an `_index.{language_code}.md` per language for each section (e.g. /blog or /projects) that you want to enable in that language.
|
|
||||||
|
|
||||||
The same is true for individual posts, which should have the exact same name as the default language, with an extra `.{code}` before the extension (e.g. the Spanish version of `security.md` would be `security.es.md`).
|
|
||||||
|
|
||||||
This configuration allows the language switcher to take the user to the translation of the current URL. If a translation doesn't exist, the 404 page will be displayed, with an explanation in each language set in the config.
|
|
||||||
|
|
||||||
To learn more about multilingual support, see the [Frequently Asked Questions](https://welpo.github.io/tabi/blog/faq-languages/).
|
|
||||||
|
|
||||||
### Updating tabi
|
|
||||||
|
|
||||||
If you added the theme as a git submodule, run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git submodule update --remote themes/tabi
|
|
||||||
```
|
|
||||||
|
|
||||||
If you cloned it:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd themes/tabi
|
|
||||||
git pull
|
|
||||||
```
|
|
||||||
|
|
||||||
## Sites using tabi
|
|
||||||
|
|
||||||
| Website | Creator | Description | Site Source |
|
|
||||||
| - | - | - | - |
|
|
||||||
| [osc.garden](https://osc.garden) | Óscar Fernández ([welpo](https://github.com/welpo)) | Data science, psychology, and Zola | [Source](https://github.com/welpo/osc.garden) |
|
|
||||||
| [sandip.live](https://sandip.live) | Sandip G ([sandman](https://github.com/sandman)) | Startups, tech and the good life | [Source](https://github.com/sandman/sandman.github.io) |
|
|
||||||
| [seadve.github.io](https://seadve.github.io/) | Dave Patrick Caberto ([SeaDve](https://github.com/SeaDve/)) | Personal blog and portfolio with custom CSS | [Source](https://github.com/SeaDve/seadve.github.io) |
|
|
||||||
| [mikufan.page](https://mikufan.page) | [Nadia](https://github.com/nyadiia) | Personal blog | [Source](https://github.com/nyadiia/mikufan.page) |
|
|
||||||
| [tim-boettcher.online](https://tim-boettcher.online/) | [Tim Böttcher](https://codeberg.org/Tim-Boettcher/) | Insights and ramblings of a deafblind programmer | [Source](https://codeberg.org/Tim-Boettcher/tim-boettcher-online/) |
|
|
||||||
| [www.richtman.au](https://www.richtman.au) | [Ariel Richtman](https://github.com/arichtman) | Personal tech blog | [Source](https://github.com/arichtman/www.richtman.au) |
|
|
||||||
| [Ponderosa Games](https://ponderosagames.com/) | John Burak ([JVimes](https://github.com/jvimes)) | A friendly indie game company | — |
|
|
||||||
| [jmbhughes.com](https://jmbhughes.com/) | Marcus Hughes ([jmbhughes](https://github.com/jmbhughes)) | Personal blog | [Source](https://github.com/jmbhughes/jmbhughes.github.io) |
|
|
||||||
| [szabolcs.me](https://szabolcs.me) | Szabolcs Fazekas ([szabolcsf](https://github.com/szabolcsf)) | Personal blog | [Source](https://github.com/szabolcsf/szabolcs.me) |
|
|
||||||
|
|
||||||
|
|
||||||
Using tabi? Feel free to create a PR and add your site to this list.
|
|
||||||
|
|
||||||
## Inspiration
|
|
||||||
|
|
||||||
This theme was inspired by:
|
|
||||||
- [shadharon](https://github.com/syedzayyan/shadharon) — tabi started as a fork of [syedzayyan](https://github.com/syedzayyan)'s theme
|
|
||||||
- [tailwind-nextjs-starter-blog](https://github.com/timlrx/tailwind-nextjs-starter-blog)
|
|
||||||
- [abridge](https://github.com/Jieiku/abridge)
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
Something not working? Have an idea? Let us know!
|
|
||||||
|
|
||||||
- Questions? → [Start a discussion](https://github.com/welpo/tabi/discussions)
|
|
||||||
- Found a bug? → [Report it here](https://github.com/welpo/tabi/issues/new?&labels=bug&template=2_bug_report.yml)
|
|
||||||
- Feature request? → [Tell us more!](https://github.com/welpo/tabi/issues/new?&labels=feature&template=3_feature_request.yml)
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Please do! We appreciate bug reports, improvements to translations or documentation (however minor), feature requests…
|
|
||||||
|
|
||||||
Take a look at the [Contributing Guidelines](/CONTRIBUTING.md) to learn more.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The code is available under the [MIT license](./LICENSE).
|
|
||||||
|
148
cliff.toml
148
cliff.toml
@@ -1,148 +0,0 @@
|
|||||||
# git-cliff ~ default configuration file
|
|
||||||
# https://git-cliff.org/docs/configuration
|
|
||||||
#
|
|
||||||
# Lines starting with "#" are comments.
|
|
||||||
# Configuration options are organized into tables and keys.
|
|
||||||
# See documentation for more information on available options.
|
|
||||||
|
|
||||||
[remote.github]
|
|
||||||
owner = "welpo"
|
|
||||||
repo = "tabi"
|
|
||||||
|
|
||||||
[changelog]
|
|
||||||
# changelog header
|
|
||||||
header = """
|
|
||||||
# Changelog
|
|
||||||
|
|
||||||
Welcome to the changelog for tabi. This document aims to provide a comprehensive list of all notable changes made to the project, organised chronologically by release version.
|
|
||||||
|
|
||||||
We use Semantic Versioning (SemVer) for our version numbers, formatted as MAJOR.MINOR.PATCH. Major version changes involve significant (breaking) changes, minor versions introduce features and improvements in a backward compatible manner, and patch versions are for bug fixes and minor tweaks.\n
|
|
||||||
"""
|
|
||||||
# template for the changelog body
|
|
||||||
# https://keats.github.io/tera/docs/#introduction
|
|
||||||
body = """
|
|
||||||
{%- macro remote_url() -%}
|
|
||||||
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
|
|
||||||
{%- endmacro -%}
|
|
||||||
{% if version %}\
|
|
||||||
{% if previous.version %}\
|
|
||||||
## [{{ version | trim_start_matches(pat="v") }}]({{ self::remote_url() }}/compare/{{ previous.version }}..{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
||||||
{% else %}\
|
|
||||||
## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
||||||
{% endif %}\
|
|
||||||
{% else %}\
|
|
||||||
## unreleased
|
|
||||||
{% endif %}\
|
|
||||||
|
|
||||||
{% macro commit(commit, in_breaking_section=false) -%}
|
|
||||||
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}{% if commit.breaking and not in_breaking_section %}[**‼️BREAKING‼️**] {% endif %}\
|
|
||||||
{{ commit.message | upper_first }}\
|
|
||||||
{% if not commit.remote.pr_number %} ([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }})){%- endif -%}{% if commit.remote.username %} by @{{ commit.remote.username }} \
|
|
||||||
{%- set co_authors = commit.footers | filter(attribute="token", value="Co-authored-by") | map(attribute="value") -%}
|
|
||||||
{%- set number_of_co_authors = co_authors | length -%}
|
|
||||||
{%- for co_author in co_authors -%}
|
|
||||||
{%- if not loop.last %}, {% else %} and {% endif %}@{{ co_author | split(pat=" <") | first | trim }}
|
|
||||||
{%- endfor -%}
|
|
||||||
{%- endif -%}
|
|
||||||
{% endmacro -%}
|
|
||||||
|
|
||||||
{%- set breaking_header_shown = false -%}
|
|
||||||
{% for commit in commits -%}
|
|
||||||
{% if commit.breaking and not breaking_header_shown -%}
|
|
||||||
{% raw %}\n### 💥 BREAKING CHANGES 💥\n{% endraw %}
|
|
||||||
{%- set_global breaking_header_shown = true -%}
|
|
||||||
{%- endif -%}
|
|
||||||
{%- if commit.breaking %}
|
|
||||||
{{ self::commit(commit=commit, in_breaking_section=true) -}}
|
|
||||||
{% endif -%}
|
|
||||||
{%- endfor -%}
|
|
||||||
{%- if breaking_header_shown == true -%}
|
|
||||||
{% raw %}\n{% endraw %}\
|
|
||||||
{%- endif -%}
|
|
||||||
|
|
||||||
{% for group, commits in commits | group_by(attribute="group") %}
|
|
||||||
### {{ group | striptags | trim | upper_first }}
|
|
||||||
{% for commit in commits
|
|
||||||
| filter(attribute="scope")
|
|
||||||
| sort(attribute="scope") %}
|
|
||||||
{{ self::commit(commit=commit) }}
|
|
||||||
{%- endfor -%}
|
|
||||||
{% raw %}\n{% endraw %}\
|
|
||||||
{%- for commit in commits %}
|
|
||||||
{%- if not commit.scope -%}
|
|
||||||
{{ self::commit(commit=commit) }}
|
|
||||||
{% endif -%}
|
|
||||||
{% endfor -%}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{%- if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 -%}
|
|
||||||
{% raw %}\n{% endraw %}### 👥 New contributors
|
|
||||||
{% raw -%}\n{% endraw -%}
|
|
||||||
{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
|
|
||||||
🫶 @{{ contributor.username }} made their first contribution
|
|
||||||
{%- if contributor.pr_number %} in \
|
|
||||||
[#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
|
|
||||||
{%- endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{%- endif %}
|
|
||||||
{% raw -%}\n{% endraw -%}
|
|
||||||
"""
|
|
||||||
|
|
||||||
# remove the leading and trailing whitespace from the template
|
|
||||||
trim = true
|
|
||||||
# changelog footer
|
|
||||||
footer = """
|
|
||||||
<!-- generated by git-cliff -->
|
|
||||||
"""
|
|
||||||
# postprocessors
|
|
||||||
postprocessors = [
|
|
||||||
# { pattern = " @([a-zA-Z0-9](?:[a-zA-Z0-9]+-?)*[a-zA-Z0-9])", replace = " [@$1](https://github.com/$1)"}, # add link to GitHub usernames (done in release script instead)
|
|
||||||
]
|
|
||||||
|
|
||||||
[git]
|
|
||||||
# parse the commits based on https://www.conventionalcommits.org
|
|
||||||
conventional_commits = true
|
|
||||||
# filter out the commits that are not conventional
|
|
||||||
filter_unconventional = true
|
|
||||||
# process each line of a commit as an individual commit
|
|
||||||
split_commits = false
|
|
||||||
# regex for preprocessing the commit messages
|
|
||||||
commit_preprocessors = [
|
|
||||||
# Replace the issue number with the link.
|
|
||||||
{ pattern = "\\(#([0-9]+)\\)", replace = "([#${1}](https://github.com/welpo/tabi/issues/${1}))" },
|
|
||||||
# Remove trailing whitespace.
|
|
||||||
{ pattern = ' +$', replace = "" },
|
|
||||||
# Replace multiple spaces with a single space.
|
|
||||||
{ pattern = ' +', replace = " " },
|
|
||||||
# Remove gitmoji, both actual UTF emoji and :emoji:
|
|
||||||
{ pattern = ' *(:\w+:|[\p{Emoji_Presentation}\p{Extended_Pictographic}](?:\u{FE0F})?\u{200D}?) *', replace = "" },
|
|
||||||
]
|
|
||||||
# regex for parsing and grouping commits
|
|
||||||
commit_parsers = [
|
|
||||||
{ message = "^feat", group = "<!-- 0 -->✨ Features" },
|
|
||||||
{ message = "^fix", group = "<!-- 1 -->🐛 Bug fixes" },
|
|
||||||
{ message = "^style", group = "<!-- 2 -->💄 Styling" },
|
|
||||||
{ message = "^doc", group = "<!-- 3 -->📝 Documentation" },
|
|
||||||
{ message = "^refactor", group = "<!-- 4 -->♻️ Refactor" },
|
|
||||||
{ message = "^test", group = "<!-- 5 -->✅ Testing" },
|
|
||||||
{ message = "^misc", group = "<!-- 6 -->🔧 Miscellaneous tasks" },
|
|
||||||
{ message = "^deprecate", group = "<!-- 7 -->🗑️️ Deprecations" },
|
|
||||||
{ message = "^chore", skip = true },
|
|
||||||
]
|
|
||||||
# protect breaking changes from being skipped due to matching a skipping commit_parser
|
|
||||||
protect_breaking_commits = true
|
|
||||||
# filter out the commits that are not matched by commit parsers
|
|
||||||
filter_commits = true
|
|
||||||
# regex for matching git tags
|
|
||||||
tag_pattern = "v[0-9].*"
|
|
||||||
|
|
||||||
# regex for skipping tags
|
|
||||||
skip_tags = "v0.1.0-beta.1"
|
|
||||||
# regex for ignoring tags
|
|
||||||
ignore_tags = ""
|
|
||||||
# sort the tags topologically
|
|
||||||
topo_order = false
|
|
||||||
# sort the commits inside sections by oldest/newest order
|
|
||||||
sort_commits = "newest"
|
|
||||||
# limit the number of commits included in the changelog.
|
|
||||||
# limit_commits = 42
|
|
36
content/projects/cert-fixer/index.md
Normal file
36
content/projects/cert-fixer/index.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
+++
|
||||||
|
title = "cert-fixer"
|
||||||
|
description = "Watch k8s Resources to fix self propagation check for clusters behind NAT."
|
||||||
|
weight = 30
|
||||||
|
|
||||||
|
[taxonomies]
|
||||||
|
tags = ["Rust", "Kubernetes", "CoreDNS", "BareMetal" ]
|
||||||
|
|
||||||
|
[extra]
|
||||||
|
local_image = "projects/cert-fixer/zutsu_logo.webp"
|
||||||
|
social_media_card = "social_cards/projects_doteki.jpg"
|
||||||
|
canonical_url = "https://alexohneander.de/projects/rustysearch/"
|
||||||
|
add_src_to_code_block = true
|
||||||
|
+++
|
||||||
|
|
||||||
|
### Why does this project exist?
|
||||||
|
|
||||||
|
If you run a Kubernetes cluster behind a NAT and want to create certificates with the **Cert-Manager**, you quickly run into the problem that the Self Propagation check fails. This issue can be fixed with a simple line of code in the **CoreDNS** config. But now you don't want to adjust the **CoreDNS** Config for every Ingress and restart the Pod afterwards. The **cert-fixer** is supposed to be a quick remedy for this.
|
||||||
|
|
||||||
|
### How does it work?
|
||||||
|
|
||||||
|
The **cert-fixer** is a simple **Kubernetes** Pod that checks continuously if some Ingresses have been created or deleted. If this is the case, the **CoreDNS** ConfigMap should be updated and the **CoreDNS** Pod should be restarted.
|
||||||
|
|
||||||
|
### How to use it?
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/alexohneander/cert-fixer/main/deployment/deployment.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### How to configure it?
|
||||||
|
|
||||||
|
The **cert-fixer** is configured via environment variables. The following variables are available:
|
||||||
|
|
||||||
|
| Variable | Description | Default |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| INGRESS_SERVICE | The name of the Ingress Controller Service | ingress-nginx-controller.ingress-nginx.svc.cluster.local |
|
BIN
content/projects/cert-fixer/social_cards/projects_doteki.jpg
Normal file
BIN
content/projects/cert-fixer/social_cards/projects_doteki.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 261 KiB |
BIN
content/projects/cert-fixer/zutsu_logo.webp
Normal file
BIN
content/projects/cert-fixer/zutsu_logo.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
22
deploy/deployment.yaml
Normal file
22
deploy/deployment.yaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: alexohneander-zola-deployment
|
||||||
|
namespace: websites
|
||||||
|
labels:
|
||||||
|
app: alexohneander-zola
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: alexohneander-zola
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: alexohneander-zola
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: alexohneander-zola
|
||||||
|
image: git.dev-null.rocks/alexohneander/alexohneander-zola:sha-c1c1512
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
59
deploy/ingress.yaml
Normal file
59
deploy/ingress.yaml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: alexohneander-zola-ingress
|
||||||
|
namespace: websites
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
kubernetes.io/tls-acme: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- alexohneander.de
|
||||||
|
- wellnitz-alex.de
|
||||||
|
- www.alexohneander.de
|
||||||
|
- www.wellnitz-alex.de
|
||||||
|
secretName: alexohneander-tls
|
||||||
|
rules:
|
||||||
|
- host: www.wellnitz-alex.de
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: alexohneander-zola-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
- host: www.alexohneander.de
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: alexohneander-zola-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
- host: wellnitz-alex.de
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: alexohneander-zola-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
- host: alexohneander.de
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: alexohneander-zola-service
|
||||||
|
port:
|
||||||
|
number: 80
|
12
deploy/service.yaml
Normal file
12
deploy/service.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: alexohneander-zola-service
|
||||||
|
namespace: websites
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: alexohneander-zola
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
Binary file not shown.
Before Width: | Height: | Size: 229 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.4 KiB |
9
renovate.json
Normal file
9
renovate.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"extends": ["config:recommended"],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
|
||||||
|
"automerge": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
screenshot.png
BIN
screenshot.png
Binary file not shown.
Before Width: | Height: | Size: 144 KiB |
57
sumi.toml
57
sumi.toml
@@ -1,57 +0,0 @@
|
|||||||
# git-sumi ~ configuration file
|
|
||||||
# Config: https://sumi.rs/docs/configuration
|
|
||||||
# Rules: https://sumi.rs/docs/rules
|
|
||||||
|
|
||||||
# Suppresses progress messages.
|
|
||||||
quiet = false
|
|
||||||
|
|
||||||
# Displays parsed commit message.
|
|
||||||
display = true
|
|
||||||
|
|
||||||
# Sets display format: cli, json, table, toml.
|
|
||||||
format = "cli"
|
|
||||||
|
|
||||||
# Processes each non-empty line as an individual commit.
|
|
||||||
split_lines = false
|
|
||||||
|
|
||||||
# Rule: Include one valid Gitmoji.
|
|
||||||
# See https://gitmoji.dev/.
|
|
||||||
gitmoji = true
|
|
||||||
|
|
||||||
# Rule: Description must start with the specified case.
|
|
||||||
# Options: 'any', 'lower', 'upper'.
|
|
||||||
description_case = "lower"
|
|
||||||
|
|
||||||
# Rule: Use the imperative mood in the description.
|
|
||||||
# Example: 'Fix bug' instead of 'Fixed bug'.
|
|
||||||
imperative = true
|
|
||||||
|
|
||||||
# Rule: Do not end commit header with a period.
|
|
||||||
no_period = true
|
|
||||||
|
|
||||||
# Rule: Header length limit.
|
|
||||||
# A value of 0 disables the rule.
|
|
||||||
max_header_length = 55
|
|
||||||
|
|
||||||
# Rule: Body line length limit.
|
|
||||||
# A value of 0 disables the rule.
|
|
||||||
max_body_length = 80
|
|
||||||
|
|
||||||
# Rule: No leading, trailing, or consecutive spaces.
|
|
||||||
whitespace = true
|
|
||||||
|
|
||||||
# Rule: Follow Conventional Commits format.
|
|
||||||
# See https://www.conventionalcommits.org/.
|
|
||||||
conventional = true
|
|
||||||
|
|
||||||
# Rule: List of allowed commit scopes.
|
|
||||||
# An empty list allows all scopes. Example: ["docs", "cli"].
|
|
||||||
scopes_allowed = []
|
|
||||||
|
|
||||||
# Rule: List of allowed commit types.
|
|
||||||
# An empty list allows all types. Example: ["feat", "fix", "docs"].
|
|
||||||
types_allowed = ["feat", "fix", "docs", "refactor", "test", "chore", "misc", "style"]
|
|
||||||
|
|
||||||
# Rule: Header must match regex pattern.
|
|
||||||
# Example: '^JIRA-\d+:'.
|
|
||||||
header_pattern = '^([\p{Emoji_Presentation}\p{Extended_Pictographic}](?:\u{FE0F})?\u{200D}?) \w' # The first character must be an emoji.
|
|
Reference in New Issue
Block a user