Skip to content

Commit cf37bfc

Browse files
authored
Merge branch 'main' into fix-gulp-issue
2 parents 3f71758 + dcde5b4 commit cf37bfc

File tree

10 files changed

+181
-229
lines changed

10 files changed

+181
-229
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ jobs:
4949
steps:
5050
- uses: actions/checkout@v5
5151
- name: Set up Python ${{ matrix.python-version }}
52-
uses: actions/setup-python@v5
52+
uses: actions/setup-python@v6
5353
with:
5454
python-version: ${{ matrix.python-version }}
5555
cache: 'pip'
5656
- name: Set up Node.js 16
57-
uses: actions/setup-node@v4
57+
uses: actions/setup-node@v5
5858
with:
5959
node-version: 16
6060
- name: Install dependencies

.github/workflows/lemur-publish-release-pypi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
steps:
1515
- uses: actions/checkout@v5
1616
- name: Set up Python
17-
uses: actions/setup-python@v5
17+
uses: actions/setup-python@v6
1818
with:
1919
python-version: '3.x'
2020
- name: Autobump version

.readthedocs.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ build:
2020
python: "3.11"
2121
jobs:
2222
pre_install:
23+
- grep -v "python-ldap" requirements.txt > tempreqs && mv tempreqs requirements.txt
2324
- grep -v "python-ldap" requirements-docs.txt > tempreqs && mv tempreqs requirements-docs.txt
2425

2526

2627
python:
2728
install:
28-
- requirements: requirements-docs.txt
29-
- method: setuptools
29+
- method: pip
3030
path: .
31+
extra_requirements:
32+
- docs

MANIFEST.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
include setup.py version.py package.json bower.json gulpfile.js README.rst MANIFEST.in LICENSE AUTHORS requirements*.txt
1+
include pyproject.toml package.json bower.json gulpfile.js README.rst MANIFEST.in LICENSE AUTHORS requirements*.txt
22
recursive-include lemur/plugins/lemur_email/templates *
33
recursive-include lemur/static *
44
global-exclude *~

