Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions data/templates/appveyor.yml/artifacts

This file was deleted.

4 changes: 0 additions & 4 deletions data/templates/appveyor.yml/build

This file was deleted.

4 changes: 0 additions & 4 deletions data/templates/appveyor.yml/deploy_script

This file was deleted.

1 change: 0 additions & 1 deletion data/templates/appveyor.yml/install
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@

install:
- cmd: "%PYTHON%\\python.exe -m pip install -U build pip setuptools twine wheel"
14 changes: 0 additions & 14 deletions data/templates/appveyor.yml/matrix
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,3 @@
PYTHON_VERSION: "3.14"
L2TBINARIES_TRACK: "dev"
TARGET: tests
- DESCRIPTION: "Build wheel on Windows with 32-bit Python 3.14"
MACHINE_TYPE: "amd64"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
PYTHON: "C:\\Python314-x64"
PYTHON_VERSION: "3.14"
L2TBINARIES_TRACK: "dev"
TARGET: wheel
- DESCRIPTION: "Build wheel on Windows with 64-bit Python 3.14"
MACHINE_TYPE: "amd64"
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
PYTHON: "C:\\Python314-x64"
PYTHON_VERSION: "3.14"
L2TBINARIES_TRACK: "dev"
TARGET: wheel
2 changes: 0 additions & 2 deletions data/templates/appveyor.yml/pypi_token

This file was deleted.

