azure-functions-langgraph 0.5.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.
- azure_functions_langgraph-0.5.0/.editorconfig +12 -0
- azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/bug_report.yml +69 -0
- azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/feature_request.yml +65 -0
- azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/task.yml +56 -0
- azure_functions_langgraph-0.5.0/.github/PULL_REQUEST_TEMPLATE.md +41 -0
- azure_functions_langgraph-0.5.0/.github/dependabot.yml +22 -0
- azure_functions_langgraph-0.5.0/.github/workflows/ci-test.yml +48 -0
- azure_functions_langgraph-0.5.0/.github/workflows/codeql.yml +33 -0
- azure_functions_langgraph-0.5.0/.github/workflows/docs.yml +34 -0
- azure_functions_langgraph-0.5.0/.github/workflows/maintenance.yml +35 -0
- azure_functions_langgraph-0.5.0/.github/workflows/performance.yml +35 -0
- azure_functions_langgraph-0.5.0/.github/workflows/publish-pypi.yml +57 -0
- azure_functions_langgraph-0.5.0/.github/workflows/release.yml +38 -0
- azure_functions_langgraph-0.5.0/.github/workflows/sbom.yml +28 -0
- azure_functions_langgraph-0.5.0/.github/workflows/security.yml +43 -0
- azure_functions_langgraph-0.5.0/.github/workflows/stale.yml +192 -0
- azure_functions_langgraph-0.5.0/.gitignore +35 -0
- azure_functions_langgraph-0.5.0/.pre-commit-config.yaml +38 -0
- azure_functions_langgraph-0.5.0/AGENTS.md +21 -0
- azure_functions_langgraph-0.5.0/CHANGELOG.md +134 -0
- azure_functions_langgraph-0.5.0/CODE_OF_CONDUCT.md +56 -0
- azure_functions_langgraph-0.5.0/COMPATIBILITY.md +35 -0
- azure_functions_langgraph-0.5.0/CONTRIBUTING.md +75 -0
- azure_functions_langgraph-0.5.0/DESIGN.md +187 -0
- azure_functions_langgraph-0.5.0/LICENSE +21 -0
- azure_functions_langgraph-0.5.0/Makefile +221 -0
- azure_functions_langgraph-0.5.0/PKG-INFO +419 -0
- azure_functions_langgraph-0.5.0/PRD.md +54 -0
- azure_functions_langgraph-0.5.0/README.ja.md +315 -0
- azure_functions_langgraph-0.5.0/README.ko.md +315 -0
- azure_functions_langgraph-0.5.0/README.md +366 -0
- azure_functions_langgraph-0.5.0/README.zh-CN.md +315 -0
- azure_functions_langgraph-0.5.0/SECURITY.md +35 -0
- azure_functions_langgraph-0.5.0/SUPPORT.md +46 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/__init__.py +130 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/_handlers.py +267 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/_validation.py +169 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/app.py +386 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/checkpointers/__init__.py +23 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/checkpointers/azure_blob.py +633 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/contracts.py +117 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/openapi.py +117 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/__init__.py +20 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_assistants.py +112 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_common.py +210 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_runs.py +601 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_sse.py +79 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_threads.py +520 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/contracts.py +308 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/routes.py +74 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/stores.py +282 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/protocols.py +72 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/py.typed +1 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/stores/__init__.py +19 -0
- azure_functions_langgraph-0.5.0/azure_functions_langgraph/stores/azure_table.py +328 -0
- azure_functions_langgraph-0.5.0/cliff.toml +32 -0
- azure_functions_langgraph-0.5.0/codecov.yml +13 -0
- azure_functions_langgraph-0.5.0/docs/api.md +70 -0
- azure_functions_langgraph-0.5.0/docs/architecture.md +371 -0
- azure_functions_langgraph-0.5.0/docs/changelog.md +78 -0
- azure_functions_langgraph-0.5.0/docs/choose-a-plan.md +264 -0
- azure_functions_langgraph-0.5.0/docs/configuration.md +131 -0
- azure_functions_langgraph-0.5.0/docs/contributing.md +53 -0
- azure_functions_langgraph-0.5.0/docs/deployment.md +787 -0
- azure_functions_langgraph-0.5.0/docs/development.md +92 -0
- azure_functions_langgraph-0.5.0/docs/examples/simple_agent.md +136 -0
- azure_functions_langgraph-0.5.0/docs/faq.md +116 -0
- azure_functions_langgraph-0.5.0/docs/getting-started.md +148 -0
- azure_functions_langgraph-0.5.0/docs/index.md +73 -0
- azure_functions_langgraph-0.5.0/docs/installation.md +68 -0
- azure_functions_langgraph-0.5.0/docs/javascripts/mermaid-init.js +15 -0
- azure_functions_langgraph-0.5.0/docs/production-guide.md +357 -0
- azure_functions_langgraph-0.5.0/docs/security.md +51 -0
- azure_functions_langgraph-0.5.0/docs/testing.md +122 -0
- azure_functions_langgraph-0.5.0/docs/troubleshooting.md +108 -0
- azure_functions_langgraph-0.5.0/docs/usage.md +283 -0
- azure_functions_langgraph-0.5.0/examples/README.md +9 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/README.md +34 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/function_app.py +18 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/graph.py +73 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/host.json +15 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/local.settings.json +7 -0
- azure_functions_langgraph-0.5.0/examples/simple_agent/requirements.txt +7 -0
- azure_functions_langgraph-0.5.0/host.json +15 -0
- azure_functions_langgraph-0.5.0/mkdocs.yml +80 -0
- azure_functions_langgraph-0.5.0/pyproject.toml +142 -0
- azure_functions_langgraph-0.5.0/tests/__init__.py +1 -0
- azure_functions_langgraph-0.5.0/tests/conftest.py +266 -0
- azure_functions_langgraph-0.5.0/tests/test_app.py +890 -0
- azure_functions_langgraph-0.5.0/tests/test_checkpointers_azure_blob.py +573 -0
- azure_functions_langgraph-0.5.0/tests/test_contracts.py +107 -0
- azure_functions_langgraph-0.5.0/tests/test_integration.py +454 -0
- azure_functions_langgraph-0.5.0/tests/test_integration_platform.py +333 -0
- azure_functions_langgraph-0.5.0/tests/test_metadata.py +302 -0
- azure_functions_langgraph-0.5.0/tests/test_openapi_bridge.py +352 -0
- azure_functions_langgraph-0.5.0/tests/test_persistent_storage.py +926 -0
- azure_functions_langgraph-0.5.0/tests/test_platform_contracts.py +673 -0
- azure_functions_langgraph-0.5.0/tests/test_platform_routes.py +3576 -0
- azure_functions_langgraph-0.5.0/tests/test_platform_sse.py +282 -0
- azure_functions_langgraph-0.5.0/tests/test_platform_stores.py +575 -0
- azure_functions_langgraph-0.5.0/tests/test_protocols.py +64 -0
- azure_functions_langgraph-0.5.0/tests/test_public_api.py +133 -0
- azure_functions_langgraph-0.5.0/tests/test_sdk_compat.py +894 -0
- azure_functions_langgraph-0.5.0/tests/test_sdk_contracts.py +148 -0
- azure_functions_langgraph-0.5.0/tests/test_stores_azure_table.py +526 -0
- azure_functions_langgraph-0.5.0/tests/test_validation.py +949 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# This file sets code formatting rules that are respected by many editors and IDEs
|
|
2
|
+
# It helps maintain consistent coding style across different environments
|
|
3
|
+
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
[*]
|
|
7
|
+
charset = utf-8 # Use UTF-8 encoding for all files
|
|
8
|
+
end_of_line = lf # Use LF (Unix-style) line endings
|
|
9
|
+
indent_style = space # Use spaces instead of tabs
|
|
10
|
+
indent_size = 4 # Indent with 4 spaces
|
|
11
|
+
trim_trailing_whitespace = true # Remove any whitespace characters at the end of lines
|
|
12
|
+
insert_final_newline = true # Ensure every file ends with a newline
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug or unexpected behavior
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for taking the time to report a bug!
|
|
10
|
+
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Problem
|
|
15
|
+
description: A clear description of the bug
|
|
16
|
+
placeholder: What happened? What did you expect to happen?
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: current-state
|
|
22
|
+
attributes:
|
|
23
|
+
label: Current State
|
|
24
|
+
description: Describe the current behavior and any relevant context
|
|
25
|
+
placeholder: |
|
|
26
|
+
- What is happening now?
|
|
27
|
+
- Any error messages or logs?
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: steps-to-reproduce
|
|
33
|
+
attributes:
|
|
34
|
+
label: Steps to Reproduce
|
|
35
|
+
description: How can we reproduce this issue?
|
|
36
|
+
placeholder: |
|
|
37
|
+
1. Install package...
|
|
38
|
+
2. Run command...
|
|
39
|
+
3. See error...
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
|
|
43
|
+
- type: textarea
|
|
44
|
+
id: expected-outcome
|
|
45
|
+
attributes:
|
|
46
|
+
label: Expected Outcome
|
|
47
|
+
description: What should happen instead?
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: textarea
|
|
52
|
+
id: environment
|
|
53
|
+
attributes:
|
|
54
|
+
label: Environment
|
|
55
|
+
description: Your environment details
|
|
56
|
+
placeholder: |
|
|
57
|
+
- Python version:
|
|
58
|
+
- Package version:
|
|
59
|
+
- OS:
|
|
60
|
+
validations:
|
|
61
|
+
required: false
|
|
62
|
+
|
|
63
|
+
- type: textarea
|
|
64
|
+
id: references
|
|
65
|
+
attributes:
|
|
66
|
+
label: References
|
|
67
|
+
description: Any related files, links, or resources
|
|
68
|
+
validations:
|
|
69
|
+
required: false
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest a new feature or enhancement
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for suggesting a feature!
|
|
10
|
+
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Problem
|
|
15
|
+
description: What problem does this feature solve?
|
|
16
|
+
placeholder: Describe the problem or limitation you're facing
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: current-state
|
|
22
|
+
attributes:
|
|
23
|
+
label: Current State
|
|
24
|
+
description: How does the project currently handle this (if at all)?
|
|
25
|
+
placeholder: |
|
|
26
|
+
- Current behavior
|
|
27
|
+
- Current limitations
|
|
28
|
+
validations:
|
|
29
|
+
required: false
|
|
30
|
+
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: proposed-solution
|
|
33
|
+
attributes:
|
|
34
|
+
label: Proposed Solution
|
|
35
|
+
description: How would you like this to work?
|
|
36
|
+
placeholder: Describe your ideal solution
|
|
37
|
+
validations:
|
|
38
|
+
required: true
|
|
39
|
+
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: tasks
|
|
42
|
+
attributes:
|
|
43
|
+
label: Tasks
|
|
44
|
+
description: Break down the implementation into tasks (if known)
|
|
45
|
+
placeholder: |
|
|
46
|
+
- [ ] Task 1
|
|
47
|
+
- [ ] Task 2
|
|
48
|
+
validations:
|
|
49
|
+
required: false
|
|
50
|
+
|
|
51
|
+
- type: textarea
|
|
52
|
+
id: expected-outcome
|
|
53
|
+
attributes:
|
|
54
|
+
label: Expected Outcome
|
|
55
|
+
description: What should be the end result?
|
|
56
|
+
validations:
|
|
57
|
+
required: true
|
|
58
|
+
|
|
59
|
+
- type: textarea
|
|
60
|
+
id: references
|
|
61
|
+
attributes:
|
|
62
|
+
label: References
|
|
63
|
+
description: Any related files, links, documentation, or examples
|
|
64
|
+
validations:
|
|
65
|
+
required: false
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Task
|
|
2
|
+
description: A general task or chore (refactoring, maintenance, etc.)
|
|
3
|
+
title: "[Task]: "
|
|
4
|
+
labels: ["chore"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Use this template for maintenance tasks, refactoring, or other chores.
|
|
10
|
+
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Problem
|
|
15
|
+
description: Why is this task needed?
|
|
16
|
+
placeholder: Describe the motivation for this task
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: current-state
|
|
22
|
+
attributes:
|
|
23
|
+
label: Current State
|
|
24
|
+
description: What is the current situation?
|
|
25
|
+
placeholder: |
|
|
26
|
+
- Current code/config state
|
|
27
|
+
- Any issues or limitations
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: tasks
|
|
33
|
+
attributes:
|
|
34
|
+
label: Tasks
|
|
35
|
+
description: Break down the work into actionable items
|
|
36
|
+
placeholder: |
|
|
37
|
+
- [ ] Task 1
|
|
38
|
+
- [ ] Task 2
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
41
|
+
|
|
42
|
+
- type: textarea
|
|
43
|
+
id: expected-outcome
|
|
44
|
+
attributes:
|
|
45
|
+
label: Expected Outcome
|
|
46
|
+
description: What should be the result when this is complete?
|
|
47
|
+
validations:
|
|
48
|
+
required: true
|
|
49
|
+
|
|
50
|
+
- type: textarea
|
|
51
|
+
id: references
|
|
52
|
+
attributes:
|
|
53
|
+
label: References
|
|
54
|
+
description: Any related files, documentation, or resources
|
|
55
|
+
validations:
|
|
56
|
+
required: false
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- Brief description of changes -->
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
<!-- List the specific changes made -->
|
|
8
|
+
|
|
9
|
+
-
|
|
10
|
+
|
|
11
|
+
## Type of Change
|
|
12
|
+
|
|
13
|
+
<!-- Check the relevant option -->
|
|
14
|
+
|
|
15
|
+
- [ ] Bug fix (non-breaking change that fixes an issue)
|
|
16
|
+
- [ ] New feature (non-breaking change that adds functionality)
|
|
17
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
|
18
|
+
- [ ] Documentation update
|
|
19
|
+
- [ ] Refactoring (no functional changes)
|
|
20
|
+
- [ ] Chore (maintenance, dependencies, CI, etc.)
|
|
21
|
+
|
|
22
|
+
## Checklist
|
|
23
|
+
|
|
24
|
+
- [ ] My code follows the project's code style
|
|
25
|
+
- [ ] I have run `make check` (lint + typecheck)
|
|
26
|
+
- [ ] I have run `make test` and all tests pass
|
|
27
|
+
- [ ] I have added tests for new functionality (if applicable)
|
|
28
|
+
- [ ] I have updated documentation (if applicable)
|
|
29
|
+
- [ ] My changes do not introduce new warnings
|
|
30
|
+
|
|
31
|
+
## Version Management
|
|
32
|
+
|
|
33
|
+
- [ ] If adding new features, I have bumped the version in `src/azure_functions_langgraph/__init__.py`
|
|
34
|
+
- [ ] I have updated `PRD.md` if product scope or goals changed
|
|
35
|
+
- [ ] I have updated `CHANGELOG.md` with detailed changes
|
|
36
|
+
|
|
37
|
+
**Note:** See `CONTRIBUTING.md` for version management guidelines.
|
|
38
|
+
|
|
39
|
+
## Related Issues
|
|
40
|
+
|
|
41
|
+
<!-- Link to related issues: Closes #123, Fixes #456 -->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
commit-message:
|
|
8
|
+
prefix: "chore(deps)"
|
|
9
|
+
labels:
|
|
10
|
+
- "dependencies"
|
|
11
|
+
open-pull-requests-limit: 10
|
|
12
|
+
|
|
13
|
+
- package-ecosystem: "github-actions"
|
|
14
|
+
directory: "/"
|
|
15
|
+
schedule:
|
|
16
|
+
interval: "weekly"
|
|
17
|
+
commit-message:
|
|
18
|
+
prefix: "chore(deps)"
|
|
19
|
+
labels:
|
|
20
|
+
- "dependencies"
|
|
21
|
+
- "github-actions"
|
|
22
|
+
open-pull-requests-limit: 10
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Test and Coverage
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize, reopened]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
strategy:
|
|
16
|
+
matrix:
|
|
17
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout code
|
|
21
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
22
|
+
|
|
23
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
24
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
|
|
28
|
+
- name: Install Hatch and dependencies via Makefile
|
|
29
|
+
run: |
|
|
30
|
+
pip install hatch
|
|
31
|
+
make install
|
|
32
|
+
|
|
33
|
+
- name: Run full quality checks
|
|
34
|
+
run: make check-all
|
|
35
|
+
|
|
36
|
+
- name: Verify coverage output
|
|
37
|
+
run: ls -lh coverage.xml
|
|
38
|
+
|
|
39
|
+
- name: Upload coverage to Codecov
|
|
40
|
+
if: matrix.python-version == '3.10' && github.actor != 'dependabot[bot]'
|
|
41
|
+
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v5
|
|
42
|
+
with:
|
|
43
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
44
|
+
files: ./coverage.xml
|
|
45
|
+
verbose: true
|
|
46
|
+
fail_ci_if_error: false
|
|
47
|
+
env:
|
|
48
|
+
CODECOV_RETRIES: 3
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: CodeQL Security Analysis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 0 * * 1"
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
security-events: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
analyze:
|
|
17
|
+
name: Analyze
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
23
|
+
|
|
24
|
+
- name: Initialize CodeQL
|
|
25
|
+
uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
26
|
+
with:
|
|
27
|
+
languages: python
|
|
28
|
+
queries: security-extended
|
|
29
|
+
|
|
30
|
+
- name: Perform CodeQL Analysis
|
|
31
|
+
uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
32
|
+
with:
|
|
33
|
+
category: "/language:python"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Deploy MkDocs to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
deploy:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
19
|
+
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.10"
|
|
24
|
+
|
|
25
|
+
- name: Install Hatch and docs dependencies
|
|
26
|
+
run: |
|
|
27
|
+
pip install hatch
|
|
28
|
+
make install
|
|
29
|
+
|
|
30
|
+
- name: Build docs (verify build before deploy)
|
|
31
|
+
run: hatch run mkdocs build --strict
|
|
32
|
+
|
|
33
|
+
- name: Deploy to GitHub Pages
|
|
34
|
+
run: hatch run mkdocs gh-deploy --force
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Maintenance Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: "0 4 * * 1"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
maintenance:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout code
|
|
17
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install Hatch and dependencies via Makefile
|
|
25
|
+
run: |
|
|
26
|
+
pip install hatch
|
|
27
|
+
make install
|
|
28
|
+
|
|
29
|
+
- name: Run lint and type checks
|
|
30
|
+
run: |
|
|
31
|
+
hatch run lint
|
|
32
|
+
hatch run typecheck
|
|
33
|
+
|
|
34
|
+
- name: Run security scan (Bandit)
|
|
35
|
+
run: make security
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Performance Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: "0 3 * * 1"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
performance:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout code
|
|
17
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install Hatch and dependencies via Makefile
|
|
25
|
+
run: |
|
|
26
|
+
pip install hatch
|
|
27
|
+
make install
|
|
28
|
+
|
|
29
|
+
- name: Run performance regression tests (if present)
|
|
30
|
+
run: |
|
|
31
|
+
if [ -d tests/performance ]; then
|
|
32
|
+
hatch run python -m pytest tests/performance -v
|
|
33
|
+
else
|
|
34
|
+
echo "No performance tests found; skipping."
|
|
35
|
+
fi
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
# Trigger the workflow on tag pushes matching v* (e.g., v1.0.0)
|
|
6
|
+
tags:
|
|
7
|
+
- 'v*'
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
tag:
|
|
11
|
+
description: Git tag to publish (for example v0.3.0)
|
|
12
|
+
required: true
|
|
13
|
+
type: string
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
id-token: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build-and-publish:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
environment: pypi
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- name: Checkout repository
|
|
26
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
27
|
+
with:
|
|
28
|
+
ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref }}
|
|
29
|
+
|
|
30
|
+
- name: Set up Python
|
|
31
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.12"
|
|
34
|
+
|
|
35
|
+
- name: Install build dependencies
|
|
36
|
+
run: |
|
|
37
|
+
python -m pip install --upgrade pip
|
|
38
|
+
pip install build
|
|
39
|
+
|
|
40
|
+
- name: Check if tag matches __version__
|
|
41
|
+
run: |
|
|
42
|
+
TAG_NAME="${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}"
|
|
43
|
+
VERSION_FROM_FILE=$(grep -Po '(?<=__version__ = ")[^"]*' src/azure_functions_langgraph/__init__.py)
|
|
44
|
+
TAG_VERSION=${TAG_NAME#v}
|
|
45
|
+
echo "Version from file: $VERSION_FROM_FILE"
|
|
46
|
+
echo "Tag name: $TAG_NAME"
|
|
47
|
+
echo "Version from tag: $TAG_VERSION"
|
|
48
|
+
if [ "$VERSION_FROM_FILE" != "$TAG_VERSION" ]; then
|
|
49
|
+
echo "::error ::Version in __init__.py ($VERSION_FROM_FILE) does not match git tag ($TAG_VERSION)"
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
- name: Build distribution packages
|
|
54
|
+
run: python -m build
|
|
55
|
+
|
|
56
|
+
- name: Publish to PyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Create GitHub Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
# Trigger the workflow on tag pushes matching v* (e.g., v1.0.0)
|
|
6
|
+
tags:
|
|
7
|
+
- 'v*'
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
|
|
27
|
+
- name: Install git-cliff
|
|
28
|
+
run: pip install "git-cliff>=2.12,<3"
|
|
29
|
+
|
|
30
|
+
- name: Generate changelog
|
|
31
|
+
run: git-cliff --latest --strip header -o RELEASE_NOTES.md
|
|
32
|
+
|
|
33
|
+
- name: Create GitHub Release
|
|
34
|
+
uses: softprops/action-gh-release@v2
|
|
35
|
+
with:
|
|
36
|
+
body_path: RELEASE_NOTES.md
|
|
37
|
+
prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }}
|
|
38
|
+
generate_release_notes: false
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Generate SBOM
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: "0 1 * * 1"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
sbom:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout code
|
|
16
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
17
|
+
|
|
18
|
+
- name: Generate SBOM
|
|
19
|
+
uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
|
|
20
|
+
with:
|
|
21
|
+
format: spdx-json
|
|
22
|
+
output-file: sbom.spdx.json
|
|
23
|
+
|
|
24
|
+
- name: Upload SBOM artifact
|
|
25
|
+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
|
26
|
+
with:
|
|
27
|
+
name: sbom
|
|
28
|
+
path: sbom.spdx.json
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Security Scans
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize, reopened]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 2 * * 1"
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
bandit:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout code
|
|
19
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
|
|
26
|
+
- name: Install Hatch and dependencies via Makefile
|
|
27
|
+
run: |
|
|
28
|
+
pip install hatch
|
|
29
|
+
make install
|
|
30
|
+
|
|
31
|
+
- name: Run Bandit
|
|
32
|
+
run: make security
|
|
33
|
+
|
|
34
|
+
semgrep:
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- name: Checkout code
|
|
38
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
39
|
+
|
|
40
|
+
- name: Run Semgrep
|
|
41
|
+
uses: semgrep/semgrep-action@713efdd345f3035192eaa63f56867b88e63e4e5d # v1
|
|
42
|
+
with:
|
|
43
|
+
config: p/python
|