build_backend.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
Custom build backend for Lemur that handles static asset building.
3+
This replaces the custom commands from the old setup.py.
4+
"""
5+
import os
6+
import subprocess
7+
import logging
8+
from setuptools import build_meta as _orig
9+
from setuptools.build_meta import *
10+
11+
12+
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
13+
"""Build wheel with static assets."""
14+
_build_static()
15+
return _orig.build_wheel(wheel_directory, config_settings, metadata_directory)
16+
17+
18+
def build_sdist(sdist_directory, config_settings=None):
19+
"""Build source distribution with static assets."""
20+
_build_static()
21+
return _orig.build_sdist(sdist_directory, config_settings)
22+
23+
24+
def _build_static():
25+
"""Build static assets using npm and gulp."""
26+
root = os.path.dirname(os.path.abspath(__file__))
27+
28+
# Check if static assets already exist
29+
if os.path.exists(os.path.join(root, 'lemur/static/dist')):
30+
logging.info("Static assets already exist, skipping build")
31+
return
32+
33+
logging.info(f"Building static assets in {root}")
34+
35+
try:
36+
# Run npm install
37+
logging.info("Running npm install --quiet")
38+
subprocess.check_call(['npm', 'install', '--quiet'], cwd=root)
39+
40+
# Run gulp build
41+
logging.info("Running gulp build")
42+
subprocess.check_call([
43+
os.path.join(root, 'node_modules', '.bin', 'gulp'), 'build'
44+
], cwd=root)
45+
46+
# Run gulp package
47+
logging.info("Running gulp package")
48+
subprocess.check_call([
49+
os.path.join(root, 'node_modules', '.bin', 'gulp'), 'package'
50+
], cwd=root)
51+
52+
except subprocess.CalledProcessError as e:
53+
logging.warning(f"Unable to build static content: {e}")
54+
except Exception as e:
55+
logging.warning(f"Unexpected error building static content: {e}")

pyproject.toml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
[build-system]
2+
requires = ["setuptools>=64", "wheel"]
3+
build-backend = "setuptools.build_meta"
4+
5+
[project]
6+
name = "lemur"
7+
dynamic = ["version", "readme", "dependencies", "optional-dependencies"]
8+
description = "Certificate management and orchestration service"
9+
authors = [
10+
{name = "The Lemur developers", email = "[email protected]"}
11+
]
12+
license = {text = "Apache License, Version 2.0"}
13+
classifiers = [
14+
"Framework :: Flask",
15+
"Intended Audience :: Developers",
16+
"Intended Audience :: System Administrators",
17+
"Operating System :: OS Independent",
18+
"Topic :: Software Development",
19+
"Programming Language :: Python :: 3.10",
20+
"Programming Language :: Python :: 3.11",
21+
"Programming Language :: Python :: 3.12",
22+
"Programming Language :: Python :: 3.13",
23+
"Natural Language :: English",
24+
"License :: OSI Approved :: Apache Software License"
25+
]
26+
requires-python = ">=3.10"
27+
28+
29+
[project.urls]
30+
homepage = "https://github.com/Netflix/lemur"
31+
repository = "https://github.com/Netflix/lemur"
32+
33+
[project.scripts]
34+
lemur = "lemur.manage:main"
35+
36+
[project.entry-points."lemur.plugins"]
37+
verisign_issuer = "lemur.plugins.lemur_verisign.plugin:VerisignIssuerPlugin"
38+
acme_issuer = "lemur.plugins.lemur_acme.plugin:ACMEIssuerPlugin"
39+
acme_http_issuer = "lemur.plugins.lemur_acme.plugin:ACMEHttpIssuerPlugin"
40+
aws_destination = "lemur.plugins.lemur_aws.plugin:AWSDestinationPlugin"
41+
aws_acm_destination = "lemur.plugins.lemur_aws.plugin:ACMDestinationPlugin"
42+
aws_source = "lemur.plugins.lemur_aws.plugin:AWSSourcePlugin"
43+
aws_acm_source = "lemur.plugins.lemur_aws.plugin:AWSACMSourcePlugin"
44+
aws_s3 = "lemur.plugins.lemur_aws.plugin:S3DestinationPlugin"
45+
aws_sns = "lemur.plugins.lemur_aws.plugin:SNSNotificationPlugin"
46+
email_notification = "lemur.plugins.lemur_email.plugin:EmailNotificationPlugin"
47+
slack_notification = "lemur.plugins.lemur_slack.plugin:SlackNotificationPlugin"
48+
java_truststore_export = "lemur.plugins.lemur_jks.plugin:JavaTruststoreExportPlugin"
49+
java_keystore_export = "lemur.plugins.lemur_jks.plugin:JavaKeystoreExportPlugin"
50+
openssl_export = "lemur.plugins.lemur_openssl.plugin:OpenSSLExportPlugin"
51+
atlas_metric = "lemur.plugins.lemur_atlas.plugin:AtlasMetricPlugin"
52+
atlas_metric_redis = "lemur.plugins.lemur_atlas_redis.plugin:AtlasMetricRedisPlugin"
53+
kubernetes_destination = "lemur.plugins.lemur_kubernetes.plugin:KubernetesDestinationPlugin"
54+
cryptography_issuer = "lemur.plugins.lemur_cryptography.plugin:CryptographyIssuerPlugin"
55+
cfssl_issuer = "lemur.plugins.lemur_cfssl.plugin:CfsslIssuerPlugin"
56+
digicert_issuer = "lemur.plugins.lemur_digicert.plugin:DigiCertIssuerPlugin"
57+
digicert_source = "lemur.plugins.lemur_digicert.plugin:DigiCertSourcePlugin"
58+
digicert_cis_issuer = "lemur.plugins.lemur_digicert.plugin:DigiCertCISIssuerPlugin"
59+
digicert_cis_source = "lemur.plugins.lemur_digicert.plugin:DigiCertCISSourcePlugin"
60+
csr_export = "lemur.plugins.lemur_csr.plugin:CSRExportPlugin"
61+
sftp_destination = "lemur.plugins.lemur_sftp.plugin:SFTPDestinationPlugin"
62+
vault_source = "lemur.plugins.lemur_vault_dest.plugin:VaultSourcePlugin"
63+
vault_desination = "lemur.plugins.lemur_vault_dest.plugin:VaultDestinationPlugin"
64+
adcs_issuer = "lemur.plugins.lemur_adcs.plugin:ADCSIssuerPlugin"
65+
adcs_source = "lemur.plugins.lemur_adcs.plugin:ADCSSourcePlugin"
66+
entrust_issuer = "lemur.plugins.lemur_entrust.plugin:EntrustIssuerPlugin"
67+
entrust_source = "lemur.plugins.lemur_entrust.plugin:EntrustSourcePlugin"
68+
azure_destination = "lemur.plugins.lemur_azure_dest.plugin:AzureDestinationPlugin"
69+
google_ca_issuer = "lemur.plugins.lemur_google_ca.plugin:GoogleCaIssuerPlugin"
70+
71+
[tool.setuptools]
72+
include-package-data = true
73+
zip-safe = false
74+
75+
[tool.setuptools.packages.find]
76+
where = ["."]
77+
include = ["lemur*"]
78+
79+
[tool.setuptools.dynamic]
80+
version = {attr = "lemur.__about__.__version__"}
81+
readme = {file = "README.rst"}
82+
dependencies = {file = ["requirements.txt"]}
83+
optional-dependencies.tests = {file = ["requirements-tests.txt"]}
84+
optional-dependencies.docs = {file = ["requirements-docs.txt"]}
85+
optional-dependencies.dev = {file = ["requirements-dev.txt"]}
86+
87+
[tool.pytest]
88+
python_files = "test*.py"
89+
addopts = "--tb=native -p no:doctest"
90+
norecursedirs = "bin dist docs htmlcov script hooks node_modules .* {args}"
91+
92+
[tool.flake8]
93+
ignore = ["F999", "E501", "E128", "E124", "E402", "W503", "E731", "F841", "F405"]
94+
max-line-length = 100
95+
exclude = [".tox", ".git", "*/migrations/*", "lemur/static/*", "docs/*"]
96+
97+
[tool.wheel]
98+
universal = true

requirements-dev.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Run `make up-reqs` to update pinned dependencies in requirement text files
22

33
flake8
4+
Flake8-pyproject
45
pre-commit
56
invoke
67
twine

requirements-dev.txt

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# This file is autogenerated by pip-compile with Python 3.9
2+
# This file is autogenerated by pip-compile with Python 3.10
33
# by the following command:
44
#
55
# pip-compile --no-emit-index-url --output-file=requirements-dev.txt requirements-dev.in
@@ -50,7 +50,7 @@ aws-xray-sdk==2.13.0
5050
# via
5151
# -r requirements-tests.txt
5252
# moto
53-
backports-tarfile==1.0.0
53+
backports-tarfile==1.2.0
5454
# via jaraco-context
5555
bandit==1.8.6
5656
# via -r requirements-tests.txt
@@ -158,7 +158,6 @@ cryptography==45.0.6
158158
# pyspnego
159159
# python-jose
160160
# requests-ntlm
161-
# secretstorage
162161
# sshpubkeys
163162
# types-paramiko
164163
# types-pyopenssl
@@ -167,7 +166,7 @@ deprecated==1.2.14
167166
# via
168167
# -r requirements-tests.txt
169168
# limits
170-
distlib==0.3.8
169+
distlib==0.4.0
171170
# via virtualenv
172171
distro==1.9.0
173172
# via
@@ -183,7 +182,7 @@ docker==7.0.0
183182
# via
184183
# -r requirements-tests.txt
185184
# moto
186-
docutils==0.21.2
185+
docutils==0.22
187186
# via readme-renderer
188187
dyn==1.8.6
189188
# via -r requirements-tests.txt
@@ -205,9 +204,13 @@ faker==37.6.0
205204
# factory-boy
206205
fakeredis==2.31.0
207206
# via -r requirements-tests.txt
208-
filelock==3.13.3
207+
filelock==3.19.1
209208
# via virtualenv
210209
flake8==7.1.2
210+
# via
211+
# -r requirements-dev.in
212+
# flake8-pyproject
213+
flake8-pyproject==1.2.3
211214
# via -r requirements-dev.in
212215
flask==2.3.3
213216
# via
@@ -287,7 +290,7 @@ hvac==2.3.0
287290
# via -r requirements-tests.txt
288291
id==1.5.0
289292
# via twine
290-
identify==2.5.35
293+
identify==2.6.14
291294
# via pre-commit
292295
idna==3.7
293296
# via
@@ -296,10 +299,7 @@ idna==3.7
296299
importlib-metadata==7.1.0
297300
# via
298301
# -r requirements-tests.txt
299-
# certbot
300-
# flask
301302
# keyring
302-
# twine
303303
importlib-resources==6.4.0
304304
# via
305305
# -r requirements-tests.txt
@@ -321,18 +321,14 @@ itsdangerous==2.2.0
321321
# flask
322322
jaraco-classes==3.4.0
323323
# via keyring
324-
jaraco-context==5.3.0
324+
jaraco-context==6.0.1
325325
# via keyring
326-
jaraco-functools==4.0.0
326+
jaraco-functools==4.3.0
327327
# via keyring
328328
javaobj-py3==0.4.4
329329
# via
330330
# -r requirements-tests.txt
331331
# pyjks
332-
jeepney==0.8.0
333-
# via
334-
# keyring
335-
# secretstorage
336332
jinja2==3.1.3
337333
# via
338334
# -r requirements-tests.txt
@@ -392,7 +388,7 @@ junit-xml==1.9
392388
# via
393389
# -r requirements-tests.txt
394390
# cfn-lint
395-
keyring==25.1.0
391+
keyring==25.6.0
396392
# via twine
397393
kombu==5.3.6
398394
# via
@@ -434,7 +430,7 @@ mdurl==0.1.2
434430
# via
435431
# -r requirements-tests.txt
436432
# markdown-it-py
437-
more-itertools==10.2.0
433+
more-itertools==10.8.0
438434
# via
439435
# jaraco-classes
440436
# jaraco-functools
@@ -461,7 +457,7 @@ networkx==3.2.1
461457
# via
462458
# -r requirements-tests.txt
463459
# cfn-lint
464-
nh3==0.2.17
460+
nh3==0.3.0
465461
# via readme-renderer
466462
nodeenv==1.9.1
467463
# via
@@ -662,7 +658,7 @@ pyyaml==6.0.2
662658
# moto
663659
# pre-commit
664660
# responses
665-
readme-renderer==43.0
661+
readme-renderer==44.0
666662
# via twine
667663
redis==5.3.1
668664
# via
@@ -740,8 +736,6 @@ sarif-om==1.0.4
740736
# via
741737
# -r requirements-tests.txt
742738
# cfn-lint
743-
secretstorage==3.3.3
744-
# via keyring
745739
sentry-sdk==2.35.1
746740
# via -r requirements-tests.txt
747741
six==1.17.0
@@ -783,9 +777,10 @@ tomli==2.0.1
783777
# via
784778
# -r requirements-tests.txt
785779
# black
780+
# flake8-pyproject
786781
# mypy
787782
# pytest
788-
twine==6.1.0
783+
twine==6.2.0
789784
# via -r requirements-dev.in
790785
twofish==0.3.0
791786
# via
@@ -837,13 +832,11 @@ typing-extensions==4.11.0
837832
# black
838833
# fakeredis
839834
# flask-limiter
840-
# kombu
841835
# limits
842836
# mypy
843837
# pydantic
844838
# pydantic-core
845839
# pyopenssl
846-
# python-json-logger
847840
tzdata==2024.1
848841
# via
849842
# -r requirements-tests.txt
@@ -866,7 +859,7 @@ vine==5.1.0
866859
# amqp
867860
# celery
868861
# kombu
869-
virtualenv==20.26.6
862+
virtualenv==20.33.1
870863
# via pre-commit
871864
wcwidth==0.2.13
872865
# via
@@ -892,7 +885,6 @@ zipp==3.19.1
892885
# via
893886
# -r requirements-tests.txt
894887
# importlib-metadata
895-
# importlib-resources
896888

897889
# The following packages are considered to be unsafe in a requirements file:
898890
# setuptools

0 commit comments

Comments
 (0)