pycfmodel 1.2.0__tar.gz → 2.0.1__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 (139) hide show
  1. pycfmodel-2.0.1/.flake8 +5 -0
  2. pycfmodel-2.0.1/.github/dependabot.yml +21 -0
  3. pycfmodel-2.0.1/.github/pull_request_template.md +8 -0
  4. pycfmodel-2.0.1/.github/release-drafter.yml +22 -0
  5. pycfmodel-2.0.1/.github/workflows/copilot-setup-steps.yml +42 -0
  6. pycfmodel-2.0.1/.github/workflows/lint-and-test.yml +39 -0
  7. pycfmodel-2.0.1/.github/workflows/pypi-release.yml +37 -0
  8. pycfmodel-2.0.1/.github/workflows/release-drafter.yml +39 -0
  9. pycfmodel-2.0.1/.github/workflows/test-docs.yml +28 -0
  10. pycfmodel-2.0.1/.github/workflows/update-cloudformation-actions.yml +58 -0
  11. pycfmodel-2.0.1/.github/workflows/zizmor.yml +25 -0
  12. pycfmodel-2.0.1/.gitignore +115 -0
  13. pycfmodel-2.0.1/.readthedocs.yaml +19 -0
  14. pycfmodel-2.0.1/CHANGELOG.md +344 -0
  15. pycfmodel-2.0.1/CLAUDE.md +153 -0
  16. pycfmodel-2.0.1/CODE_OF_CONDUCT.md +77 -0
  17. pycfmodel-2.0.1/CONTRIBUTING.md +14 -0
  18. pycfmodel-2.0.1/Makefile +60 -0
  19. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/PKG-INFO +14 -8
  20. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/README.md +11 -5
  21. pycfmodel-2.0.1/docs/changelog.md +344 -0
  22. pycfmodel-2.0.1/docs/code_of_conduct.md +77 -0
  23. pycfmodel-2.0.1/docs/contributing.md +14 -0
  24. pycfmodel-2.0.1/docs/index.md +130 -0
  25. pycfmodel-2.0.1/docs/reference/cfmodel.md +3 -0
  26. pycfmodel-2.0.1/docs/reference/properties.md +15 -0
  27. pycfmodel-2.0.1/docs/reference/resources.md +32 -0
  28. pycfmodel-2.0.1/docs/stylesheets/extra.css +38 -0
  29. pycfmodel-2.0.1/mkdocs.yml +45 -0
  30. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/cloudformation_actions.py +101 -53
  31. pycfmodel-2.0.1/pycfmodel/model/resources/autoscaling_auto_scaling_group.py +521 -0
  32. pycfmodel-2.0.1/pycfmodel/model/resources/cloudwatch_alarm.py +139 -0
  33. pycfmodel-2.0.1/pycfmodel/model/resources/dynamodb_table.py +336 -0
  34. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/ec2_vpc_endpoint_policy.py +24 -1
  35. pycfmodel-2.0.1/pycfmodel/model/resources/elbv2_listener.py +241 -0
  36. pycfmodel-2.0.1/pycfmodel/model/resources/elbv2_target_group.py +117 -0
  37. pycfmodel-2.0.1/pycfmodel/model/resources/es_domain.py +184 -0
  38. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/iam_group.py +1 -1
  39. pycfmodel-2.0.1/pycfmodel/model/resources/iam_instance_profile.py +45 -0
  40. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/iam_user.py +25 -7
  41. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/kms_key.py +2 -0
  42. pycfmodel-2.0.1/pycfmodel/model/resources/opensearch_domain.py +206 -0
  43. pycfmodel-2.0.1/pycfmodel/model/resources/route53_record_set.py +136 -0
  44. pycfmodel-2.0.1/pycfmodel/model/resources/s3_bucket.py +938 -0
  45. pycfmodel-2.0.1/pycfmodel/model/resources/sns_subscription.py +60 -0
  46. pycfmodel-2.0.1/pycfmodel/model/resources/sns_topic.py +101 -0
  47. pycfmodel-2.0.1/pycfmodel/model/resources/sqs_queue.py +71 -0
  48. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/types.py +20 -0
  49. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/types.py +72 -1
  50. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel.egg-info/PKG-INFO +14 -8
  51. pycfmodel-2.0.1/pycfmodel.egg-info/SOURCES.txt +133 -0
  52. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel.egg-info/requires.txt +3 -2
  53. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pyproject.toml +7 -4
  54. pycfmodel-2.0.1/scripts/generate_cloudformation_actions_file.py +37 -0
  55. pycfmodel-2.0.1/scripts/generate_resource_from_schema.py +845 -0
  56. pycfmodel-2.0.1/tests/resources/properties/test_policy_document.py +362 -0
  57. pycfmodel-2.0.1/tests/resources/properties/test_principal.py +31 -0
  58. pycfmodel-2.0.1/tests/resources/properties/test_statement.py +224 -0
  59. pycfmodel-2.0.1/tests/resources/properties/test_statement_condition.py +681 -0
  60. pycfmodel-2.0.1/tests/resources/test_autoscaling_auto_scaling_group.py +286 -0
  61. pycfmodel-2.0.1/tests/resources/test_cloudwatch_alarm.py +132 -0
  62. pycfmodel-2.0.1/tests/resources/test_dynamodb_table.py +139 -0
  63. pycfmodel-2.0.1/tests/resources/test_ec2_vpc_endpoint_policy.py +61 -0
  64. pycfmodel-2.0.1/tests/resources/test_elbv2_listener.py +199 -0
  65. pycfmodel-2.0.1/tests/resources/test_elbv2_target_group.py +164 -0
  66. pycfmodel-2.0.1/tests/resources/test_es_domain.py +205 -0
  67. pycfmodel-2.0.1/tests/resources/test_generic_resoure.py +124 -0
  68. pycfmodel-2.0.1/tests/resources/test_iam_group.py +44 -0
  69. pycfmodel-2.0.1/tests/resources/test_iam_instance_profile.py +79 -0
  70. pycfmodel-2.0.1/tests/resources/test_iam_managed_policy.py +39 -0
  71. pycfmodel-2.0.1/tests/resources/test_iam_policy.py +36 -0
  72. pycfmodel-2.0.1/tests/resources/test_iam_role.py +85 -0
  73. pycfmodel-2.0.1/tests/resources/test_iam_user.py +48 -0
  74. pycfmodel-2.0.1/tests/resources/test_kms_key.py +190 -0
  75. pycfmodel-2.0.1/tests/resources/test_opensearch_domain.py +261 -0
  76. pycfmodel-2.0.1/tests/resources/test_rds_security_groups.py +45 -0
  77. pycfmodel-2.0.1/tests/resources/test_route53_record_set.py +164 -0
  78. pycfmodel-2.0.1/tests/resources/test_s3_bucket.py +116 -0
  79. pycfmodel-2.0.1/tests/resources/test_s3_bucket_policy.py +44 -0
  80. pycfmodel-2.0.1/tests/resources/test_security_group.py +27 -0
  81. pycfmodel-2.0.1/tests/resources/test_security_group_egress.py +68 -0
  82. pycfmodel-2.0.1/tests/resources/test_security_group_ingress.py +68 -0
  83. pycfmodel-2.0.1/tests/resources/test_sns_subscription.py +127 -0
  84. pycfmodel-2.0.1/tests/resources/test_sns_topic.py +84 -0
  85. pycfmodel-2.0.1/tests/resources/test_sns_topic_policy.py +49 -0
  86. pycfmodel-2.0.1/tests/resources/test_sqs_queue.py +85 -0
  87. pycfmodel-2.0.1/tests/resources/test_sqs_queue_policy.py +39 -0
  88. pycfmodel-2.0.1/tests/resources/test_wafv2_ip_set.py +96 -0
  89. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_cf_model.py +0 -1
  90. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_resolver.py +3 -3
  91. pycfmodel-2.0.1/tests/test_resource_generator.py +404 -0
  92. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_types.py +142 -13
  93. pycfmodel-2.0.1/uv.lock +1595 -0
  94. pycfmodel-1.2.0/pycfmodel/model/resources/es_domain.py +0 -61
  95. pycfmodel-1.2.0/pycfmodel/model/resources/opensearch_domain.py +0 -61
  96. pycfmodel-1.2.0/pycfmodel/model/resources/s3_bucket.py +0 -70
  97. pycfmodel-1.2.0/pycfmodel.egg-info/SOURCES.txt +0 -59
  98. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/LICENSE.md +0 -0
  99. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/__init__.py +0 -0
  100. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/action_expander.py +0 -0
  101. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/constants.py +0 -0
  102. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/base.py +0 -0
  103. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/cf_model.py +0 -0
  104. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/generic.py +0 -0
  105. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/parameter.py +0 -0
  106. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/generic_resource.py +0 -0
  107. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/iam_managed_policy.py +0 -0
  108. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/iam_policy.py +0 -0
  109. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/iam_role.py +0 -0
  110. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/policy.py +0 -0
  111. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/policy_document.py +0 -0
  112. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/property.py +0 -0
  113. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/security_group_egress_prop.py +0 -0
  114. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/security_group_ingress_prop.py +0 -0
  115. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/statement.py +0 -0
  116. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/statement_condition.py +0 -0
  117. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/tag.py +0 -0
  118. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/properties/types.py +0 -0
  119. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/resource.py +0 -0
  120. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/s3_bucket_policy.py +0 -0
  121. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/security_group.py +0 -0
  122. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/security_group_egress.py +0 -0
  123. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/security_group_ingress.py +0 -0
  124. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/sns_topic_policy.py +0 -0
  125. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/sqs_queue_policy.py +0 -0
  126. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/resources/wafv2_ip_set.py +0 -0
  127. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/model/utils.py +0 -0
  128. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/resolver.py +0 -0
  129. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel/utils.py +0 -0
  130. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel.egg-info/dependency_links.txt +0 -0
  131. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/pycfmodel.egg-info/top_level.txt +0 -0
  132. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/setup.cfg +0 -0
  133. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_action_expander.py +0 -0
  134. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_constants.py +0 -0
  135. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_generic.py +0 -0
  136. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_parameter.py +0 -0
  137. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_regexs.py +0 -0
  138. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_resource.py +0 -0
  139. {pycfmodel-1.2.0 → pycfmodel-2.0.1}/tests/test_utils.py +0 -0
