From df40d633b8e3e1f7865dd151bcba5a64ce95fcfc Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:02:39 +0400 Subject: [PATCH 01/15] ci(template-workflow): :wrench: add pre-commit hooks into the template --- .pre-commit-config.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .pre-commit-config.yml diff --git a/.pre-commit-config.yml b/.pre-commit-config.yml new file mode 100644 index 0000000..ac002f1 --- /dev/null +++ b/.pre-commit-config.yml @@ -0,0 +1,14 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace +- repo: local + hooks: + - id: generate_changelog + name: generate_changelog + entry: git-changelog -Tbio CHANGELOG.md -c angular + language: system + types: [python] From 38e26ec0de9952b87edbc2482215a64a9d1fe0c3 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:10:45 +0400 Subject: [PATCH 02/15] fix(template-workflow): :fire: remove hooks --- .pre-commit-config.yaml | 7 +++++++ .pre-commit-config.yml | 14 -------------- 2 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 .pre-commit-config.yaml delete mode 100644 .pre-commit-config.yml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..859ac3d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,7 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace diff --git a/.pre-commit-config.yml b/.pre-commit-config.yml deleted file mode 100644 index ac002f1..0000000 --- a/.pre-commit-config.yml +++ /dev/null @@ -1,14 +0,0 @@ -repos: -- repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.3.0 - hooks: - - id: check-yaml - - id: end-of-file-fixer - - id: trailing-whitespace -- repo: local - hooks: - - id: generate_changelog - name: generate_changelog - entry: git-changelog -Tbio CHANGELOG.md -c angular - language: system - types: [python] From 4421cf99c86461042dbb3f969ac36c944035395d Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:17:37 +0400 Subject: [PATCH 03/15] feat(project-automation): :sparkles: add changelog generation add changelog generation as a nox job --- project/noxfile.py.jinja | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/project/noxfile.py.jinja b/project/noxfile.py.jinja index a71392e..e7d7cc2 100644 --- a/project/noxfile.py.jinja +++ b/project/noxfile.py.jinja @@ -71,3 +71,13 @@ def check_safety(session: Session) -> None: "pdm", "export", "-f", "requirements", "-o", requirements.name, "--without-hashes", external=True ) session.run("safety", "check", f"--file={requirements.name}", "--full-report") + + +@nox.session +def generate_changelog(session: Session) -> None: + """Generate changelog from the commits. It should be reviewed and cleaned up by a human. + + Args: + session (Session): nox session object + """ + session.run("git-changelog", "-Tbio", "CHANGELOG.md", "-c", "angular") From 60fba44645df60ad973b960df7e25dc3fd00d5aa Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:34:05 +0400 Subject: [PATCH 04/15] feat(project-dev): :technologist: add dev containers settings --- copier.yml | 7 ++++++- project/.devcontainer/Dockerfile.dev.jinja | 12 ++++++++++++ project/.devcontainer/devcontainer.json | 22 ++++++++++++++++++++++ project/.devcontainer/docker-compose.yml | 12 ++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 project/.devcontainer/Dockerfile.dev.jinja create mode 100644 project/.devcontainer/devcontainer.json create mode 100644 project/.devcontainer/docker-compose.yml diff --git a/copier.yml b/copier.yml index e1e8440..0c2c5bc 100644 --- a/copier.yml +++ b/copier.yml @@ -120,4 +120,9 @@ python_package_import_name: python_package_command_line_name: type: str help: Your CLI name if any (for use in the shell) - default: "{{ project_name | slugify }}" \ No newline at end of file + default: "{{ project_name | slugify }}" + +docker-base-image: + type: str + help: Base image for the dev container. Edit Dockerfile.dev if your image is not ubuntu-based or have no python installed. + default: "{{ python:3.11 }}" diff --git a/project/.devcontainer/Dockerfile.dev.jinja b/project/.devcontainer/Dockerfile.dev.jinja new file mode 100644 index 0000000..4736617 --- /dev/null +++ b/project/.devcontainer/Dockerfile.dev.jinja @@ -0,0 +1,12 @@ +ARG BASE_IMAGE={{ docker-base-image }} +FROM ${BASE_IMAGE} +RUN apt-get update \ + && apt-get install build-essential git gcc -y \ + && apt-get clean + +RUN pip install -U pip setuptools wheel +RUN pip install pdm + +RUN mkdir /data + +CMD "" diff --git a/project/.devcontainer/devcontainer.json b/project/.devcontainer/devcontainer.json new file mode 100644 index 0000000..31af931 --- /dev/null +++ b/project/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile +{ + "name": "Development docker containers", +"dockerComposeFile": "docker-compose.yml", + "service": "app", +"workspaceFolder": "/app", +"shutdownAction": "stopCompose", + "overrideCommand": true, + "customizations": { + "vscode": { + "extensions": [ + "vivaxy.vscode-conventional-commits", + "DavidAnson.vscode-markdownlint", + "ionutvmi.path-autocomplete", + "ms-python.vscode-pylance", + "ms-python.python", + "ms-python.black-formatter" + ] + } + } +} diff --git a/project/.devcontainer/docker-compose.yml b/project/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..6570774 --- /dev/null +++ b/project/.devcontainer/docker-compose.yml @@ -0,0 +1,12 @@ +version: "3.8" + +services: + app: + build: + context: .. + dockerfile: .devcontainer/Dockerfile.dev + env_file: + - .env + command: "/bin/sh -c \"while sleep 1000; do :; done\"" + volumes: + - "../:/app" From bba387521d9ab4bc985226b36a9a63e9e54b2dd1 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:54:57 +0400 Subject: [PATCH 05/15] fix(template-dev): :ambulance: fix docker image variable name --- copier.yml | 2 +- project/.devcontainer/Dockerfile.dev.jinja | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/copier.yml b/copier.yml index 0c2c5bc..4824638 100644 --- a/copier.yml +++ b/copier.yml @@ -122,7 +122,7 @@ python_package_command_line_name: help: Your CLI name if any (for use in the shell) default: "{{ project_name | slugify }}" -docker-base-image: +docker_base_image: type: str help: Base image for the dev container. Edit Dockerfile.dev if your image is not ubuntu-based or have no python installed. default: "{{ python:3.11 }}" diff --git a/project/.devcontainer/Dockerfile.dev.jinja b/project/.devcontainer/Dockerfile.dev.jinja index 4736617..582539e 100644 --- a/project/.devcontainer/Dockerfile.dev.jinja +++ b/project/.devcontainer/Dockerfile.dev.jinja @@ -1,4 +1,4 @@ -ARG BASE_IMAGE={{ docker-base-image }} +ARG BASE_IMAGE={{ docker_base_image }} FROM ${BASE_IMAGE} RUN apt-get update \ && apt-get install build-essential git gcc -y \ From fe6ebf89effd130c0e95dc7c37cbbdb21bb6dd8d Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 18:55:57 +0400 Subject: [PATCH 06/15] fix(template-dev): --- copier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copier.yml b/copier.yml index 4824638..fee488b 100644 --- a/copier.yml +++ b/copier.yml @@ -125,4 +125,4 @@ python_package_command_line_name: docker_base_image: type: str help: Base image for the dev container. Edit Dockerfile.dev if your image is not ubuntu-based or have no python installed. - default: "{{ python:3.11 }}" + default: "python:3.11" From 1c6df7d32afc314f787842bd447e2d73efd1ab2e Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:04:04 +0400 Subject: [PATCH 07/15] fix(template-dev): :bug: fix .env in compose file --- project/.devcontainer/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/project/.devcontainer/docker-compose.yml b/project/.devcontainer/docker-compose.yml index 6570774..3b16206 100644 --- a/project/.devcontainer/docker-compose.yml +++ b/project/.devcontainer/docker-compose.yml @@ -5,8 +5,6 @@ services: build: context: .. dockerfile: .devcontainer/Dockerfile.dev - env_file: - - .env command: "/bin/sh -c \"while sleep 1000; do :; done\"" volumes: - "../:/app" From 9d660b12b6ad0dfe0e56e0969a391df23b885309 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:20:37 +0400 Subject: [PATCH 08/15] refactor(template-workflow): :art: add setup_project as a separate script --- project/setup_project.sh | 9 +++++++++ tests/setup.sh | 4 +--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 project/setup_project.sh diff --git a/project/setup_project.sh b/project/setup_project.sh new file mode 100644 index 0000000..df4dfe0 --- /dev/null +++ b/project/setup_project.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +git init . +git add -A . +git commit -m "feat: init a repo" + +pdm install diff --git a/tests/setup.sh b/tests/setup.sh index 5cb36ae..cf65b0a 100755 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -34,6 +34,4 @@ copier copy --trust --defaults -r HEAD "${template}" "${DEST}" \ -d repository_provider="github.com" pushd $DEST -git init . -git add -A . -git commit -m "feat: init a repo" \ No newline at end of file +source setup_project.sh From 5fde20a3d9927250f02740be09d1f46dbba40155 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:31:28 +0400 Subject: [PATCH 09/15] feat: :sparkles: add non-root user into dev container --- copier.yml | 5 ++++ extensions.py | 7 ++++++ project/.devcontainer/devcontainer.json | 22 ------------------ project/.devcontainer/devcontainer.json.jinja | 23 +++++++++++++++++++ 4 files changed, 35 insertions(+), 22 deletions(-) delete mode 100644 project/.devcontainer/devcontainer.json create mode 100644 project/.devcontainer/devcontainer.json.jinja diff --git a/copier.yml b/copier.yml index fee488b..10f8498 100644 --- a/copier.yml +++ b/copier.yml @@ -126,3 +126,8 @@ docker_base_image: type: str help: Base image for the dev container. Edit Dockerfile.dev if your image is not ubuntu-based or have no python installed. default: "python:3.11" + +current_username: + type: str + help: Username to use in the Dev container. + default: "{{ current_user }}" diff --git a/extensions.py b/extensions.py index 715490e..7144bfb 100644 --- a/extensions.py +++ b/extensions.py @@ -1,3 +1,4 @@ +import os import re import subprocess import unicodedata @@ -41,3 +42,9 @@ class CurrentYearExtension(Extension): def __init__(self, environment): super().__init__(environment) environment.globals["current_year"] = date.today().year + + +class CurrentUserExtension(Extension): + def __init__(self, environment): + super().__init__(environment) + environment.globals["current_user"] = os.getlogin() diff --git a/project/.devcontainer/devcontainer.json b/project/.devcontainer/devcontainer.json deleted file mode 100644 index 31af931..0000000 --- a/project/.devcontainer/devcontainer.json +++ /dev/null @@ -1,22 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile -{ - "name": "Development docker containers", -"dockerComposeFile": "docker-compose.yml", - "service": "app", -"workspaceFolder": "/app", -"shutdownAction": "stopCompose", - "overrideCommand": true, - "customizations": { - "vscode": { - "extensions": [ - "vivaxy.vscode-conventional-commits", - "DavidAnson.vscode-markdownlint", - "ionutvmi.path-autocomplete", - "ms-python.vscode-pylance", - "ms-python.python", - "ms-python.black-formatter" - ] - } - } -} diff --git a/project/.devcontainer/devcontainer.json.jinja b/project/.devcontainer/devcontainer.json.jinja new file mode 100644 index 0000000..46949ce --- /dev/null +++ b/project/.devcontainer/devcontainer.json.jinja @@ -0,0 +1,23 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile +{ + "name": "Development docker containers", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/app", + "shutdownAction": "stopCompose", + "remoteUser": "{{ current_username }}", + "overrideCommand": true, + "customizations": { + "vscode": { + "extensions": [ + "vivaxy.vscode-conventional-commits", + "DavidAnson.vscode-markdownlint", + "ionutvmi.path-autocomplete", + "ms-python.vscode-pylance", + "ms-python.python", + "ms-python.black-formatter" + ] + } + } +} From 2d2277044796b41c094d923adf77b1a76e8ef51e Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:36:21 +0400 Subject: [PATCH 10/15] fix(template-scripts): :ambulance: add extensions to copier.yml --- copier.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/copier.yml b/copier.yml index 10f8498..7054f90 100644 --- a/copier.yml +++ b/copier.yml @@ -8,6 +8,7 @@ _templates_suffix: .jinja _jinja_extensions: - copier_templates_extensions.TemplateExtensionLoader - extensions.py:CurrentYearExtension +- extensions.py:CurrentUserExtension - extensions.py:GitExtension - extensions.py:SlugifyExtension _skip_if_exists: From 99b4adc33d4d19f42cae2ac15502e3979826a40f Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:41:00 +0400 Subject: [PATCH 11/15] fix: add user into docker-compose --- .../{docker-compose.yml => docker-compose.yml.jinja} | 1 + 1 file changed, 1 insertion(+) rename project/.devcontainer/{docker-compose.yml => docker-compose.yml.jinja} (85%) diff --git a/project/.devcontainer/docker-compose.yml b/project/.devcontainer/docker-compose.yml.jinja similarity index 85% rename from project/.devcontainer/docker-compose.yml rename to project/.devcontainer/docker-compose.yml.jinja index 3b16206..dffcbe6 100644 --- a/project/.devcontainer/docker-compose.yml +++ b/project/.devcontainer/docker-compose.yml.jinja @@ -6,5 +6,6 @@ services: context: .. dockerfile: .devcontainer/Dockerfile.dev command: "/bin/sh -c \"while sleep 1000; do :; done\"" + user: "{{ current_username }}" volumes: - "../:/app" From 24784b11038c60cfd320e306cbc960a01417124c Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:44:54 +0400 Subject: [PATCH 12/15] fix(project-dev): :bug: fix user permissions --- project/.devcontainer/devcontainer.json.jinja | 1 - .../{docker-compose.yml.jinja => docker-compose.yml} | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) rename project/.devcontainer/{docker-compose.yml.jinja => docker-compose.yml} (85%) diff --git a/project/.devcontainer/devcontainer.json.jinja b/project/.devcontainer/devcontainer.json.jinja index 46949ce..d1bdc1f 100644 --- a/project/.devcontainer/devcontainer.json.jinja +++ b/project/.devcontainer/devcontainer.json.jinja @@ -6,7 +6,6 @@ "service": "app", "workspaceFolder": "/app", "shutdownAction": "stopCompose", - "remoteUser": "{{ current_username }}", "overrideCommand": true, "customizations": { "vscode": { diff --git a/project/.devcontainer/docker-compose.yml.jinja b/project/.devcontainer/docker-compose.yml similarity index 85% rename from project/.devcontainer/docker-compose.yml.jinja rename to project/.devcontainer/docker-compose.yml index dffcbe6..38bd9aa 100644 --- a/project/.devcontainer/docker-compose.yml.jinja +++ b/project/.devcontainer/docker-compose.yml @@ -6,6 +6,6 @@ services: context: .. dockerfile: .devcontainer/Dockerfile.dev command: "/bin/sh -c \"while sleep 1000; do :; done\"" - user: "{{ current_username }}" + user: "${UID}:${GID}" volumes: - "../:/app" From 7255c8bea3d51fa20305f1f3b478c7478ad84bd7 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:50:58 +0400 Subject: [PATCH 13/15] fix(template-dev): :bug: remove username questions --- copier.yml | 6 ------ extensions.py | 7 ------- 2 files changed, 13 deletions(-) diff --git a/copier.yml b/copier.yml index 7054f90..fee488b 100644 --- a/copier.yml +++ b/copier.yml @@ -8,7 +8,6 @@ _templates_suffix: .jinja _jinja_extensions: - copier_templates_extensions.TemplateExtensionLoader - extensions.py:CurrentYearExtension -- extensions.py:CurrentUserExtension - extensions.py:GitExtension - extensions.py:SlugifyExtension _skip_if_exists: @@ -127,8 +126,3 @@ docker_base_image: type: str help: Base image for the dev container. Edit Dockerfile.dev if your image is not ubuntu-based or have no python installed. default: "python:3.11" - -current_username: - type: str - help: Username to use in the Dev container. - default: "{{ current_user }}" diff --git a/extensions.py b/extensions.py index 7144bfb..715490e 100644 --- a/extensions.py +++ b/extensions.py @@ -1,4 +1,3 @@ -import os import re import subprocess import unicodedata @@ -42,9 +41,3 @@ class CurrentYearExtension(Extension): def __init__(self, environment): super().__init__(environment) environment.globals["current_year"] = date.today().year - - -class CurrentUserExtension(Extension): - def __init__(self, environment): - super().__init__(environment) - environment.globals["current_user"] = os.getlogin() From 5207afb602ffe0ff570a08ebeca681d4faef9a87 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 19:55:00 +0400 Subject: [PATCH 14/15] feat(project-dev): :rotating_light: add ruff extension --- project/.devcontainer/devcontainer.json.jinja | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project/.devcontainer/devcontainer.json.jinja b/project/.devcontainer/devcontainer.json.jinja index d1bdc1f..f868127 100644 --- a/project/.devcontainer/devcontainer.json.jinja +++ b/project/.devcontainer/devcontainer.json.jinja @@ -15,7 +15,8 @@ "ionutvmi.path-autocomplete", "ms-python.vscode-pylance", "ms-python.python", - "ms-python.black-formatter" + "ms-python.black-formatter", + "charliermarsh.ruff" ] } } From dc1a6a552d69af74896c657a338905bdd715ea90 Mon Sep 17 00:00:00 2001 From: Ilya Bushmakin Date: Sun, 20 Aug 2023 20:54:10 +0400 Subject: [PATCH 15/15] docs(template-docs): :memo: update changelog --- CHANGELOG.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f8de88..f4a7afa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,4 +5,28 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - \ No newline at end of file + +## [1.0.0](https://github.com/ilbumi/copier-python-vscode/releases/tag/1.0.0) - 2023-08-20 + +[Compare with first commit](https://github.com/ilbumi/copier-python-vscode/compare/0.1.0...1.0.0) + +### Features + +- Add pre-commit hooks +- Add VSCode Dev Containers support +- Add semi-automatic changelog generation + + +## [0.1.0](https://github.com/ilbumi/copier-python-vscode/releases/tag/0.1.0) - 2023-08-20 + +[Compare with first commit](https://github.com/ilbumi/copier-python-vscode/compare/946c697f571f5a4e7c0df91c70607b3c931e8157...0.1.0) + +### Features + +- Add PDM project config +- Add basic static code analysis (ruff, bandit, safety) +- Add basic formatting (black, ssort, isort) +- Add basic tests (pytest, coverage) +- Add basic GitHub Workflows +- Add nox as a task runner +- Add LICENSE generation