Compare commits
10 commits
8a3770e7dc
...
e231352009
Author | SHA1 | Date | |
---|---|---|---|
e231352009 | |||
f6aff22bb1 | |||
6163c3ff26 | |||
031a8a8cf5 | |||
2aae3d35f9 | |||
|
fa42826085 | ||
|
1474bc9fe3 | ||
|
bfc6f74f4d | ||
|
084ab77290 | ||
|
2de0f65728 |
37 changed files with 435 additions and 147 deletions
|
@ -2,32 +2,28 @@
|
||||||
name: Bug
|
name: Bug
|
||||||
about: Create a bug report to help us improve Lprs
|
about: Create a bug report to help us improve Lprs
|
||||||
title: '[Bug]: ...'
|
title: '[Bug]: ...'
|
||||||
labels: ["🐞 Bug"]
|
labels: ["Kind/Bug"]
|
||||||
assignees: ''
|
assignees: ''
|
||||||
---
|
---
|
||||||
|
|
||||||
## Checks
|
## Checks
|
||||||
|
|
||||||
* [ ] I added a descriptive title to this issue
|
* [ ] I added a descriptive title to this issue
|
||||||
* [ ] I have searched (Google, and GitHub) for similar issues and couldn't find anything
|
* [ ] I have searched Google for similar issues and couldn't find anything
|
||||||
* [ ] I have read [the README](https://github.com/TheAwiteb/lprs/blob/master/README.md) and still think this is a bug
|
* [ ] I have read [the README](https://git.4rs.nl/awiteb/lprs/src/branch/master/README.md) and still think this is a bug
|
||||||
|
|
||||||
## Version
|
## Version
|
||||||
<!-- Report for the bug only if it's present in the latest version of Lprs.
|
<!-- Report for the bug only if it's present in the latest version of Lprs.
|
||||||
If you are not using the latest version, please update and check if the bug is still present. -->
|
If you are not using the latest version, please update and check if the bug is still present. -->
|
||||||
|
|
||||||
> Then, run `rustc --version` to get the version of Rust.
|
<!-- Run `rustc --version` to get the version -->
|
||||||
|
Rustc version: `...`
|
||||||
Rust version: `...`
|
<!-- Run `lprs --version` to get the version, and make sure it's the latest one -->
|
||||||
|
Lprs version: `...`
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
<!-- A clear and concise description of what the bug is. -->
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
|
|
||||||
## The command
|
|
||||||
```bash
|
|
||||||
$ lprs ...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Expected behavior
|
## Expected behavior
|
||||||
<!-- A clear and concise description of what you expected to happen. -->
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an idea for Lprs
|
about: Suggest an idea for Lprs
|
||||||
title: '[Feature request]: ...'
|
title: '[Feature request]: ...'
|
||||||
labels: ["🔥 Feature"]
|
labels: ["Kind/Feature"]
|
||||||
assignees: ''
|
assignees: ''
|
||||||
---
|
---
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name: Question
|
name: Question
|
||||||
about: Ask a question about Lprs
|
about: Ask a question about Lprs
|
||||||
title: '[Question]: ...'
|
title: '[Question]: ...'
|
||||||
labels: ["💬 Question"]
|
labels: ["Kind/Question"]
|
||||||
assignees: ''
|
assignees: ''
|
||||||
---
|
---
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name: Typo report
|
name: Typo report
|
||||||
about: Report a typo in the documentation or the code
|
about: Report a typo in the documentation or the code
|
||||||
title: '[Typo]: ...'
|
title: '[Typo]: ...'
|
||||||
labels: ["📝 Typo"]
|
labels: ["Kind/Documentation"]
|
||||||
assignees: ''
|
assignees: ''
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -12,5 +12,5 @@ For the location, please provide a link to the code or the documentation.
|
||||||
|
|
||||||
| Location | Suggestion |
|
| Location | Suggestion |
|
||||||
|----------|------------|
|
|----------|------------|
|
||||||
| GitHub-link| Suggestion |
|
| Code-link| Suggestion |
|
||||||
|
|
|
@ -5,8 +5,8 @@ Make sure to replace `{issue title}` with the title of the issue you are fixing.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## Issue
|
## Issue
|
||||||
<!-- Copy the issue link from the issue you are fixing (e.g. https://github.com/TheAwiteb/lprs/issues/1) -->
|
<!-- Copy the issue link from the issue you are fixing (e.g. https://git.4rs.nl/awiteb/lprs/issues/1) -->
|
||||||
This will fix {issue GitHub link}
|
This will fix {issue Forgejo link}
|
||||||
|
|
||||||
## How I am fixing it
|
## How I am fixing it
|
||||||
<!-- A clear and concise description of how you are fixing the bug. -->
|
<!-- A clear and concise description of how you are fixing the bug. -->
|
48
.forgejo/workflows/cd.yml
Normal file
48
.forgejo/workflows/cd.yml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
name: CD
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v[0-9]+.[0-9]+.[0-9]+
|
||||||
|
- v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: master
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
- name: Install git-cliff
|
||||||
|
run: |
|
||||||
|
version="2.1.2"
|
||||||
|
wget "https://github.com/orhun/git-cliff/releases/download/v$version/git-cliff-$version-x86_64-unknown-linux-gnu.tar.gz"
|
||||||
|
tar -xvzf git-cliff-*.tar.gz
|
||||||
|
mv "git-cliff-$version/git-cliff" /usr/local/bin
|
||||||
|
rm -fr git-cliff-*
|
||||||
|
- name: Write changelog
|
||||||
|
run: |
|
||||||
|
git config user.name forgejo-actions
|
||||||
|
git config user.email forgejo-actions@noreply.localhost
|
||||||
|
echo 'TAG_CHANGELOG=$(if [[ $(git tag --sort=committerdate | tail -n 1) == *"-rc"* ]]; then git-cliff --strip all $(git tag --sort=committerdate | tail -n 2 | sed ":a; N; $!ba; s/\n/../g") | sed "s/## unreleased.*$//g"; else git-cliff -l --strip all | sed "s/^## \[.*$//g";fi)' | sed "s/\"/'/g" >> $GITHUB_ENV
|
||||||
|
if [[ $(git tag --sort=committerdate | tail -n 1) != *'-rc'* ]]; then
|
||||||
|
echo "The latest tag is not a release candidate, updating changelog for $GITHUB_REF_NAME"
|
||||||
|
git-cliff > CHANGELOG.md
|
||||||
|
git add CHANGELOG.md
|
||||||
|
git commit -m "Update changelog for $GITHUB_REF_NAME"
|
||||||
|
git push
|
||||||
|
echo "Changelog updated"
|
||||||
|
else
|
||||||
|
echo "The latest tag is a release candidate, not updating changelog"
|
||||||
|
fi
|
||||||
|
- name: Create Release
|
||||||
|
uses: actions/forgejo-release@v1
|
||||||
|
with:
|
||||||
|
direction: upload
|
||||||
|
url: https://git.4rs.nl
|
||||||
|
token: ${{ env.GITHUB_TOKEN }}
|
||||||
|
release-dir: release-dir
|
||||||
|
release-notes: ${{ env.TAG_CHANGELOG }}
|
||||||
|
prerelease: ${{ contains(env.GITHUB_REF_NAME, '-rc') }}
|
36
.forgejo/workflows/changelog.yml
Normal file
36
.forgejo/workflows/changelog.yml
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
name: Write changelog
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
write-changelog:
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: master
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
- name: Install git-cliff
|
||||||
|
run: |
|
||||||
|
version="2.1.2"
|
||||||
|
wget "https://github.com/orhun/git-cliff/releases/download/v$version/git-cliff-$version-x86_64-unknown-linux-gnu.tar.gz"
|
||||||
|
tar -xvzf git-cliff-*.tar.gz
|
||||||
|
mv "git-cliff-$version/git-cliff" /usr/local/bin
|
||||||
|
rm -fr git-cliff-*
|
||||||
|
- name: Write changelog
|
||||||
|
run: |
|
||||||
|
git config user.name forgejo-actions
|
||||||
|
git config user.email forgejo-actions@noreply.localhost
|
||||||
|
git-cliff > CHANGELOG.md
|
||||||
|
if [[ $(git status | grep --extended-regexp '^\s+modified:\s+CHANGELOG.md$') ]]; then
|
||||||
|
git add CHANGELOG.md
|
||||||
|
git commit -m "chore(changelog): Update changelog"
|
||||||
|
git push
|
||||||
|
echo "Changelog updated"
|
||||||
|
else
|
||||||
|
echo "No changes to changelog"
|
||||||
|
fi
|
38
.forgejo/workflows/ci.yml
Normal file
38
.forgejo/workflows/ci.yml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
pull_request:
|
||||||
|
branches: [master]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Rust build
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.70
|
||||||
|
- run: cargo build
|
||||||
|
rustfmt:
|
||||||
|
name: Rust format
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.70
|
||||||
|
- run: cargo fmt -- --check
|
||||||
|
check:
|
||||||
|
name: Rust check
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.70
|
||||||
|
- run: cargo check
|
||||||
|
clippy:
|
||||||
|
name: Rust clippy
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.70
|
||||||
|
- run: cargo clippy -- -D warnings
|
||||||
|
|
18
.forgejo/workflows/git-sumi.yml
Normal file
18
.forgejo/workflows/git-sumi.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- edited
|
||||||
|
- reopened
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
main:
|
||||||
|
runs-on: debian
|
||||||
|
steps:
|
||||||
|
- uses: https://code.forgejo.org/actions/checkout@v4
|
||||||
|
- run: |
|
||||||
|
curl -L "https://github.com/welpo/git-sumi/releases/download/v0.0.6/git-sumi-x86_64-unknown-linux-gnu.tar.xz" -o git-sumi.tar.xz
|
||||||
|
tar -xf git-sumi.tar.xz
|
||||||
|
mv git-sumi-x86_64-unknown-linux-gnu/git-sumi git-sumi
|
||||||
|
chmod +x git-sumi
|
||||||
|
./git-sumi "${{ github.event.pull_request.title }}"
|
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
|
@ -1 +0,0 @@
|
||||||
github: "TheAwiteb"
|
|
34
.github/workflows/auto_close_pr.yml
vendored
Normal file
34
.github/workflows/auto_close_pr.yml
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
name: Auto close PR
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
close_pr:
|
||||||
|
name: Auto close PR
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Send close comment
|
||||||
|
run: |
|
||||||
|
curl -L \
|
||||||
|
-X POST \
|
||||||
|
-H "Accept: application/vnd.github+json" \
|
||||||
|
-H "Authorization: Bearer $PAT" \
|
||||||
|
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||||
|
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.number }}/comments \
|
||||||
|
-d '{"body":"${{ env.BODY }}"}'
|
||||||
|
env:
|
||||||
|
PAT: ${{ secrets.PAT }}
|
||||||
|
BODY: This repository is mirror only and you cannot create a pull request for it. Please open your PR at https://git.4rs.nl/awiteb/lprs
|
||||||
|
- name: Close the PR
|
||||||
|
run: |
|
||||||
|
curl -L \
|
||||||
|
-X PATCH \
|
||||||
|
-H "Accept: application/vnd.github+json" \
|
||||||
|
-H "Authorization: Bearer $PAT" \
|
||||||
|
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||||
|
https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.number }} \
|
||||||
|
-d '{"state":"closed"}'
|
||||||
|
env:
|
||||||
|
PAT: ${{ secrets.PAT }}
|
26
.github/workflows/cd.yml
vendored
26
.github/workflows/cd.yml
vendored
|
@ -1,26 +0,0 @@
|
||||||
name: CD
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v[0-9]+.[0-9]+.[0-9]+
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- name: Create Release 🖋
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
prerelease: ${{ contains(github.ref, 'rc') || contains(github.ref, 'pre') }}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.PAT }}
|
|
||||||
|
|
||||||
- name: Publish to crates.io 🚀
|
|
||||||
uses: katyo/publish-crates@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.PAT }}
|
|
||||||
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
|
50
.github/workflows/ci.yml
vendored
50
.github/workflows/ci.yml
vendored
|
@ -1,50 +0,0 @@
|
||||||
name: CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
pull_request:
|
|
||||||
branches: [master]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Rust build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- run: cargo build --workspace --all-features
|
|
||||||
rustfmt:
|
|
||||||
name: Rust format
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- run: cargo fmt -- --check
|
|
||||||
check:
|
|
||||||
name: Rust check
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- run: cargo check --workspace --all-features
|
|
||||||
clippy:
|
|
||||||
name: Rust clippy
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- run: cargo clippy --workspace --all-features -- -D warnings
|
|
||||||
verify_msrv:
|
|
||||||
name: Verify Minimum Supported Rust Version in Cargo.toml
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Install or use cached `cargo-msrv`
|
|
||||||
uses: baptiste0928/cargo-install@v2
|
|
||||||
with:
|
|
||||||
crate: cargo-msrv
|
|
||||||
|
|
||||||
- name: Verify Minimum Rust Version
|
|
||||||
run: cargo-msrv verify
|
|
|
@ -2,21 +2,53 @@
|
||||||
|
|
||||||
Thank you for your interest in contributing to lprs! We welcome contributions from the community to help improve the project.
|
Thank you for your interest in contributing to lprs! We welcome contributions from the community to help improve the project.
|
||||||
|
|
||||||
## Getting Started
|
## Reporting Issues
|
||||||
|
|
||||||
To get started with contributing to lprs, please follow these steps:
|
If you encounter any issues or bugs while using lprs, please open a new issue on the Forgejo repository. When reporting an issue, please provide as much detail as possible, including steps to reproduce the issue and any relevant error messages.
|
||||||
|
|
||||||
1. Fork the lprs repository to your own GitHub account.
|
## Feature Requests
|
||||||
2. Clone the forked repository to your local machine.
|
|
||||||
3. Create a new branch for your changes: `git checkout -b my-branch-name`.
|
|
||||||
4. Make your desired changes to the codebase.
|
|
||||||
5. Test your changes to ensure they work as expected.
|
|
||||||
6. Run `just ci` to run the continuous integration.
|
|
||||||
7. Commit your changes: `git commit -m "Add my changes"`.
|
|
||||||
8. Push your changes to your forked repository: `git push origin my-branch-name`.
|
|
||||||
9. Open a pull request from your forked repository to the main lprs repository.
|
|
||||||
|
|
||||||
## Code Style
|
If you have a feature request or an idea for improving lprs, we encourage you to open a new issue on the Forgejo repository. Please describe the feature or improvement in detail and provide any relevant context or examples.
|
||||||
|
|
||||||
|
## Writing Code
|
||||||
|
Before you start writing code, please open a new issue first to discuss the proposed changes. This will help ensure that your contribution is aligned with the project's goals and that you are not duplicating work that is already in progress or has been completed by someone else.
|
||||||
|
|
||||||
|
### PR title
|
||||||
|
Your PR will squash and merge, and your PR title will be used as the commit message. Please make sure your PR title is clear and concise.
|
||||||
|
|
||||||
|
The title must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format. This means that the title should be in the following format:
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>(<scope>): <description>
|
||||||
|
```
|
||||||
|
|
||||||
|
- The `<scope>` is optional, and the `<description>` should be a clear and concise summary of the changes.
|
||||||
|
- You should use the imperative, present tense (e.g., "Add feature" instead of "Added feature").
|
||||||
|
- The `<type>` should be one of the following:
|
||||||
|
- `feat`: A new feature
|
||||||
|
- `fix`: A bug fix
|
||||||
|
- `docs`: Documentation changes
|
||||||
|
- `refactor`: Refactoring code without changing its behavior
|
||||||
|
- `change`: Changes that affect the meaning of the code
|
||||||
|
- `deprecate`: Changes that deprecate a part of the code
|
||||||
|
- `remove`: Changes that remove a deprecated part of the code
|
||||||
|
- `security`: Changes that affect the security of the code
|
||||||
|
- `perf`: A code change that improves performance
|
||||||
|
- `test`: Adding missing tests or correcting existing tests
|
||||||
|
- `chore`: Changes to the build process or auxiliary tools and libraries such as documentation generation
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```
|
||||||
|
- feat: something
|
||||||
|
- chore(ci): update MSRV
|
||||||
|
```
|
||||||
|
|
||||||
|
### PR description
|
||||||
|
Your PR description should provide a clear and concise summary of the changes you have made. It should also include any relevant context or background information that will help the project maintainers understand the purpose of the changes. Make sure to reference the issue that your PR is addressing, and note any breaking changes that your PR introduces.
|
||||||
|
|
||||||
|
Make sure to explain why you made the changes not just what changes you made.
|
||||||
|
|
||||||
|
### Code Style
|
||||||
|
|
||||||
Please follow the existing code style and conventions used in the lprs project. This includes:
|
Please follow the existing code style and conventions used in the lprs project. This includes:
|
||||||
|
|
||||||
|
@ -24,13 +56,14 @@ Please follow the existing code style and conventions used in the lprs project.
|
||||||
- Writing clear and concise code with meaningful variable and function names.
|
- Writing clear and concise code with meaningful variable and function names.
|
||||||
- Adding comments to explain complex logic or algorithms.
|
- Adding comments to explain complex logic or algorithms.
|
||||||
|
|
||||||
## Reporting Issues
|
### CI
|
||||||
|
Run the CI before submitting your code. You can run the CI with the following command:
|
||||||
|
|
||||||
If you encounter any issues or bugs while using lprs, please open a new issue on the GitHub repository. When reporting an issue, please provide as much detail as possible, including steps to reproduce the issue and any relevant error messages.
|
```bash
|
||||||
|
just ci
|
||||||
|
```
|
||||||
|
|
||||||
## Feature Requests
|
This will run the tests and check the code formatting. If the CI fail, please fix the issues before submitting your code.
|
||||||
|
|
||||||
If you have a feature request or an idea for improving lprs, we encourage you to open a new issue on the GitHub repository. Please describe the feature or improvement in detail and provide any relevant context or examples.
|
|
||||||
|
|
||||||
## Code Review
|
## Code Review
|
||||||
|
|
||||||
|
|
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -731,7 +731,7 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lprs"
|
name = "lprs"
|
||||||
version = "1.0.0"
|
version = "1.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[package]
|
[package]
|
||||||
name = "lprs"
|
name = "lprs"
|
||||||
version = "1.0.0"
|
version = "1.2.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
authors = ["Awiteb <awiteb@hotmail.com>"]
|
authors = ["Awiteb <a@4rs.nl>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
description = "A local CLI password manager"
|
description = "A local CLI password manager"
|
||||||
repository = "https://github.com/TheAwiteb/lprs"
|
repository = "https://git.4rs.nl/awiteb/lprs"
|
||||||
rust-version = "1.70.0"
|
rust-version = "1.70.0"
|
||||||
keywords = ["password", "manager", "CLI"]
|
keywords = ["password", "manager", "CLI"]
|
||||||
categories = ["command-line-utilities"]
|
categories = ["command-line-utilities"]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# This justfile is for the contrbutors of this project, not for the end user.
|
# This justfile is for the contrbutors of this project, not for the end user.
|
||||||
#
|
#
|
||||||
# Requirements for this justfile:
|
# Requirements for this justfile:
|
||||||
# - Linux distribution, the real programer does not program on garbage OS like Windows or MacOS
|
# - Linux distribution
|
||||||
# - just (Of course) <https://github.com/casey/just>
|
# - just (Of course) <https://github.com/casey/just>
|
||||||
# - cargo (For the build and tests) <https://doc.rust-lang.org/cargo/getting-started/installation.html>
|
# - cargo (For the build and tests) <https://doc.rust-lang.org/cargo/getting-started/installation.html>
|
||||||
|
|
100
cliff.toml
Normal file
100
cliff.toml
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
[changelog]
|
||||||
|
# changelog header
|
||||||
|
header = """
|
||||||
|
# Changelog
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n
|
||||||
|
"""
|
||||||
|
body = """
|
||||||
|
{# Check if there is a `BREAKING-CHANGE` footer in the message or not #}\
|
||||||
|
{% macro is_breaking(commit) %}\
|
||||||
|
{{"BREAKING-CHANGE" in commit.message}}\
|
||||||
|
{% endmacro is_breaking %}\
|
||||||
|
|
||||||
|
{# Return the commit header #}\
|
||||||
|
{% macro commit_header(commit) %}\
|
||||||
|
{{commit.message | split(pat="\n") | nth(n=0) | upper_first }}\
|
||||||
|
{% endmacro commit_header %}\
|
||||||
|
|
||||||
|
{# Return the `BREAKING-CHANGE` footer message, only one line #}\
|
||||||
|
{% macro bc_des(commit) %}\
|
||||||
|
{% for line in commit.message | split(pat="\n") %}\
|
||||||
|
{% if line is starting_with("BREAKING-CHANGE") %}\
|
||||||
|
{{line | split(pat=":") | nth(n=1) | split(pat="\n") | nth(n=0)}}\
|
||||||
|
{% endif %}\
|
||||||
|
{% endfor %}\
|
||||||
|
{% endmacro bc_des %}\
|
||||||
|
|
||||||
|
{% if version %}\
|
||||||
|
{% if previous.version %}\
|
||||||
|
## [{{ version | trim_start_matches(pat="v") }}](<REPO>/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 %}\
|
||||||
|
|
||||||
|
{% for group, commits in commits | group_by(attribute="group") %}\
|
||||||
|
### {{ group | upper_first }}
|
||||||
|
{% for commit in commits | sort(attribute="message") %}\
|
||||||
|
- {{ self::commit_header(commit=commit) }} ([`{{ commit.id | truncate(length=7, end="") }}`](<REPO>/commit/{{ commit.id }}))
|
||||||
|
{% if self::is_breaking(commit=commit) == "true" %}\
|
||||||
|
\t- **BC**: {{self::bc_des(commit=commit)}}
|
||||||
|
{% endif %}\
|
||||||
|
{% endfor %}\
|
||||||
|
{% endfor %}\n
|
||||||
|
"""
|
||||||
|
# remove the leading and trailing whitespace from the template
|
||||||
|
trim = true
|
||||||
|
# changelog footer
|
||||||
|
footer = """
|
||||||
|
This changelog was generated by [git-cliff](https://github.com/orhun/git-cliff)
|
||||||
|
"""
|
||||||
|
# postprocessors
|
||||||
|
postprocessors = [
|
||||||
|
{pattern = '<REPO>', replace = "https://git.4rs.nl/awiteb/lprs"}, # replace repository URL
|
||||||
|
{pattern = '- \((\w+)\):', replace = "- (**$1**)"}, # Make the scope blod
|
||||||
|
{pattern = "\t", replace = " "}, # Replace tap with 4 spaces
|
||||||
|
]
|
||||||
|
|
||||||
|
[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 = [
|
||||||
|
{pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([**#${2}**](<REPO>/issues/${2}))"}, # replace issue numbers (Note the PR is also an issue in GitHub, so this will also link to PRs)
|
||||||
|
{pattern = ' +$', replace = ""}, # Remove trailing whitespace.
|
||||||
|
{pattern = ' +', replace = " "}, # Replace multiple spaces with a single space.
|
||||||
|
]
|
||||||
|
# regex for parsing and grouping commits
|
||||||
|
commit_parsers = [
|
||||||
|
# Gitmoji
|
||||||
|
{message = "^feat", group = "Added"},
|
||||||
|
{message = "^fix", group = "Fixed"},
|
||||||
|
{message = "^(refactor|change)", group = "Changed"},
|
||||||
|
{message = "^deprecate", group = "Deprecated"},
|
||||||
|
{message = "^remove", group = "Removed"},
|
||||||
|
{message = "^security", group = "Security"},
|
||||||
|
]
|
||||||
|
# protect breaking changes from being skipped due to matching a skipping commit_parser
|
||||||
|
protect_breaking_commits = false
|
||||||
|
# filter out the commits that are not matched by commit parsers
|
||||||
|
filter_commits = false
|
||||||
|
# regex for matching git tags
|
||||||
|
tag_pattern = "v[0-9]+\\.[0-9]+\\.[0-9]+"
|
||||||
|
|
||||||
|
# regex for skipping tags
|
||||||
|
skip_tags = ""
|
||||||
|
# regex for ignoring tags
|
||||||
|
ignore_tags = "v[0-9]+\\.[0-9]+\\.[0-9]+-(alpha|beta|rc)(\\.[0-9]+)?"
|
||||||
|
# sort the tags topologically
|
||||||
|
topo_order = false
|
||||||
|
# sort the commits inside sections by oldest/newest order
|
||||||
|
sort_commits = "oldest"
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
@ -47,11 +47,11 @@ fn main() -> ExitCode {
|
||||||
#[cfg(feature = "update-notify")]
|
#[cfg(feature = "update-notify")]
|
||||||
{
|
{
|
||||||
match utils::lprs_version() {
|
match utils::lprs_version() {
|
||||||
Ok(Some(new_version)) if new_version == VERSION => {
|
Ok(Some(new_version)) if new_version != VERSION => {
|
||||||
println!(
|
println!(
|
||||||
"Warning: The version you are using of lprs is outdated. There is a newer version, which is `{new_version}`, and your version is `{VERSION}`
|
"Warning: The version you are using of lprs is outdated. There is a newer version, which is `{new_version}`, and your version is `{VERSION}`
|
||||||
\rYou can update via: `cargo install lprs --locked`
|
\rYou can update via: `cargo install lprs --locked`
|
||||||
\rOr via git repo: `cargo install --locked --git https://github.com/TheAwiteb/lprs.git`
|
\rOr via git repo: `cargo install --locked --git https://git.4rs.nl/awiteb/lprs.git`
|
||||||
\rTo disable update notification: `cargo install lprs --locked --no-default-features`\n\n"
|
\rTo disable update notification: `cargo install lprs --locked --no-default-features`\n\n"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@ use super::{Password, Passwords};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct BitWardenLoginData {
|
pub struct BitWardenLoginData {
|
||||||
pub username: String,
|
pub username: Option<String>,
|
||||||
pub password: String,
|
pub password: Option<String>,
|
||||||
pub uris: Option<Vec<BitWardenUri>>,
|
pub uris: Option<Vec<BitWardenUri>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ pub struct BitWardenPassword {
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub ty: i32,
|
pub ty: i32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub login: BitWardenLoginData,
|
pub login: Option<BitWardenLoginData>,
|
||||||
pub notes: Option<String>,
|
pub notes: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,12 +43,17 @@ impl From<BitWardenPassword> for Password {
|
||||||
fn from(value: BitWardenPassword) -> Self {
|
fn from(value: BitWardenPassword) -> Self {
|
||||||
Self {
|
Self {
|
||||||
name: value.name,
|
name: value.name,
|
||||||
username: value.login.username,
|
username: value
|
||||||
password: value.login.password,
|
.login
|
||||||
|
.as_ref()
|
||||||
|
.map_or_else(String::new, |l| l.username.to_owned().unwrap_or_default()),
|
||||||
|
password: value
|
||||||
|
.login
|
||||||
|
.as_ref()
|
||||||
|
.map_or_else(String::new, |l| l.password.to_owned().unwrap_or_default()),
|
||||||
service: value
|
service: value
|
||||||
.login
|
.login
|
||||||
.uris
|
.and_then(|l| l.uris.and_then(|p| p.first().map(|u| u.uri.clone()))),
|
||||||
.and_then(|p| p.first().map(|u| u.uri.clone())),
|
|
||||||
note: value.notes,
|
note: value.notes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,13 +64,13 @@ impl From<Password> for BitWardenPassword {
|
||||||
Self {
|
Self {
|
||||||
ty: 1,
|
ty: 1,
|
||||||
name: value.name,
|
name: value.name,
|
||||||
login: BitWardenLoginData {
|
login: Some(BitWardenLoginData {
|
||||||
username: value.username,
|
username: Some(value.username),
|
||||||
password: value.password,
|
password: Some(value.password),
|
||||||
uris: value
|
uris: value
|
||||||
.service
|
.service
|
||||||
.map(|s| vec![BitWardenUri { mt: None, uri: s }]),
|
.map(|s| vec![BitWardenUri { mt: None, uri: s }]),
|
||||||
},
|
}),
|
||||||
notes: value.note,
|
notes: value.note,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Lprs - A local CLI password manager
|
// Lprs - A local CLI password manager
|
||||||
// Copyright (C) 2024 Awiteb
|
// Copyright (C) 2024 Awiteb <a@4rs.nl>
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
@ -67,7 +67,7 @@ pub fn lprs_version() -> LprsResult<Option<String>> {
|
||||||
.get("https://crates.io/api/v1/crates/lprs")
|
.get("https://crates.io/api/v1/crates/lprs")
|
||||||
.header(
|
.header(
|
||||||
"User-Agent",
|
"User-Agent",
|
||||||
format!("Lprs <{current_time}> (https://github.com/theawiteb/lprs)"),
|
format!("Lprs <{current_time}> (https://git.4rs.nl/awiteb/lprs)"),
|
||||||
)
|
)
|
||||||
.send()
|
.send()
|
||||||
.map(|r| r.text())
|
.map(|r| r.text())
|
||||||
|
|
57
sumi.toml
Normal file
57
sumi.toml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# 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 = false
|
||||||
|
|
||||||
|
# Rule: Description must start with the specified case.
|
||||||
|
# Options: 'any', 'lower', 'upper'.
|
||||||
|
description_case = "any"
|
||||||
|
|
||||||
|
# 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", "change", "deprecate", "remove", "security", "perf", "test", "chore"]
|
||||||
|
|
||||||
|
# Rule: Header must match regex pattern.
|
||||||
|
# Example: '^JIRA-\d+:'.
|
||||||
|
header_pattern = '^\w+(\s\(\w+\))?(!)?: \w'
|
Loading…
Reference in a new issue