73 changes: 73 additions & 0 deletions data/templates/github_actions/build_wheel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Build Python sdist and wheel.
name: build_wheels
on:
pull_request:
push:
release:
types: [published]
# Allow trigger via API
workflow_dispatch:
permissions: read-all
jobs:
build_sdist:
name: Build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install build dependencies
run: |
sudo apt update
sudo apt -y install python3-build
- name: Build sdist
run: |
python -m build --sdist
- uses: actions/upload-artifact@v7
with:
name: cibw-sdist
path: dist/*.tar.gz
build_wheel:
name: Build wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install build dependencies
run: |
sudo apt update
sudo apt -y install python3-build python3-wheel
- name: Build wheel
run: |
python -m build --wheel
- uses: actions/upload-artifact@v7
with:
name: cibw-wheels
path: dist/*.whl
upload_test_pypi:
needs: [build_sdist, build_wheel]
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v8
with:
pattern: cibw-*
path: dist
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
upload_pypi:
needs: [upload_test_pypi]
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v8
with:
pattern: cibw-*
path: dist
merge-multiple: true
- uses: pypa/gh-action-pypi-publish@release/v1
2 changes: 1 addition & 1 deletion data/templates/pyproject.toml/black.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

[tool.black]
line-length = 88
target-version = ["py310"]
target-version = ["${black_target_version}"]
include = "\\.pyi?$$"
7 changes: 7 additions & 0 deletions data/templates/pyproject.toml/l2tdevtools.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

[tool.l2tdevtools]
name = "${name_description}"
status = "${status}"
description = """
${description_long}
"""
2 changes: 1 addition & 1 deletion data/templates/pyproject.toml/project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ classifiers = [
"${development_status}",
"Programming Language :: Python",
]
requires-python = ">=3.10"
requires-python = ">=${minimum_python_version}"
28 changes: 1 addition & 27 deletions l2tdevtools/dependency_writers/appveyor_yml.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ class AppveyorYmlWriter(interface.DependencyFileWriter):

PATH = os.path.join("appveyor.yml")

_PROJECTS_WITHOUT_BUILD = frozenset(
["dtformats", "esedbrc", "olecfrc", "vstools", "winevtrc", "winregrc"]
)

def _GenerateFromTemplate(self, template_filename, template_mappings):
"""Generates file context based on a template file.

Expand Down Expand Up @@ -44,13 +40,6 @@ def Write(self):
template_data = self._GenerateFromTemplate("environment", template_mappings)
file_content.append(template_data)

if self._project_definition.name not in self._PROJECTS_WITHOUT_BUILD:
if self._project_definition.pypi_token:
template_data = self._GenerateFromTemplate(
"pypi_token", template_mappings
)
file_content.append(template_data)

template_data = self._GenerateFromTemplate("matrix", template_mappings)
file_content.append(template_data)

Expand All @@ -63,27 +52,12 @@ def Write(self):
)
file_content.append(template_data)

if self._project_definition.name in self._PROJECTS_WITHOUT_BUILD:
template_filename = "build_off"
else:
template_filename = "build"

template_data = self._GenerateFromTemplate(template_filename, template_mappings)
template_data = self._GenerateFromTemplate("build_off", template_mappings)
file_content.append(template_data)

template_data = self._GenerateFromTemplate("test_script", template_mappings)
file_content.append(template_data)

if self._project_definition.name not in self._PROJECTS_WITHOUT_BUILD:
template_data = self._GenerateFromTemplate("artifacts", template_mappings)
file_content.append(template_data)

if self._project_definition.pypi_token:
template_data = self._GenerateFromTemplate(
"deploy_script", template_mappings
)
file_content.append(template_data)

file_content = "".join(file_content)

with open(self.PATH, "w", encoding="utf-8") as file_object:
Expand Down
16 changes: 7 additions & 9 deletions l2tdevtools/dependency_writers/dpkg.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Writer for Debian packaging (dpkg) files."""

import os
import textwrap

from l2tdevtools.dependency_writers import interface

Expand Down Expand Up @@ -81,11 +82,9 @@ def Write(self):
python_module_description = "".join(
[python_module_description, f" resources ({python_module_name:s})"]
)

tools_description = (
f"Tools for {self._project_definition.name_description:s}"
)

tool_description_long, _, _ = (
self._project_definition.name_description.rpartition(" (")
)
Expand All @@ -98,7 +97,6 @@ def Write(self):
tool_description_long = "\n".join(
[f" {line:s}" for line in tool_description_long.split("\n")]
)

file_content = []
file_content.extend(self._PYTHON3_FILE_HEADER)

Expand All @@ -107,7 +105,6 @@ def Write(self):
data_dependency = (
f"{self._project_definition.name:s}-data (>= ${{binary:Version}})"
)

file_content.extend(self._DATA_PACKAGE)

file_content.extend(self._PYTHON3_PACKAGE)
Expand All @@ -119,11 +116,14 @@ def Write(self):
):
file_content.extend(self._TOOLS_PACKAGE)

description_long = self._project_definition.description_long
description_long = "\n".join(
[f" {line:s}" for line in description_long.split("\n")]
[
f" {line:s}"
for line in textwrap.wrap(
self._project_definition.description_long, width=79
)
]
)

python3_dependencies = self._dependency_helper.GetDPKGDepends()

if data_dependency:
Expand All @@ -138,7 +138,6 @@ def Write(self):
"python3-setuptools",
"pybuild-plugin-pyproject",
]

build_dependencies = ", ".join(build_dependencies)

template_mappings = {
Expand All @@ -155,7 +154,6 @@ def Write(self):
"tools_description": tools_description,
"tool_description_long": tool_description_long,
}

file_content = "\n".join(file_content)
file_content = file_content.format(**template_mappings)

Expand Down
20 changes: 20 additions & 0 deletions l2tdevtools/dependency_writers/github_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@
from l2tdevtools.dependency_writers import interface


class GitHubActionsBuildWheelYmlWriter(interface.DependencyFileWriter):
"""build_wheel.yml GitHub actions workflow file writer."""

_TEMPLATE_FILE = os.path.join(
"data", "templates", "github_actions", "build_wheel.yml"
)

PATH = os.path.join(".github", "workflows", "build_wheel.yml")

def Write(self):
"""Writes a build_wheel.yml GitHub actions workflow file ."""
template_mappings = {}

template_file = os.path.join(self._l2tdevtools_path, self._TEMPLATE_FILE)
file_content = self._GenerateFromTemplate(template_file, template_mappings)

with open(self.PATH, "w", encoding="utf-8") as file_object:
file_object.write(file_content)


class GitHubActionsLintYmlWriter(interface.DependencyFileWriter):
"""lint.yml GitHub actions workflow file writer."""

Expand Down
50 changes: 36 additions & 14 deletions l2tdevtools/dependency_writers/pyproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import glob
import logging
import os
import textwrap
import tomllib

from l2tdevtools.dependency_writers import interface

Expand Down Expand Up @@ -49,16 +51,24 @@ def _GenerateFromTemplate(self, template_filename, template_mappings):

def Write(self):
"""Writes a pyproject.toml file."""
if self._project_definition.status == "experimental":
development_status = "Development Status :: 2 - Pre-Alpha"
elif self._project_definition.status == "alpha":
development_status = "Development Status :: 3 - Alpha"
elif self._project_definition.status == "beta":
development_status = "Development Status :: 4 - Beta"
elif self._project_definition.status == "stable":
development_status = "Development Status :: 5 - Production/Stable"
else:
development_status = ""
with open(self.PATH, "rb") as file_object:
pyproject_toml = tomllib.load(file_object)

project = pyproject_toml.get("project", {})

minimum_python_version = "3.10"
requires_python = project.get("requires-python")
if requires_python and requires_python.startswith(">="):
minimum_python_version = requires_python[2:]

tool = pyproject_toml.get("tool", {})
tool_docformatter = tool.get("docformatter", {})

docformatter_non_cap = tool_docformatter.get("non-cap", [])
docformatter_non_cap = ", ".join(
[f'"{value:s}"' for value in docformatter_non_cap]
)
docformatter_non_cap = f"[{docformatter_non_cap:s}]"

# TODO: handle license-files

Expand Down Expand Up @@ -115,19 +125,26 @@ def Write(self):
date_time = datetime.datetime.now()
version = date_time.strftime("%Y%m%d")

# TODO: configure in project.ini file
docformatter_non_cap = "[]"

description_long = " \\\n".join(
textwrap.wrap(self._project_definition.description_long, width=78)
)
template_mappings = {
"black_target_version": f"py{minimum_python_version:s}".replace(".", ""),
"description_short": (
self._project_definition.description_short.rstrip(".")
),
"development_status": development_status,
"development_status": (
self._project_definition.GetPythonTroveDevelopmentStatus()
),
"description_long": f"{description_long:s} \\",
"docformatter_non_cap": docformatter_non_cap,
"maintainer_email": maintainer_email,
"maintainer_name": maintainer_name,
"name_description": self._project_definition.name_description,
"status": self._project_definition.status,
"python_module_name": python_module_name,
"readme_file": readme_file,
"minimum_python_version": minimum_python_version,
"version": version,
}
file_content = []
Expand Down Expand Up @@ -177,6 +194,11 @@ def Write(self):
)
file_content.append(template_data)

template_data = self._GenerateFromTemplate(
"l2tdevtools.toml", template_mappings
)
file_content.append(template_data)

template_data = self._GenerateFromTemplate("setuptools.toml", template_mappings)
file_content.append(template_data)

Expand Down
Loading
Loading