@@ -0,0 +1,5 @@
1
+ [flake8]
2
+ max-line-length=120
3
+ # E203 and E501 are ours, the others are the default from flake
4
+ ignore = E121,E123,E126,E226,E24,E704,W503,W504,E203,E501
5
+ exclude = .git,__pycache__,venv
@@ -0,0 +1,21 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "pip" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "monthly"
12
+ open-pull-requests-limit: 1
13
+ cooldown:
14
+ default-days: 7
15
+ - package-ecosystem: "github-actions"
16
+ directory: "/"
17
+ schedule:
18
+ interval: "monthly"
19
+ open-pull-requests-limit: 1
20
+ cooldown:
21
+ default-days: 7
@@ -0,0 +1,8 @@
1
+ # Description
2
+
3
+ <!-- Please include a summary of the change. -->
4
+
5
+
6
+ ## Checklist
7
+
8
+ - [ ] I have updated the pyproject.toml
@@ -0,0 +1,22 @@
1
+ name-template: 'v$RESOLVED_VERSION'
2
+ tag-template: 'v$RESOLVED_VERSION'
3
+ change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
4
+ change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
5
+ version-resolver:
6
+ major:
7
+ labels:
8
+ - 'major'
9
+ minor:
10
+ labels:
11
+ - 'minor'
12
+ patch:
13
+ labels:
14
+ - 'patch'
15
+ default: patch
16
+ exclude-labels:
17
+ - 'skip-changelog'
18
+ - 'dependencies'
19
+ template: |
20
+ ## Changes
21
+
22
+ $CHANGES
@@ -0,0 +1,42 @@
1
+ name: "Copilot Setup Steps"
2
+
3
+ # Automatically run the setup steps when they are changed to allow for easy validation, and
4
+ # allow manual testing through the repository's "Actions" tab
5
+ on:
6
+ workflow_dispatch:
7
+ push:
8
+ paths:
9
+ - .github/workflows/copilot-setup-steps.yml
10
+ pull_request:
11
+ paths:
12
+ - .github/workflows/copilot-setup-steps.yml
13
+
14
+ jobs:
15
+ # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
16
+ copilot-setup-steps:
17
+ runs-on: ubuntu-latest
18
+
19
+ # Set the permissions to the lowest permissions possible needed for your steps.
20
+ # Copilot will be given its own token for its operations.
21
+ permissions:
22
+ # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete.
23
+ contents: read
24
+
25
+ # You can define any steps you want, and they will run before the agent starts.
26
+ # If you do not check out your code, Copilot will do this for you.
27
+ steps:
28
+ - name: Checkout code
29
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
30
+ with:
31
+ persist-credentials: false
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
35
+ with:
36
+ enable-cache: true
37
+
38
+ - name: Setup Python
39
+ run: uv python install 3.9
40
+
41
+ - name: Install development dependencies
42
+ run: make install-dev
@@ -0,0 +1,39 @@
1
+ name: Lint & Test
2
+
3
+ on: push
4
+
5
+ permissions: {}
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ python-version: ['3.9', '3.10', '3.11', '3.12']
15
+
16
+ name: Python ${{ matrix.python-version }}
17
+
18
+ steps:
19
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
20
+ with:
21
+ persist-credentials: false
22
+
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
25
+ with:
26
+ enable-cache: true
27
+
28
+ - name: Setup python
29
+ run: uv python install ${{ matrix.python-version }}
30
+
31
+ - run: make install-dev
32
+
33
+ - run: make lint
34
+
35
+ - run: make coverage
36
+ if: github.ref != 'refs/heads/master'
37
+
38
+ - run: make coverage-master
39
+ if: github.ref == 'refs/heads/master'
@@ -0,0 +1,37 @@
1
+ name: PyPI release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Upload release to PyPI
10
+ runs-on: ubuntu-latest
11
+ environment:
12
+ name: pypi
13
+ url: https://pypi.org/p/pycfmodel
14
+ permissions:
15
+ id-token: write
16
+ steps:
17
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
18
+ with:
19
+ persist-credentials: false
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
23
+ with:
24
+ enable-cache: false # Disable cache for release builds to prevent cache poisoning
25
+
26
+ - name: Setup python
27
+ run: uv python install 3.9
28
+
29
+ - name: Build package
30
+ run: uv build
31
+
32
+ - name: Publish distribution 📦 to PyPI
33
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
34
+ with:
35
+ # zizmor: ignore[use-trusted-publishing] https://github.com/pypi/warehouse/issues/17700
36
+ user: __token__
37
+ password: ${{ secrets.pypi_publish_token }}
@@ -0,0 +1,39 @@
1
+ name: Release Drafter
2
+
3
+ on:
4
+ push:
5
+ # branches to consider in the event; optional, defaults to all
6
+ branches:
7
+ - master
8
+ # pull_request event is required only for autolabeler
9
+ pull_request:
10
+ # Only following types are handled by the action, but one can default to all as well
11
+ types: [opened, reopened, synchronize]
12
+ # zizmor: ignore[dangerous-triggers] pull_request_target event is required for autolabeler to support PRs from forks
13
+ pull_request_target:
14
+ types: [opened, reopened, synchronize]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ update_release_draft:
21
+ permissions:
22
+ # write permission is required to create a github release
23
+ contents: write
24
+ # write permission is required for autolabeler
25
+ # otherwise, read permission is required at least
26
+ pull-requests: write
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ # Drafts your next Release notes as Pull Requests are merged into "master"
30
+ - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
31
+ id: app-token
32
+ with:
33
+ app-id: ${{ vars.GH_APP_ID }}
34
+ private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
35
+
36
+
37
+ - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
38
+ env:
39
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
@@ -0,0 +1,28 @@
1
+ name: Test Docs
2
+
3
+ on: push
4
+
5
+ permissions: {}
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+
11
+ name: Test Docs
12
+
13
+ steps:
14
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
15
+ with:
16
+ persist-credentials: false
17
+
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
20
+ with:
21
+ enable-cache: true
22
+
23
+ - name: Setup python
24
+ run: uv python install 3.9
25
+
26
+ - run: make install-docs
27
+
28
+ - run: make test-docs
@@ -0,0 +1,58 @@
1
+ name: Update CloudFormation Actions
2
+
3
+ on:
4
+ schedule:
5
+ # Run weekly on Monday at 9:00 UTC
6
+ - cron: '0 9 * * 1'
7
+ workflow_dispatch:
8
+
9
+ permissions: {}
10
+
11
+ jobs:
12
+ update-cloudformation-actions:
13
+ runs-on: ubuntu-latest
14
+
15
+ permissions:
16
+ contents: write
17
+ pull-requests: write
18
+
19
+ steps:
20
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
21
+ with:
22
+ persist-credentials: false
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5.4.1
26
+
27
+ - name: Setup python
28
+ run: uv python install 3.12
29
+
30
+ - name: Install dependencies
31
+ run: make install-cloudformation-update
32
+
33
+ - name: Generate CloudFormation actions file
34
+ run: make cloudformation-update
35
+
36
+ - name: Get current date
37
+ id: date
38
+ run: echo "date=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
39
+
40
+ - name: Generate GitHub App token
41
+ uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
42
+ id: app-token
43
+ with:
44
+ app-id: ${{ vars.GH_APP_ID }}
45
+ private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
46
+
47
+ - name: Create Pull Request
48
+ uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
49
+ with:
50
+ token: ${{ steps.app-token.outputs.token }}
51
+ commit-message: "Update CloudFormation actions"
52
+ title: "Update CloudFormation actions (${{ steps.date.outputs.date }})"
53
+ body: |
54
+ This PR updates the CloudFormation actions file with the latest actions from AWS.
55
+
56
+ Auto-generated by the update-cloudformation-actions workflow.
57
+ branch: update-cloudformation-actions-${{ steps.date.outputs.date }}
58
+ delete-branch: true
@@ -0,0 +1,25 @@
1
+ name: GitHub Actions Security Analysis with zizmor 🌈
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - "master"
7
+ pull_request:
8
+ branches:
9
+ - "**"
10
+
11
+ permissions: {}
12
+
13
+ jobs:
14
+ zizmor:
15
+ runs-on: ubuntu-24.04-2cores-tools-public
16
+ permissions:
17
+ security-events: write
18
+ steps:
19
+ - name: Checkout repository
20
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
21
+ with:
22
+ persist-credentials: false
23
+
24
+ - name: Run zizmor 🌈
25
+ uses: zizmorcore/zizmor-action@e639db99335bc9038abc0e066dfcd72e23d26fb4 # v0.3.0
@@ -0,0 +1,115 @@
1
+ .vscode/
2
+ .idea/
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # C extensions
10
+ *.so
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Django stuff:
58
+ *.log
59
+ local_settings.py
60
+ db.sqlite3
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # pyenv
79
+ .python-version
80
+
81
+ # celery beat schedule file
82
+ celerybeat-schedule
83
+
84
+ # SageMath parsed files
85
+ *.sage.py
86
+
87
+ # Environments
88
+ .env
89
+ .venv
90
+ env/
91
+ venv/
92
+ ENV/
93
+ env.bak/
94
+ venv.bak/
95
+
96
+ # Spyder project settings
97
+ .spyderproject
98
+ .spyproject
99
+
100
+ # Rope project settings
101
+ .ropeproject
102
+
103
+ # mkdocs documentation
104
+ /site
105
+
106
+ # MkDocs local builds
107
+ site/
108
+
109
+ # mypy
110
+ .mypy_cache/
111
+
112
+ .project
113
+
114
+ # Snyk Code
115
+ .dccache
@@ -0,0 +1,19 @@
1
+ version: 2
2
+
3
+ mkdocs:
4
+ configuration: mkdocs.yml
5
+
6
+ formats: all
7
+
8
+ build:
9
+ os: ubuntu-22.04
10
+ tools:
11
+ python: "3.9"
12
+
13
+ python:
14
+ install:
15
+ - method: pip
16
+ path: .
17
+ extra_requirements:
18
+ - dev
19
+ - docs