initial project structure
Some checks failed
Some checks failed
This commit is contained in:
commit
0c2458cd7d
15
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
15
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
### Summary :memo:
|
||||||
|
_Write an overview about it._
|
||||||
|
|
||||||
|
### Details
|
||||||
|
_Describe more what you did on changes._
|
||||||
|
1. (...)
|
||||||
|
2. (...)
|
||||||
|
|
||||||
|
### Bugfixes :bug: (delete if dind't have any)
|
||||||
|
-
|
||||||
|
|
||||||
|
### Checks
|
||||||
|
- [ ] Closed #798
|
||||||
|
- [ ] Tested Changes
|
||||||
|
- [ ] Stakeholder Approval
|
3
.gitea/release_message.sh
Executable file
3
.gitea/release_message.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
previous_tag=$(git tag --sort=-creatordate | sed -n 2p)
|
||||||
|
git shortlog "${previous_tag}.." | sed 's/^./ &/'
|
36
.gitea/rename_project.sh
Executable file
36
.gitea/rename_project.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
while getopts a:n:u:d: flag
|
||||||
|
do
|
||||||
|
case "${flag}" in
|
||||||
|
a) author=${OPTARG};;
|
||||||
|
n) name=${OPTARG};;
|
||||||
|
u) urlname=${OPTARG};;
|
||||||
|
d) description=${OPTARG};;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Author: $author";
|
||||||
|
echo "Project Name: $name";
|
||||||
|
echo "Project URL name: $urlname";
|
||||||
|
echo "Description: $description";
|
||||||
|
|
||||||
|
echo "Renaming project..."
|
||||||
|
|
||||||
|
original_author="author_name"
|
||||||
|
original_name="project_name"
|
||||||
|
original_urlname="project_urlname"
|
||||||
|
original_description="project_description"
|
||||||
|
# for filename in $(find . -name "*.*")
|
||||||
|
for filename in $(git ls-files)
|
||||||
|
do
|
||||||
|
sed -i "s/$original_author/$author/g" $filename
|
||||||
|
sed -i "s/$original_name/$name/g" $filename
|
||||||
|
sed -i "s/$original_urlname/$urlname/g" $filename
|
||||||
|
sed -i "s/$original_description/$description/g" $filename
|
||||||
|
echo "Renamed $filename"
|
||||||
|
done
|
||||||
|
|
||||||
|
mv project_name $name
|
||||||
|
|
||||||
|
# This command runs only once on GHA!
|
||||||
|
rm -rf .gitea/template.yml
|
1
.gitea/template.yml
Normal file
1
.gitea/template.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
author: rochacbruno
|
88
.gitea/workflows/main.yml
Normal file
88
.gitea/workflows/main.yml
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# This is a basic workflow to help you get started with Actions
|
||||||
|
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
# Controls when the workflow will run
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push or pull request events but only for the main branch
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linter:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
python-version: [3.9]
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
- name: Install project
|
||||||
|
run: make install
|
||||||
|
- name: Run linter
|
||||||
|
run: make lint
|
||||||
|
|
||||||
|
tests_linux:
|
||||||
|
needs: linter
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
python-version: [3.9]
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
- name: Install project
|
||||||
|
run: make install
|
||||||
|
- name: Run tests
|
||||||
|
run: make test
|
||||||
|
|
||||||
|
# tests_mac:
|
||||||
|
# needs: linter
|
||||||
|
# strategy:
|
||||||
|
# fail-fast: false
|
||||||
|
# matrix:
|
||||||
|
# python-version: [3.9]
|
||||||
|
# os: [macos-latest]
|
||||||
|
# runs-on: ${{ matrix.os }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
# - uses: actions/setup-python@v4
|
||||||
|
# with:
|
||||||
|
# python-version: ${{ matrix.python-version }}
|
||||||
|
# - name: Install project
|
||||||
|
# run: make install
|
||||||
|
# - name: Run tests
|
||||||
|
# run: make test
|
||||||
|
|
||||||
|
# tests_win:
|
||||||
|
# needs: linter
|
||||||
|
# strategy:
|
||||||
|
# fail-fast: false
|
||||||
|
# matrix:
|
||||||
|
# python-version: [3.9]
|
||||||
|
# os: [windows-latest]
|
||||||
|
# runs-on: ${{ matrix.os }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
# - uses: actions/setup-python@v4
|
||||||
|
# with:
|
||||||
|
# python-version: ${{ matrix.python-version }}
|
||||||
|
# - name: Install Pip
|
||||||
|
# run: pip install --user --upgrade pip
|
||||||
|
# - name: Install project
|
||||||
|
# run: pip install -e .[test]
|
||||||
|
# - name: run tests
|
||||||
|
# run: pytest -s -vvvv -l --tb=long tests
|
62
.gitea/workflows/release.yml
Normal file
62
.gitea/workflows/release.yml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
name: Upload Python Package
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# Sequence of patterns matched against refs/tags
|
||||||
|
tags:
|
||||||
|
- '*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
name: Create Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
# by default, it uses a depth of 1
|
||||||
|
# this fetches all history so that we can read each commit
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Generate Changelog
|
||||||
|
run: .gitea/release_message.sh > release_message.md
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
body_path: release_message.md
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
needs: release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel twine
|
||||||
|
- name: Check version match
|
||||||
|
run: |
|
||||||
|
REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F '/' '{print $2}' | tr '-' '_' | tr '[:upper:]' '[:lower:]')
|
||||||
|
if [ "$(cat $REPOSITORY_NAME/VERSION)" = "${GITHUB_REF_NAME:1}" ] ; then
|
||||||
|
echo "Version matches successfully!"
|
||||||
|
else
|
||||||
|
echo "Version must match!"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: gitearobot
|
||||||
|
TWINE_PASSWORD: ${{ secrets.PACKAGE_GITEA_PAT }}
|
||||||
|
run: |
|
||||||
|
REPOSITORY_OWNER=$(echo "$GITHUB_REPOSITORY" | awk -F '/' '{print $1}')
|
||||||
|
python setup.py sdist bdist_wheel
|
||||||
|
twine upload --repository-url https://git.disi.dev/api/packages/$REPOSITORY_OWNER/pypi dist/*
|
42
.gitea/workflows/rename_project.yml
Normal file
42
.gitea/workflows/rename_project.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
name: Rename the project from template
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
permissions: write-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
rename-project:
|
||||||
|
if: ${{ !endsWith (gitea.repository, 'Templates/Dotnet_Executable') }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
# by default, it uses a depth of 1
|
||||||
|
# this fetches all history so that we can read each commit
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: ${{ gitea.head_ref }}
|
||||||
|
|
||||||
|
- run: echo "REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F '/' '{print $2}' | tr '-' '_' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- run: echo "REPOSITORY_URLNAME=$(echo "$GITHUB_REPOSITORY" | awk -F '/' '{print $2}')" >> $GITHUB_ENV
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- run: echo "REPOSITORY_OWNER=$(echo "$GITHUB_REPOSITORY" | awk -F '/' '{print $1}')" >> $GITHUB_ENV
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Is this still a template
|
||||||
|
id: is_template
|
||||||
|
run: echo "::set-output name=is_template::$(ls .gitea/template.yml &> /dev/null && echo true || echo false)"
|
||||||
|
|
||||||
|
- name: Rename the project
|
||||||
|
if: steps.is_template.outputs.is_template == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Renaming the project with -a(author) ${{ env.REPOSITORY_OWNER }} -n(name) ${{ env.REPOSITORY_NAME }} -u(urlname) ${{ env.REPOSITORY_URLNAME }}"
|
||||||
|
.gitea/rename_project.sh -a ${{ env.REPOSITORY_OWNER }} -n ${{ env.REPOSITORY_NAME }} -u ${{ env.REPOSITORY_URLNAME }} -d "Awesome ${{ env.REPOSITORY_NAME }} created by ${{ env.REPOSITORY_OWNER }}"
|
||||||
|
|
||||||
|
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||||
|
with:
|
||||||
|
commit_message: "✅ Ready to clone and code."
|
||||||
|
# commit_options: '--amend --no-edit'
|
||||||
|
push_options: --force
|
27
.gitea/workflows/sonar.yml
Normal file
27
.gitea/workflows/sonar.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened]
|
||||||
|
|
||||||
|
name: SonarQube Scan
|
||||||
|
jobs:
|
||||||
|
sonarqube:
|
||||||
|
name: SonarQube Trigger
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ !endsWith (github.repository, 'Templates/Dotnet_Executable') }}
|
||||||
|
steps:
|
||||||
|
- name: Checking out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
# Disabling shallow clone is recommended for improving relevancy of reporting
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: SonarQube Scan
|
||||||
|
uses: sonarsource/sonarqube-scan-action@master
|
||||||
|
env:
|
||||||
|
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
|
||||||
|
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }}
|
||||||
|
with:
|
||||||
|
args: >
|
||||||
|
-Dsonar.projectKey=project_name
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
**/bin
|
||||||
|
**/obj
|
107
CONTRIBUTING.md
Normal file
107
CONTRIBUTING.md
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
# How to develop on this project
|
||||||
|
|
||||||
|
project_name welcomes contributions from the community.
|
||||||
|
|
||||||
|
**You need Dotnet 9!**
|
||||||
|
|
||||||
|
This instructions are for linux base systems. (Linux, MacOS, BSD, etc.)
|
||||||
|
## Setting up your own fork of this repo.
|
||||||
|
|
||||||
|
- On gitea interface click on `Fork` button.
|
||||||
|
- Clone your fork of this repo. `git clone git@git.disi.dev:YOUR_GIT_USERNAME/project_urlname.git`
|
||||||
|
- Enter the directory `cd project_urlname`
|
||||||
|
- Add upstream repo `git remote add upstream https://git.disi.dev/author_name/project_urlname`
|
||||||
|
|
||||||
|
## Setting up your own virtual environment
|
||||||
|
|
||||||
|
Run `make virtualenv` to create a virtual environment.
|
||||||
|
then activate it with `source .venv/bin/activate`.
|
||||||
|
|
||||||
|
## Install the project in develop mode
|
||||||
|
|
||||||
|
Run `make install` to install the project in develop mode.
|
||||||
|
|
||||||
|
## Run the tests to ensure everything is working
|
||||||
|
|
||||||
|
Run `make test` to run the tests.
|
||||||
|
|
||||||
|
## Create a new branch to work on your contribution
|
||||||
|
|
||||||
|
Run `git checkout -b my_contribution`
|
||||||
|
|
||||||
|
## Make your changes
|
||||||
|
|
||||||
|
Edit the files using your preferred editor. (we recommend VIM or VSCode)
|
||||||
|
|
||||||
|
## Format the code
|
||||||
|
|
||||||
|
Run `make fmt` to format the code.
|
||||||
|
|
||||||
|
## Run the linter
|
||||||
|
|
||||||
|
Run `make lint` to run the linter.
|
||||||
|
|
||||||
|
## Test your changes
|
||||||
|
|
||||||
|
Run `make test` to run the tests.
|
||||||
|
|
||||||
|
Ensure code coverage report shows `100%` coverage, add tests to your PR.
|
||||||
|
|
||||||
|
## Build the docs locally
|
||||||
|
|
||||||
|
Run `make docs` to build the docs.
|
||||||
|
|
||||||
|
Ensure your new changes are documented.
|
||||||
|
|
||||||
|
## Commit your changes
|
||||||
|
|
||||||
|
This project uses [conventional git commit messages](https://www.conventionalcommits.org/en/v1.0.0/).
|
||||||
|
|
||||||
|
Example: `fix(package): update setup.py arguments 🎉` (emojis are fine too)
|
||||||
|
|
||||||
|
## Push your changes to your fork
|
||||||
|
|
||||||
|
Run `git push origin my_contribution`
|
||||||
|
|
||||||
|
## Submit a pull request
|
||||||
|
|
||||||
|
On gitea interface, click on `Pull Request` button.
|
||||||
|
|
||||||
|
Wait CI to run and one of the developers will review your PR.
|
||||||
|
## Makefile utilities
|
||||||
|
|
||||||
|
This project comes with a `Makefile` that contains a number of useful utility.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
❯ make
|
||||||
|
Usage: make <target>
|
||||||
|
|
||||||
|
Targets:
|
||||||
|
help: ## Show the help.
|
||||||
|
install: ## Install the project in dev mode.
|
||||||
|
fmt: ## Format code using black & isort.
|
||||||
|
lint: ## Run pep8, black, mypy linters.
|
||||||
|
test: lint ## Run tests and generate coverage report.
|
||||||
|
watch: ## Run tests on every change.
|
||||||
|
clean: ## Clean unused files.
|
||||||
|
release: ## Create a new tag for release.
|
||||||
|
docs: ## Build the documentation.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Making a new release
|
||||||
|
|
||||||
|
This project uses [semantic versioning](https://semver.org/) and tags releases with `X.Y.Z`
|
||||||
|
Every time a new tag is created and pushed to the remote repo, gitea actions will
|
||||||
|
automatically create a new release on gitea.
|
||||||
|
|
||||||
|
To trigger a new release all you need to do is.
|
||||||
|
|
||||||
|
1. If you have changes to add to the repo
|
||||||
|
* Make your changes following the steps described above.
|
||||||
|
* Commit your changes following the [conventional git commit messages](https://www.conventionalcommits.org/en/v1.0.0/).
|
||||||
|
2. Run the tests to ensure everything is working.
|
||||||
|
4. Run `make release` to create a new tag and push it to the remote repo.
|
||||||
|
|
||||||
|
the `make release` will ask you the version number to create the tag, ex: type `0.1.1` when you are asked.
|
||||||
|
|
||||||
|
> **CAUTION**: The make release will change local changelog files and commit all the unstaged changes you have.
|
4
Containerfile
Normal file
4
Containerfile
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
FROM mcr.microsoft.com/dotnet/runtime:9.0
|
||||||
|
COPY . /app
|
||||||
|
WORKDIR /app
|
||||||
|
CMD ["project_name"]
|
13
HISTORY.md
Normal file
13
HISTORY.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
|
||||||
|
0.1.2 (2021-08-14)
|
||||||
|
------------------
|
||||||
|
- Fix release, README and windows CI. [Bruno Rocha]
|
||||||
|
- Release: version 0.1.0. [Bruno Rocha]
|
||||||
|
|
||||||
|
|
||||||
|
0.1.0 (2021-08-14)
|
||||||
|
------------------
|
||||||
|
- Add release command. [Bruno Rocha]
|
24
LICENSE
Normal file
24
LICENSE
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
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 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.
|
||||||
|
|
||||||
|
For more information, please refer to <https://unlicense.org>
|
5
MANIFEST.in
Normal file
5
MANIFEST.in
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
include LICENSE
|
||||||
|
include HISTORY.md
|
||||||
|
include Containerfile
|
||||||
|
graft tests
|
||||||
|
graft project_name
|
122
Makefile
Normal file
122
Makefile
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
.ONESHELL:
|
||||||
|
ENV_PREFIX=$(shell python -c "if __import__('pathlib').Path('.venv/bin/pip').exists(): print('.venv/bin/')")
|
||||||
|
USING_POETRY=$(shell grep "tool.poetry" pyproject.toml && echo "yes")
|
||||||
|
|
||||||
|
.PHONY: help
|
||||||
|
help: ## Show the help.
|
||||||
|
@echo "Usage: make <target>"
|
||||||
|
@echo ""
|
||||||
|
@echo "Targets:"
|
||||||
|
@fgrep "##" Makefile | fgrep -v fgrep
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: show
|
||||||
|
show: ## Show the current environment.
|
||||||
|
@echo "Current environment:"
|
||||||
|
@if [ "$(USING_POETRY)" ]; then poetry env info && exit; fi
|
||||||
|
@echo "Running using $(ENV_PREFIX)"
|
||||||
|
@$(ENV_PREFIX)python -V
|
||||||
|
@$(ENV_PREFIX)python -m site
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install: ## Install the project in dev mode.
|
||||||
|
@if [ "$(USING_POETRY)" ]; then poetry install && exit; fi
|
||||||
|
@echo "Don't forget to run 'make virtualenv' if you got errors."
|
||||||
|
$(ENV_PREFIX)pip install -e .[test]
|
||||||
|
|
||||||
|
.PHONY: fmt
|
||||||
|
fmt: ## Format code using black & isort.
|
||||||
|
$(ENV_PREFIX)isort project_name/
|
||||||
|
$(ENV_PREFIX)black -l 79 project_name/
|
||||||
|
$(ENV_PREFIX)black -l 79 tests/
|
||||||
|
|
||||||
|
.PHONY: lint
|
||||||
|
lint: ## Run pep8, black, mypy linters.
|
||||||
|
$(ENV_PREFIX)flake8 project_name/
|
||||||
|
$(ENV_PREFIX)black -l 79 --check project_name/
|
||||||
|
$(ENV_PREFIX)black -l 79 --check tests/
|
||||||
|
$(ENV_PREFIX)mypy --ignore-missing-imports project_name/
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: lint ## Run tests and generate coverage report.
|
||||||
|
$(ENV_PREFIX)pytest -v --cov-config .coveragerc --cov=project_name -l --tb=short --maxfail=1 tests/
|
||||||
|
$(ENV_PREFIX)coverage xml
|
||||||
|
$(ENV_PREFIX)coverage html
|
||||||
|
|
||||||
|
.PHONY: watch
|
||||||
|
watch: ## Run tests on every change.
|
||||||
|
ls **/**.py | entr $(ENV_PREFIX)pytest -s -vvv -l --tb=long --maxfail=1 tests/
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean: ## Clean unused files.
|
||||||
|
@find ./ -name '*.pyc' -exec rm -f {} \;
|
||||||
|
@find ./ -name '__pycache__' -exec rm -rf {} \;
|
||||||
|
@find ./ -name 'Thumbs.db' -exec rm -f {} \;
|
||||||
|
@find ./ -name '*~' -exec rm -f {} \;
|
||||||
|
@rm -rf .cache
|
||||||
|
@rm -rf .pytest_cache
|
||||||
|
@rm -rf .mypy_cache
|
||||||
|
@rm -rf build
|
||||||
|
@rm -rf dist
|
||||||
|
@rm -rf *.egg-info
|
||||||
|
@rm -rf htmlcov
|
||||||
|
@rm -rf .tox/
|
||||||
|
@rm -rf docs/_build
|
||||||
|
|
||||||
|
.PHONY: virtualenv
|
||||||
|
virtualenv: ## Create a virtual environment.
|
||||||
|
@if [ "$(USING_POETRY)" ]; then poetry install && exit; fi
|
||||||
|
@echo "creating virtualenv ..."
|
||||||
|
@rm -rf .venv
|
||||||
|
@python3 -m venv .venv
|
||||||
|
@./.venv/bin/pip install -U pip
|
||||||
|
@./.venv/bin/pip install -e .[test]
|
||||||
|
@echo
|
||||||
|
@echo "!!! Please run 'source .venv/bin/activate' to enable the environment !!!"
|
||||||
|
|
||||||
|
.PHONY: release
|
||||||
|
release: ## Create a new tag for release.
|
||||||
|
@echo "WARNING: This operation will create a version tag and push to gitea"
|
||||||
|
@read -p "Version? (provide the next x.y.z semver) : " TAG
|
||||||
|
@echo "$${TAG}" > project_name/VERSION
|
||||||
|
@$(ENV_PREFIX)gitchangelog > HISTORY.md
|
||||||
|
@git add project_name/VERSION HISTORY.md
|
||||||
|
@git commit -m "release: version $${TAG} 🚀"
|
||||||
|
@echo "creating git tag : $${TAG}"
|
||||||
|
@git tag $${TAG}
|
||||||
|
@git push -u origin HEAD --tags
|
||||||
|
@echo "Gitea Actions will detect the new tag and release the new version."
|
||||||
|
|
||||||
|
.PHONY: docs
|
||||||
|
docs: ## Build the documentation.
|
||||||
|
@echo "building documentation ..."
|
||||||
|
@$(ENV_PREFIX)mkdocs build
|
||||||
|
URL="site/index.html"; xdg-open $$URL || sensible-browser $$URL || x-www-browser $$URL || gnome-open $$URL || open $$URL
|
||||||
|
|
||||||
|
.PHONY: switch-to-poetry
|
||||||
|
switch-to-poetry: ## Switch to poetry package manager.
|
||||||
|
@echo "Switching to poetry ..."
|
||||||
|
@if ! poetry --version > /dev/null; then echo 'poetry is required, install from https://python-poetry.org/'; exit 1; fi
|
||||||
|
@rm -rf .venv
|
||||||
|
@poetry init --no-interaction --name=a_flask_test --author=rochacbruno
|
||||||
|
@echo "" >> pyproject.toml
|
||||||
|
@echo "[tool.poetry.scripts]" >> pyproject.toml
|
||||||
|
@echo "project_name = 'project_name.__main__:main'" >> pyproject.toml
|
||||||
|
@cat requirements.txt | while read in; do poetry add --no-interaction "$${in}"; done
|
||||||
|
@cat requirements-test.txt | while read in; do poetry add --no-interaction "$${in}" --dev; done
|
||||||
|
@poetry install --no-interaction
|
||||||
|
@mkdir -p .gitea/backup
|
||||||
|
@mv requirements* .gitea/backup
|
||||||
|
@mv setup.py .gitea/backup
|
||||||
|
@echo "You have switched to https://python-poetry.org/ package manager."
|
||||||
|
@echo "Please run 'poetry shell' or 'poetry run project_name'"
|
||||||
|
|
||||||
|
.PHONY: init
|
||||||
|
init: ## Initialize the project based on an application template.
|
||||||
|
@./.gitea/init.sh
|
||||||
|
|
||||||
|
|
||||||
|
# This project has been generated from rochacbruno/python-project-template
|
||||||
|
# __author__ = 'rochacbruno'
|
||||||
|
# __repo__ = https://github.com/rochacbruno/python-project-template
|
||||||
|
# __sponsor__ = https://github.com/sponsors/rochacbruno/
|
46
README.md
Normal file
46
README.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
# Dotnet Project Template
|
||||||
|
|
||||||
|
A low dependency and really simple to start project template for Python Projects.
|
||||||
|
|
||||||
|
See also
|
||||||
|
- [Dotnet-Library-Template](https://git.disi.dev/Templates/Dotnet_Library/) for a library template.
|
||||||
|
|
||||||
|
### HOW TO USE THIS TEMPLATE
|
||||||
|
|
||||||
|
1. Create a new repository from this template and choose a name for your project
|
||||||
|
(e.g. `my_awesome_project` - recommendation is to use all lowercase and underscores separation for repo names.)
|
||||||
|
2. Wait until the first run of CI finishes (Gitea Actions will process the template and commit to your new repo)
|
||||||
|
3. Read the file [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||||
|
4. Then clone your new project and happy coding!
|
||||||
|
|
||||||
|
> **NOTE**: **WAIT** until first CI run on gitea actions before cloning your new project.
|
||||||
|
|
||||||
|
### What is included on this template?
|
||||||
|
|
||||||
|
- 🖼️ Templates for starting multiple application types:
|
||||||
|
**Run `make init` after cloning to generate a new project based on a template.**
|
||||||
|
- 🤖 A [Makefile](Makefile) with the most useful commands to install, test, lint, format and release your project.
|
||||||
|
- 📃 Documentation structure using [mkdocs](http://www.mkdocs.org)
|
||||||
|
- 💬 Auto generation of change log using **gitchangelog** to keep a HISTORY.md file automatically based on your commit history on every release.
|
||||||
|
- 🐋 A simple [Containerfile](Containerfile) to build a container image for your project.
|
||||||
|
`Containerfile` is a more open standard for building container images than Dockerfile, you can use buildah or docker with this file.
|
||||||
|
- 🧪 Testing structure
|
||||||
|
- ✅ Code linting
|
||||||
|
- 🎯 Entry points to execute your program with basic CLI argument parsing.
|
||||||
|
- 🔄 Continuous integration using [Gitea Actions](.gitea/workflows/) with jobs to lint, test and release your project on Linux, Mac and Windows environments.
|
||||||
|
|
||||||
|
<!-- DELETE THE LINES ABOVE THIS AND WRITE YOUR PROJECT README BELOW -->
|
||||||
|
|
||||||
|
---
|
||||||
|
# project_name
|
||||||
|
|
||||||
|
project_description
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
TODO: dotnet sample code on usage
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
Read the [CONTRIBUTING.md](CONTRIBUTING.md) file.
|
17
docs/index.md
Normal file
17
docs/index.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Welcome to MkDocs
|
||||||
|
|
||||||
|
For full documentation visit [mkdocs.org](https://www.mkdocs.org).
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
* `mkdocs new [dir-name]` - Create a new project.
|
||||||
|
* `mkdocs serve` - Start the live-reloading docs server.
|
||||||
|
* `mkdocs build` - Build the documentation site.
|
||||||
|
* `mkdocs -h` - Print help message and exit.
|
||||||
|
|
||||||
|
## Project layout
|
||||||
|
|
||||||
|
mkdocs.yml # The configuration file.
|
||||||
|
docs/
|
||||||
|
index.md # The documentation homepage.
|
||||||
|
... # Other markdown pages, images and other files.
|
2
mkdocs.yml
Normal file
2
mkdocs.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
site_name: project_name
|
||||||
|
theme: readthedocs
|
35
project_name/Program.cs
Normal file
35
project_name/Program.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using CommandLine;
|
||||||
|
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
public class Options
|
||||||
|
{
|
||||||
|
[Option('v', "verbose", Required = false, HelpText = "Set output to verbose messages.")]
|
||||||
|
public bool Verbose { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Parser.Default.ParseArguments<Options>(args)
|
||||||
|
.WithParsed<Options>(o =>
|
||||||
|
{
|
||||||
|
if (o.Verbose)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Verbose output enabled. Current Arguments: -v {o.Verbose}");
|
||||||
|
Console.WriteLine("Quick Start Example! App is in Verbose mode!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Current Arguments: -v {o.Verbose}");
|
||||||
|
Console.WriteLine("Quick Start Example!");
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryPoint(o);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EntryPoint(Options o)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello world!");
|
||||||
|
}
|
||||||
|
}
|
1
project_name/VERSION
Normal file
1
project_name/VERSION
Normal file
@ -0,0 +1 @@
|
|||||||
|
0.1.0
|
14
project_name/project_name.csproj
Normal file
14
project_name/project_name.csproj
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="CommandLineParser" Version="2.9.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user