lambda-forge-cli-aws 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lambda_forge_cli_aws-1.0.0/.github/workflows/ci.yml +91 -0
- lambda_forge_cli_aws-1.0.0/.github/workflows/release.yml +139 -0
- lambda_forge_cli_aws-1.0.0/.gitignore +73 -0
- lambda_forge_cli_aws-1.0.0/.kiro/hooks/lint-on-save.kiro.hook +17 -0
- lambda_forge_cli_aws-1.0.0/.kiro/hooks/run-tests-after-task.kiro.hook +13 -0
- lambda_forge_cli_aws-1.0.0/.kiro/hooks/security-check-infra.kiro.hook +16 -0
- lambda_forge_cli_aws-1.0.0/.kiro/hooks/template-standards-check.kiro.hook +16 -0
- lambda_forge_cli_aws-1.0.0/.kiro/hooks/validate-cookiecutter-vars.kiro.hook +16 -0
- lambda_forge_cli_aws-1.0.0/.kiro/specs/00-overview.md +77 -0
- lambda_forge_cli_aws-1.0.0/.kiro/specs/01-architecture.md +354 -0
- lambda_forge_cli_aws-1.0.0/.kiro/specs/02-acceptance-criteria.md +314 -0
- lambda_forge_cli_aws-1.0.0/.kiro/specs/03-implementation-plan.md +199 -0
- lambda_forge_cli_aws-1.0.0/.kiro/steering/aws-best-practices.md +160 -0
- lambda_forge_cli_aws-1.0.0/.kiro/steering/code-standards.md +61 -0
- lambda_forge_cli_aws-1.0.0/.kiro/steering/security.md +111 -0
- lambda_forge_cli_aws-1.0.0/.kiro/steering/templates.md +133 -0
- lambda_forge_cli_aws-1.0.0/.kiro/steering/testing.md +100 -0
- lambda_forge_cli_aws-1.0.0/CHANGELOG.md +65 -0
- lambda_forge_cli_aws-1.0.0/CONTRIBUTING.md +120 -0
- lambda_forge_cli_aws-1.0.0/LICENSE +189 -0
- lambda_forge_cli_aws-1.0.0/PKG-INFO +352 -0
- lambda_forge_cli_aws-1.0.0/README.md +314 -0
- lambda_forge_cli_aws-1.0.0/VIDEO_PITCH.md +259 -0
- lambda_forge_cli_aws-1.0.0/infrastructure/.gitignore +7 -0
- lambda_forge_cli_aws-1.0.0/infrastructure/app.py +38 -0
- lambda_forge_cli_aws-1.0.0/infrastructure/cdk.json +28 -0
- lambda_forge_cli_aws-1.0.0/infrastructure/lib/lambdaforge_stack.py +309 -0
- lambda_forge_cli_aws-1.0.0/infrastructure/requirements.txt +3 -0
- lambda_forge_cli_aws-1.0.0/pyproject.toml +82 -0
- lambda_forge_cli_aws-1.0.0/scripts/release.sh +56 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/__init__.py +10 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/bedrock_client.py +109 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/cli.py +428 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/deploy.py +308 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/logs.py +185 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/renderer.py +72 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/spec_generator.py +171 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/status.py +111 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/templates.py +106 -0
- lambda_forge_cli_aws-1.0.0/src/lambdaforge/upgrade.py +231 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/cookiecutter.json +12 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/.github/workflows/dependabot.yml +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/.github/workflows/deploy.yml +90 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/.gitignore +65 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/Dockerfile +11 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/README.md +130 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/infrastructure/app.js +26 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/infrastructure/cdk.json +20 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/infrastructure/lib/stack.js +155 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/infrastructure/package.json +17 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/pyproject.toml +66 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/requirements-dev.txt +8 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/requirements.txt +3 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/src/handler.py +93 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/src/utils/logger.py +39 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/tests/conftest.py +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-api/{{cookiecutter.project_slug}}/tests/test_handler.py +68 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/cookiecutter.json +13 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/.gitignore +65 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/Dockerfile +11 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/infrastructure/app.js +25 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/infrastructure/cdk.json +3 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/infrastructure/lib/stack.js +55 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/infrastructure/package.json +17 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/pyproject.toml +56 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/requirements.txt +2 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/src/handler.py +53 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/tests/conftest.py +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-cron/{{cookiecutter.project_slug}}/tests/test_handler.py +48 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/cookiecutter.json +12 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/.gitignore +65 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/Dockerfile +11 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/infrastructure/app.js +25 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/infrastructure/cdk.json +3 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/infrastructure/lib/stack.js +79 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/infrastructure/package.json +17 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/pyproject.toml +56 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/requirements.txt +2 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/src/handler.py +64 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/tests/conftest.py +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-queue/{{cookiecutter.project_slug}}/tests/test_handler.py +60 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/cookiecutter.json +13 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/.gitignore +65 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/Dockerfile +11 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/infrastructure/app.js +25 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/infrastructure/cdk.json +3 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/infrastructure/lib/stack.js +89 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/infrastructure/package.json +17 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/pyproject.toml +56 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/requirements.txt +2 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/src/handler.py +86 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/tests/conftest.py +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-s3/{{cookiecutter.project_slug}}/tests/test_handler.py +71 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/cookiecutter.json +12 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/.gitignore +65 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/Dockerfile +11 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/infrastructure/app.js +25 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/infrastructure/cdk.json +3 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/infrastructure/lib/stack.js +81 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/infrastructure/package.json +17 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/pyproject.toml +56 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/requirements.txt +2 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/src/handler.py +69 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/tests/conftest.py +22 -0
- lambda_forge_cli_aws-1.0.0/templates/python-stream/{{cookiecutter.project_slug}}/tests/test_handler.py +64 -0
- lambda_forge_cli_aws-1.0.0/tests/__init__.py +0 -0
- lambda_forge_cli_aws-1.0.0/tests/conftest.py +29 -0
- lambda_forge_cli_aws-1.0.0/tests/test_bedrock_client.py +93 -0
- lambda_forge_cli_aws-1.0.0/tests/test_cli.py +111 -0
- lambda_forge_cli_aws-1.0.0/tests/test_deploy.py +291 -0
- lambda_forge_cli_aws-1.0.0/tests/test_logs.py +153 -0
- lambda_forge_cli_aws-1.0.0/tests/test_renderer.py +57 -0
- lambda_forge_cli_aws-1.0.0/tests/test_spec_generator.py +108 -0
- lambda_forge_cli_aws-1.0.0/tests/test_status.py +87 -0
- lambda_forge_cli_aws-1.0.0/tests/test_templates.py +52 -0
- lambda_forge_cli_aws-1.0.0/tests/test_upgrade.py +181 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
lint:
|
|
14
|
+
name: Lint & Type Check
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
cache: "pip"
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: |
|
|
26
|
+
python -m pip install --upgrade pip
|
|
27
|
+
pip install -e ".[dev]"
|
|
28
|
+
|
|
29
|
+
- name: Lint (ruff)
|
|
30
|
+
run: ruff check .
|
|
31
|
+
|
|
32
|
+
- name: Format check (ruff)
|
|
33
|
+
run: ruff format --check .
|
|
34
|
+
|
|
35
|
+
- name: Type check (mypy)
|
|
36
|
+
run: mypy src/
|
|
37
|
+
|
|
38
|
+
test:
|
|
39
|
+
name: Tests
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
strategy:
|
|
42
|
+
matrix:
|
|
43
|
+
python-version: ["3.12"]
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
|
|
47
|
+
- uses: actions/setup-python@v5
|
|
48
|
+
with:
|
|
49
|
+
python-version: ${{ matrix.python-version }}
|
|
50
|
+
cache: "pip"
|
|
51
|
+
|
|
52
|
+
- name: Install dependencies
|
|
53
|
+
run: |
|
|
54
|
+
python -m pip install --upgrade pip
|
|
55
|
+
pip install -e ".[dev]"
|
|
56
|
+
|
|
57
|
+
- name: Run tests
|
|
58
|
+
run: pytest --cov-report=xml
|
|
59
|
+
env:
|
|
60
|
+
AWS_DEFAULT_REGION: us-east-1
|
|
61
|
+
AWS_ACCESS_KEY_ID: testing
|
|
62
|
+
AWS_SECRET_ACCESS_KEY: testing
|
|
63
|
+
|
|
64
|
+
- name: Upload coverage
|
|
65
|
+
uses: codecov/codecov-action@v4
|
|
66
|
+
if: always()
|
|
67
|
+
with:
|
|
68
|
+
file: coverage.xml
|
|
69
|
+
fail_ci_if_error: false
|
|
70
|
+
|
|
71
|
+
build:
|
|
72
|
+
name: Build Package
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
needs: [lint, test]
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@v4
|
|
77
|
+
|
|
78
|
+
- uses: actions/setup-python@v5
|
|
79
|
+
with:
|
|
80
|
+
python-version: "3.12"
|
|
81
|
+
|
|
82
|
+
- name: Install build tools
|
|
83
|
+
run: pip install build
|
|
84
|
+
|
|
85
|
+
- name: Build package
|
|
86
|
+
run: python -m build
|
|
87
|
+
|
|
88
|
+
- name: Verify package
|
|
89
|
+
run: |
|
|
90
|
+
pip install dist/*.whl
|
|
91
|
+
lambdaforge version
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: Verificar Tests
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
cache: "pip"
|
|
23
|
+
|
|
24
|
+
- name: Instalar dependencias
|
|
25
|
+
run: pip install -e ".[dev]"
|
|
26
|
+
|
|
27
|
+
- name: Lint
|
|
28
|
+
run: ruff check .
|
|
29
|
+
|
|
30
|
+
- name: Tests
|
|
31
|
+
run: pytest --cov=src/lambdaforge
|
|
32
|
+
env:
|
|
33
|
+
AWS_DEFAULT_REGION: us-east-1
|
|
34
|
+
AWS_ACCESS_KEY_ID: testing
|
|
35
|
+
AWS_SECRET_ACCESS_KEY: testing
|
|
36
|
+
|
|
37
|
+
build:
|
|
38
|
+
name: Build Package
|
|
39
|
+
needs: test
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
|
|
44
|
+
- uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: "3.12"
|
|
47
|
+
|
|
48
|
+
- name: Instalar herramientas de build
|
|
49
|
+
run: pip install build
|
|
50
|
+
|
|
51
|
+
- name: Build sdist y wheel
|
|
52
|
+
run: python -m build
|
|
53
|
+
|
|
54
|
+
- name: Verificar paquete
|
|
55
|
+
run: |
|
|
56
|
+
pip install dist/*.whl
|
|
57
|
+
lambdaforge version
|
|
58
|
+
lambdaforge templates
|
|
59
|
+
|
|
60
|
+
- name: Guardar artefactos
|
|
61
|
+
uses: actions/upload-artifact@v4
|
|
62
|
+
with:
|
|
63
|
+
name: dist
|
|
64
|
+
path: dist/
|
|
65
|
+
|
|
66
|
+
publish-testpypi:
|
|
67
|
+
name: Publicar en Test PyPI
|
|
68
|
+
needs: build
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
environment: testpypi
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/download-artifact@v4
|
|
73
|
+
with:
|
|
74
|
+
name: dist
|
|
75
|
+
path: dist/
|
|
76
|
+
|
|
77
|
+
- uses: actions/setup-python@v5
|
|
78
|
+
with:
|
|
79
|
+
python-version: "3.12"
|
|
80
|
+
|
|
81
|
+
- name: Publicar en Test PyPI
|
|
82
|
+
run: |
|
|
83
|
+
pip install twine
|
|
84
|
+
twine upload --repository testpypi dist/*
|
|
85
|
+
env:
|
|
86
|
+
TWINE_USERNAME: __token__
|
|
87
|
+
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
88
|
+
continue-on-error: true
|
|
89
|
+
|
|
90
|
+
publish-pypi:
|
|
91
|
+
name: Publicar en PyPI
|
|
92
|
+
needs: [build, publish-testpypi]
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
environment: release
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/download-artifact@v4
|
|
97
|
+
with:
|
|
98
|
+
name: dist
|
|
99
|
+
path: dist/
|
|
100
|
+
|
|
101
|
+
- uses: actions/setup-python@v5
|
|
102
|
+
with:
|
|
103
|
+
python-version: "3.12"
|
|
104
|
+
|
|
105
|
+
- name: Publicar en PyPI
|
|
106
|
+
run: |
|
|
107
|
+
pip install twine
|
|
108
|
+
twine upload dist/*
|
|
109
|
+
env:
|
|
110
|
+
TWINE_USERNAME: __token__
|
|
111
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
112
|
+
|
|
113
|
+
github-release:
|
|
114
|
+
name: Crear GitHub Release
|
|
115
|
+
needs: publish-pypi
|
|
116
|
+
runs-on: ubuntu-latest
|
|
117
|
+
steps:
|
|
118
|
+
- uses: actions/checkout@v4
|
|
119
|
+
|
|
120
|
+
- uses: actions/download-artifact@v4
|
|
121
|
+
with:
|
|
122
|
+
name: dist
|
|
123
|
+
path: dist/
|
|
124
|
+
|
|
125
|
+
- name: Crear Release
|
|
126
|
+
uses: softprops/action-gh-release@v2
|
|
127
|
+
with:
|
|
128
|
+
generate_release_notes: true
|
|
129
|
+
files: dist/*
|
|
130
|
+
body: |
|
|
131
|
+
## Instalación
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
pip install lambdaforge==${{ github.ref_name }}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Cambios
|
|
138
|
+
|
|
139
|
+
Ver [CHANGELOG.md](https://github.com/blaylopez/lambdaforge/blob/main/CHANGELOG.md) para detalles completos.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib64/
|
|
14
|
+
parts/
|
|
15
|
+
sdist/
|
|
16
|
+
var/
|
|
17
|
+
wheels/
|
|
18
|
+
*.egg-info/
|
|
19
|
+
.installed.cfg
|
|
20
|
+
*.egg
|
|
21
|
+
MANIFEST
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
env/
|
|
27
|
+
ENV/
|
|
28
|
+
|
|
29
|
+
# Testing
|
|
30
|
+
.pytest_cache/
|
|
31
|
+
.coverage
|
|
32
|
+
.coverage.*
|
|
33
|
+
htmlcov/
|
|
34
|
+
.tox/
|
|
35
|
+
.nox/
|
|
36
|
+
coverage.xml
|
|
37
|
+
*.cover
|
|
38
|
+
|
|
39
|
+
# Type checking
|
|
40
|
+
.mypy_cache/
|
|
41
|
+
.ruff_cache/
|
|
42
|
+
|
|
43
|
+
# IDEs
|
|
44
|
+
.idea/
|
|
45
|
+
.vscode/
|
|
46
|
+
*.swp
|
|
47
|
+
*.swo
|
|
48
|
+
.DS_Store
|
|
49
|
+
Thumbs.db
|
|
50
|
+
|
|
51
|
+
# CDK
|
|
52
|
+
cdk.out/
|
|
53
|
+
cdk.context.json
|
|
54
|
+
|
|
55
|
+
# Lambda
|
|
56
|
+
*.zip
|
|
57
|
+
|
|
58
|
+
# Environment / Secrets
|
|
59
|
+
.env
|
|
60
|
+
.env.local
|
|
61
|
+
.env.*.local
|
|
62
|
+
*.pem
|
|
63
|
+
*.key
|
|
64
|
+
secrets.yml
|
|
65
|
+
|
|
66
|
+
# Distribution
|
|
67
|
+
dist/
|
|
68
|
+
*.tar.gz
|
|
69
|
+
*.whl
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# Demo projects (generated, not tracked)
|
|
73
|
+
demos/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"name": "Lint on Save",
|
|
4
|
+
"description": "Runs ruff check on saved Python files to catch lint issues immediately",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"when": {
|
|
7
|
+
"type": "fileEdited",
|
|
8
|
+
"patterns": [
|
|
9
|
+
"src/**/*.py",
|
|
10
|
+
"tests/**/*.py"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"then": {
|
|
14
|
+
"type": "runCommand",
|
|
15
|
+
"command": "python -m ruff check --fix {file}"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"name": "Run Tests After Task",
|
|
4
|
+
"description": "Runs the test suite after agent completes a task to catch regressions",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"when": {
|
|
7
|
+
"type": "postTaskExecution"
|
|
8
|
+
},
|
|
9
|
+
"then": {
|
|
10
|
+
"type": "runCommand",
|
|
11
|
+
"command": "python -m pytest tests/ -x -q --tb=short 2>&1 | head -30"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"name": "Security Gate for Infra",
|
|
4
|
+
"description": "Reminds the agent to verify security standards before writing to infrastructure, deploy, or bedrock files",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"when": {
|
|
7
|
+
"type": "preToolUse",
|
|
8
|
+
"toolTypes": [
|
|
9
|
+
"write"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"then": {
|
|
13
|
+
"type": "askAgent",
|
|
14
|
+
"prompt": "Before writing to this infrastructure or security-sensitive file, verify: 1) No hardcoded credentials or secrets, 2) No shell=True in subprocess calls, 3) No wildcard (*) resource ARNs in IAM policies, 4) Subprocess commands use list format. If all checks pass, proceed with the write."
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"name": "Template Standards Check",
|
|
4
|
+
"description": "When a new template file is created, reminds to verify it follows the template steering standards",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"when": {
|
|
7
|
+
"type": "fileCreated",
|
|
8
|
+
"patterns": [
|
|
9
|
+
"templates/**/*"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"then": {
|
|
13
|
+
"type": "askAgent",
|
|
14
|
+
"prompt": "A new template file was created. Verify it follows the template steering standards: 1) cookiecutter.json has all required variables (project_name, project_slug, module_name, description, author_name, author_email, runtime, aws_region, memory_mb, timeout_seconds), 2) Handler uses aws-lambda-powertools Logger and Tracer, 3) CDK stack uses ARM64 + X-Ray + log retention + CloudWatch dashboard + Well-Architected tags, 4) .gitignore excludes secrets. Fix any violations."
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enabled": true,
|
|
3
|
+
"name": "Validate Cookiecutter Vars",
|
|
4
|
+
"description": "Validates that cookiecutter.json has all required variables before committing template changes",
|
|
5
|
+
"version": "1",
|
|
6
|
+
"when": {
|
|
7
|
+
"type": "fileEdited",
|
|
8
|
+
"patterns": [
|
|
9
|
+
"templates/**/cookiecutter.json"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"then": {
|
|
13
|
+
"type": "askAgent",
|
|
14
|
+
"prompt": "The cookiecutter.json was modified. Verify all required variables are present: project_name, project_slug, module_name, description, author_name, author_email, runtime, aws_region, memory_mb, timeout_seconds. Also verify that any variable referenced in template files (search for {{ cookiecutter. patterns) exists in this JSON. Report any missing variables."
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# LambdaForge — Overview Specification
|
|
2
|
+
|
|
3
|
+
## Project Identity
|
|
4
|
+
|
|
5
|
+
- **Name:** LambdaForge
|
|
6
|
+
- **Tagline:** *De cero a Lambda production-ready en 60 segundos, con Kiro specs incluidas.*
|
|
7
|
+
- **Category:** HACKATHONKIRO — Productividad para developers
|
|
8
|
+
- **Version:** 1.0.0
|
|
9
|
+
- **License:** Apache 2.0
|
|
10
|
+
|
|
11
|
+
## Mission Statement
|
|
12
|
+
|
|
13
|
+
Eliminar las 2-3 horas de boilerplate que toma crear una AWS Lambda "bien hecha" (estructura, tests, IaC, observabilidad, docs). En 60 segundos, un developer tiene una Lambda production-ready con todos los ingredientes que un senior esperaría.
|
|
14
|
+
|
|
15
|
+
## The Problem We Solve
|
|
16
|
+
|
|
17
|
+
1. **Boilerplate infinito.** Crear una Lambda "correcta" requiere: handler, tests, IaC, IAM, CloudWatch dashboard, observability, README, .kiro/specs/. Repetitivo y aburrido.
|
|
18
|
+
|
|
19
|
+
2. **Inconsistencia entre Lambdas.** Cada developer estructura diferente. No hay estándar de equipo.
|
|
20
|
+
|
|
21
|
+
3. **Fricción con IaC.** CDK es poderoso pero verboso. Los juniors lo evitan.
|
|
22
|
+
|
|
23
|
+
4. **Well-Architected cuesta.** Lambdas sin observability, sin DLQ, sin X-Ray, sin tags. Las auditorías duelen.
|
|
24
|
+
|
|
25
|
+
5. **No hay Kiro specs desde el inicio.** Specs se escriben después (nunca). SpecForge los genera retroactivamente, pero LambdaForge los incluye desde el día 0.
|
|
26
|
+
|
|
27
|
+
## The Solution
|
|
28
|
+
|
|
29
|
+
Una CLI que genera Lambdas production-ready con un comando:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
lambdaforge new payment-processor \
|
|
33
|
+
--runtime python3.12 \
|
|
34
|
+
--trigger api-gateway \
|
|
35
|
+
--database dynamodb \
|
|
36
|
+
--auth cognito \
|
|
37
|
+
--observability xray
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Output:
|
|
41
|
+
- Estructura de proyecto Python completa
|
|
42
|
+
- Tests con `pytest` + `moto` (mocking AWS)
|
|
43
|
+
- AWS CDK stack (JavaScript) con Lambda + IAM + API GW
|
|
44
|
+
- CloudWatch dashboard pre-configurado
|
|
45
|
+
- GitHub Actions workflow (CI/CD)
|
|
46
|
+
- **`.kiro/specs/`** generado proactivamente
|
|
47
|
+
- README profesional
|
|
48
|
+
- Dockerfile para testing local
|
|
49
|
+
- Logging estructurado (JSON)
|
|
50
|
+
- Tracing con X-Ray
|
|
51
|
+
- Cost estimation en el README
|
|
52
|
+
|
|
53
|
+
## Success Metrics
|
|
54
|
+
|
|
55
|
+
| Métrica | Target | Medición |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| Tiempo de generación de Lambda | < 60s | Benchmark suite |
|
|
58
|
+
| Tiempo de "a deployed" con un click | < 5 min | `lambdaforge deploy` |
|
|
59
|
+
| Tests generados con coverage | > 80% | Auto-verificación |
|
|
60
|
+
| Templates disponibles | 25+ casos | Catálogo |
|
|
61
|
+
| Líneas de código boilerplate evitadas | > 500 por Lambda | Comparación |
|
|
62
|
+
| Developers adoptan Well-Architected | 100% (forzado) | Tag check |
|
|
63
|
+
| .kiro/specs/ funcionales | 100% (auto-generados) | Kiro load test |
|
|
64
|
+
|
|
65
|
+
## Stakeholders
|
|
66
|
+
|
|
67
|
+
- **Primary:** Developers creando Lambdas nuevas
|
|
68
|
+
- **Secondary:** Equipos que estandarizan su serverless
|
|
69
|
+
- **Tertiary:** Educadores enseñando AWS
|
|
70
|
+
- **Quaternary:** Open source maintainers publicando Lambdas
|
|
71
|
+
|
|
72
|
+
## Non-Goals (v1.0)
|
|
73
|
+
|
|
74
|
+
- ❌ No es un framework serverless completo (vs. SAM, SST)
|
|
75
|
+
- ❌ No soporta Step Functions, EventBridge Schemas complejos
|
|
76
|
+
- ❌ No es un debugger de Lambdas (usa SAM local o AWS Toolkit)
|
|
77
|
+
- ❌ No genera Lambdas en otros lenguajes primero (Python primero, luego TS)
|