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.
Files changed (107) hide show
  1. azure_functions_langgraph-0.5.0/.editorconfig +12 -0
  2. azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/bug_report.yml +69 -0
  3. azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/feature_request.yml +65 -0
  5. azure_functions_langgraph-0.5.0/.github/ISSUE_TEMPLATE/task.yml +56 -0
  6. azure_functions_langgraph-0.5.0/.github/PULL_REQUEST_TEMPLATE.md +41 -0
  7. azure_functions_langgraph-0.5.0/.github/dependabot.yml +22 -0
  8. azure_functions_langgraph-0.5.0/.github/workflows/ci-test.yml +48 -0
  9. azure_functions_langgraph-0.5.0/.github/workflows/codeql.yml +33 -0
  10. azure_functions_langgraph-0.5.0/.github/workflows/docs.yml +34 -0
  11. azure_functions_langgraph-0.5.0/.github/workflows/maintenance.yml +35 -0
  12. azure_functions_langgraph-0.5.0/.github/workflows/performance.yml +35 -0
  13. azure_functions_langgraph-0.5.0/.github/workflows/publish-pypi.yml +57 -0
  14. azure_functions_langgraph-0.5.0/.github/workflows/release.yml +38 -0
  15. azure_functions_langgraph-0.5.0/.github/workflows/sbom.yml +28 -0
  16. azure_functions_langgraph-0.5.0/.github/workflows/security.yml +43 -0
  17. azure_functions_langgraph-0.5.0/.github/workflows/stale.yml +192 -0
  18. azure_functions_langgraph-0.5.0/.gitignore +35 -0
  19. azure_functions_langgraph-0.5.0/.pre-commit-config.yaml +38 -0
  20. azure_functions_langgraph-0.5.0/AGENTS.md +21 -0
  21. azure_functions_langgraph-0.5.0/CHANGELOG.md +134 -0
  22. azure_functions_langgraph-0.5.0/CODE_OF_CONDUCT.md +56 -0
  23. azure_functions_langgraph-0.5.0/COMPATIBILITY.md +35 -0
  24. azure_functions_langgraph-0.5.0/CONTRIBUTING.md +75 -0
  25. azure_functions_langgraph-0.5.0/DESIGN.md +187 -0
  26. azure_functions_langgraph-0.5.0/LICENSE +21 -0
  27. azure_functions_langgraph-0.5.0/Makefile +221 -0
  28. azure_functions_langgraph-0.5.0/PKG-INFO +419 -0
  29. azure_functions_langgraph-0.5.0/PRD.md +54 -0
  30. azure_functions_langgraph-0.5.0/README.ja.md +315 -0
  31. azure_functions_langgraph-0.5.0/README.ko.md +315 -0
  32. azure_functions_langgraph-0.5.0/README.md +366 -0
  33. azure_functions_langgraph-0.5.0/README.zh-CN.md +315 -0
  34. azure_functions_langgraph-0.5.0/SECURITY.md +35 -0
  35. azure_functions_langgraph-0.5.0/SUPPORT.md +46 -0
  36. azure_functions_langgraph-0.5.0/azure_functions_langgraph/__init__.py +130 -0
  37. azure_functions_langgraph-0.5.0/azure_functions_langgraph/_handlers.py +267 -0
  38. azure_functions_langgraph-0.5.0/azure_functions_langgraph/_validation.py +169 -0
  39. azure_functions_langgraph-0.5.0/azure_functions_langgraph/app.py +386 -0
  40. azure_functions_langgraph-0.5.0/azure_functions_langgraph/checkpointers/__init__.py +23 -0
  41. azure_functions_langgraph-0.5.0/azure_functions_langgraph/checkpointers/azure_blob.py +633 -0
  42. azure_functions_langgraph-0.5.0/azure_functions_langgraph/contracts.py +117 -0
  43. azure_functions_langgraph-0.5.0/azure_functions_langgraph/openapi.py +117 -0
  44. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/__init__.py +20 -0
  45. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_assistants.py +112 -0
  46. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_common.py +210 -0
  47. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_runs.py +601 -0
  48. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_sse.py +79 -0
  49. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/_threads.py +520 -0
  50. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/contracts.py +308 -0
  51. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/routes.py +74 -0
  52. azure_functions_langgraph-0.5.0/azure_functions_langgraph/platform/stores.py +282 -0
  53. azure_functions_langgraph-0.5.0/azure_functions_langgraph/protocols.py +72 -0
  54. azure_functions_langgraph-0.5.0/azure_functions_langgraph/py.typed +1 -0
  55. azure_functions_langgraph-0.5.0/azure_functions_langgraph/stores/__init__.py +19 -0
  56. azure_functions_langgraph-0.5.0/azure_functions_langgraph/stores/azure_table.py +328 -0
  57. azure_functions_langgraph-0.5.0/cliff.toml +32 -0
  58. azure_functions_langgraph-0.5.0/codecov.yml +13 -0
  59. azure_functions_langgraph-0.5.0/docs/api.md +70 -0
  60. azure_functions_langgraph-0.5.0/docs/architecture.md +371 -0
  61. azure_functions_langgraph-0.5.0/docs/changelog.md +78 -0
  62. azure_functions_langgraph-0.5.0/docs/choose-a-plan.md +264 -0
  63. azure_functions_langgraph-0.5.0/docs/configuration.md +131 -0
  64. azure_functions_langgraph-0.5.0/docs/contributing.md +53 -0
  65. azure_functions_langgraph-0.5.0/docs/deployment.md +787 -0
  66. azure_functions_langgraph-0.5.0/docs/development.md +92 -0
  67. azure_functions_langgraph-0.5.0/docs/examples/simple_agent.md +136 -0
  68. azure_functions_langgraph-0.5.0/docs/faq.md +116 -0
  69. azure_functions_langgraph-0.5.0/docs/getting-started.md +148 -0
  70. azure_functions_langgraph-0.5.0/docs/index.md +73 -0
  71. azure_functions_langgraph-0.5.0/docs/installation.md +68 -0
  72. azure_functions_langgraph-0.5.0/docs/javascripts/mermaid-init.js +15 -0
  73. azure_functions_langgraph-0.5.0/docs/production-guide.md +357 -0
  74. azure_functions_langgraph-0.5.0/docs/security.md +51 -0
  75. azure_functions_langgraph-0.5.0/docs/testing.md +122 -0
  76. azure_functions_langgraph-0.5.0/docs/troubleshooting.md +108 -0
  77. azure_functions_langgraph-0.5.0/docs/usage.md +283 -0
  78. azure_functions_langgraph-0.5.0/examples/README.md +9 -0
  79. azure_functions_langgraph-0.5.0/examples/simple_agent/README.md +34 -0
  80. azure_functions_langgraph-0.5.0/examples/simple_agent/function_app.py +18 -0
  81. azure_functions_langgraph-0.5.0/examples/simple_agent/graph.py +73 -0
  82. azure_functions_langgraph-0.5.0/examples/simple_agent/host.json +15 -0
  83. azure_functions_langgraph-0.5.0/examples/simple_agent/local.settings.json +7 -0
  84. azure_functions_langgraph-0.5.0/examples/simple_agent/requirements.txt +7 -0
  85. azure_functions_langgraph-0.5.0/host.json +15 -0
  86. azure_functions_langgraph-0.5.0/mkdocs.yml +80 -0
  87. azure_functions_langgraph-0.5.0/pyproject.toml +142 -0
  88. azure_functions_langgraph-0.5.0/tests/__init__.py +1 -0
  89. azure_functions_langgraph-0.5.0/tests/conftest.py +266 -0
  90. azure_functions_langgraph-0.5.0/tests/test_app.py +890 -0
  91. azure_functions_langgraph-0.5.0/tests/test_checkpointers_azure_blob.py +573 -0
  92. azure_functions_langgraph-0.5.0/tests/test_contracts.py +107 -0
  93. azure_functions_langgraph-0.5.0/tests/test_integration.py +454 -0
  94. azure_functions_langgraph-0.5.0/tests/test_integration_platform.py +333 -0
  95. azure_functions_langgraph-0.5.0/tests/test_metadata.py +302 -0
  96. azure_functions_langgraph-0.5.0/tests/test_openapi_bridge.py +352 -0
  97. azure_functions_langgraph-0.5.0/tests/test_persistent_storage.py +926 -0
  98. azure_functions_langgraph-0.5.0/tests/test_platform_contracts.py +673 -0
  99. azure_functions_langgraph-0.5.0/tests/test_platform_routes.py +3576 -0
  100. azure_functions_langgraph-0.5.0/tests/test_platform_sse.py +282 -0
  101. azure_functions_langgraph-0.5.0/tests/test_platform_stores.py +575 -0
  102. azure_functions_langgraph-0.5.0/tests/test_protocols.py +64 -0
  103. azure_functions_langgraph-0.5.0/tests/test_public_api.py +133 -0
  104. azure_functions_langgraph-0.5.0/tests/test_sdk_compat.py +894 -0
  105. azure_functions_langgraph-0.5.0/tests/test_sdk_contracts.py +148 -0
  106. azure_functions_langgraph-0.5.0/tests/test_stores_azure_table.py +526 -0
  107. 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,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Documentation
4
+ url: https://yeongseon.github.io/azure-functions-langgraph/
5
+ about: Check our documentation for usage guides and examples
@@ -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