atlan-application-sdk 2.0.0__tar.gz → 2.1.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.
- atlan_application_sdk-2.1.0/.dockerignore +64 -0
- atlan_application_sdk-2.1.0/.github/actions/secure-build-push-apps/action.yaml +552 -0
- atlan_application_sdk-2.1.0/.github/release_notes.md +12 -0
- atlan_application_sdk-2.1.0/.github/workflows/build-image.yaml +98 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/CHANGELOG.md +14 -0
- atlan_application_sdk-2.1.0/Dockerfile +44 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/PKG-INFO +1 -1
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/common/sql_utils.py +6 -2
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/io/__init__.py +101 -6
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/io/json.py +68 -24
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/io/parquet.py +64 -8
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/observability.py +0 -7
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/objectstore.py +14 -1
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/version.py +1 -1
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/inputs.md +57 -19
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/getting-started.md +21 -2
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/pyproject.toml +1 -1
- atlan_application_sdk-2.1.0/tests/unit/activities/common/test_sql_utils.py +55 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/io/readers/test_json_reader.py +213 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/io/readers/test_parquet_reader.py +215 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/services/test_objectstore.py +73 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/uv.lock +1 -1
- atlan_application_sdk-2.0.0/.github/release_notes.md +0 -7
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/commits.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/documentation.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/exception-handling.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/guidelines.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/logging.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/performance.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/setup.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/standards.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.cursor/rules/testing.mdc +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.env.example +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/CODEOWNERS +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/docgen/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/doclint/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/docstring-coverage/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/e2e-apps/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/e2e-examples/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/setup-deps/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/sync-branches/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/trivy/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/trivy-container/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/actions/unit-tests/action.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/dependabot.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/pull_request_template.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/scripts/extract_release_notes.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/scripts/release.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/scripts/trivy-to-markdown.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/scripts/update_changelog.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/AMPM.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Accessibility.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Acronyms.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Adverbs.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Auto.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Avoid.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Contractions.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Dashes.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/DateFormat.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/DateNumbers.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/DateOrder.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Ellipses.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/FirstPerson.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Foreign.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Gender.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/GenderBias.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/GeneralURL.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/HeadingAcronyms.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/HeadingColons.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/HeadingPunctuation.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Headings.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Hyphens.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Negative.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Ordinal.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/OxfordComma.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Passive.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Percentages.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Plurals.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Quotes.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/RangeTime.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Semicolon.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/SentenceLength.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Spacing.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Suspended.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Terms.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/URLFormat.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Units.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Vocab.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/We.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/Wordiness.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/Microsoft/meta.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/config/vocabularies/deviations/accept.txt +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/styles/config/vocabularies/deviations/reject.txt +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/checks.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/checks.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/codeql.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/codeql.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/dependency-review.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/dependency-review.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/stale.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/stale.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/trivy-container.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/trivy-container.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/trivy.properties.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflow-templates/trivy.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/codeql.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/pull_request.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/push.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/release.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/scale-tests.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/schedule.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/tag-and-publish.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/trivy-container.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.github/workflows/verify-snyk-status.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.gitignore +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.pre-commit-config.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/.vscode/launch.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/CODE_OF_CONDUCT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/CONTRIBUTING.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/LICENSE +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/NOTICE +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/README.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/SECURITY.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/common/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/common/models.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/common/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/lock_management.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/metadata_extraction/base.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/metadata_extraction/rest.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/activities/query_extraction/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/application/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/application/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/atlan.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/atlan_auth.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/base.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/models.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/redis.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/temporal.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/clients/workflow.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/aws_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/error_codes.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/file_converter.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/types.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/common/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/constants.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/decorators/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/decorators/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/decorators/locks.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/decorators/mcp_tool.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/exporters/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/exporters/mkdocs.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/export/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/export/page.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/customer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/internal.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/metadata.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/page.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/models/manifest/section.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/parsers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/parsers/directory.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/docgen/parsers/manifest.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/handlers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/handlers/base.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/handlers/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/cleanup.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/correlation_context.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/events.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/lock.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/interceptors/models.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/io/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/context.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/decorators/observability_decorator.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/logger_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/metrics_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/traces_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/observability/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/middleware/logmiddleware.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/middleware/metrics.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/models.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/fastapi/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/mcp/models.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/server/mcp/server.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/atlan_storage.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/eventstore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/secretstore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/services/statestore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/e2e/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/e2e/base.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/e2e/client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/e2e/conftest.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/e2e/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/clients/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/clients/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/common/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/common/logger.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/handlers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_metadata.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/handlers/sql/sql_preflight.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/inputs/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/inputs/json_input.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/inputs/parquet_input.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/outputs/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/outputs/json_output.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/outputs/statestore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/server/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/server/fastapi/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/sql_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/hypothesis/strategies/temporal.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/README.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/config_loader.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/data_generator.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/driver.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/examples/config.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/output_handler/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/output_handler/base.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/output_handler/csv_handler.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/output_handler/json_handler.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/scale_data_generator/output_handler/parquet_handler.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/test_utils/workflow_monitoring.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/atlas/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/common/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/common/utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/column.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/database.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/extras-procedure.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/function.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/schema.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/table.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/transformers/query/templates/tag_attachment.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/worker.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/metadata_extraction/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/application_sdk/workflows/query_extraction/sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/README.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/atlan-storage.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/aws-secrets.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/configuration.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/deployment-secrets.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/eventstore.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/objectstore.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/secretstore.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/components/statestore.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/API.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/activities.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/application.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/application_sql.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/atlanupload.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/clients.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/common.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/handlers.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/mcp.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/output_paths.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/outputs.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/server.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/services.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/temporal_auth.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/worker.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/concepts/workflows.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/configuration.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/architecture.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/atlantis.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/best-practices.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/index.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/secretstores.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/sql-application-guide.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/guides/test-framework.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/index.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/setup/LINUX.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/setup/MAC.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/setup/WINDOWS.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/setup/troubleshooting.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/static/assets/logo.svg +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/static/images/phoenix-sdk-featureset.png +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/static/javascripts/mathjax.js +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/docs/static/stylesheets/extra.css +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/docs/mkdocs.yml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/README.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_custom_fastapi.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_fastapi.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_hello_world.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_sql_miner.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_sql_with_custom_pyatlan_transformer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/application_sql_with_custom_transformer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/run_examples.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/examples/sql_query_templates/database.yaml +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/.cursor/BUGBOT.md +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/conftest.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/common/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/common/test_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/metadata_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/test_activities.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/activities/test_lock_management.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/application/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/application/metadata_extraction/test_sql.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/application/test_application.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_async_sql_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_atlan_auth.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_atlan_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_atlanauth.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_base_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_redis_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_sql_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/clients/test_temporal_client.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/common/test_aws_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/common/test_credential_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/common/test_file_converter.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/common/test_utils.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/common/test_utils_file_discovery.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/decorators/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/decorators/test_mcp_tool.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/docgen/parsers/test_directory_parser.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/docgen/parsers/test_manifest_parser.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_auth.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_check_schemas_and_databases.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_extract_allowed_schemas.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_metadata.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_preflight_check.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_prepare_metadata.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_tables_check.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/sql/test_validate_filters.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/handlers/test_base_handler.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/interceptors/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/interceptors/test_correlation_context.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/io/test_base_io.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/io/writers/test_json_writer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/io/writers/test_parquet_writer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/observability/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/observability/test_logger_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/observability/test_metrics_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/observability/test_traces_adaptor.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/fastapi/routers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/fastapi/routers/server.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/fastapi/test_fastapi.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/mcp/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/server/mcp/test_mcp_server.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/services/test_atlan_storage.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/services/test_eventstore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/services/test_statestore.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/test_worker.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_columns.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_databases.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_functions.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_procedures.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_schemas.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/raw_tables.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_columns.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_databases.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_functions.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_procedures.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_schemas.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/resources/transformed_tables.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_column.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_database.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_function.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_procedure.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_schema.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/atlas/test_table.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/column.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/database.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/extras-procedure.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/function.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/schema.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/raw/table.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/column.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/database.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/extras-procedure.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/function.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/schema.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/resources/transformed/table.json +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/test_sql_transformer.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/transformers/query/test_sql_transformer_output_validation.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/workflows/metadata_extraction/test_sql_workflow.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/workflows/query_extraction/__init__.py +0 -0
- {atlan_application_sdk-2.0.0 → atlan_application_sdk-2.1.0}/tests/unit/workflows/query_extraction/test_sql.py +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Git files
|
|
2
|
+
.git
|
|
3
|
+
.gitignore
|
|
4
|
+
.gitattributes
|
|
5
|
+
|
|
6
|
+
# Documentation
|
|
7
|
+
docs/
|
|
8
|
+
*.md
|
|
9
|
+
!README.md
|
|
10
|
+
|
|
11
|
+
# Test files
|
|
12
|
+
tests/
|
|
13
|
+
*.pyc
|
|
14
|
+
__pycache__/
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.coverage
|
|
17
|
+
htmlcov/
|
|
18
|
+
.hypothesis/
|
|
19
|
+
|
|
20
|
+
# Development files
|
|
21
|
+
.local/
|
|
22
|
+
.venv/
|
|
23
|
+
venv/
|
|
24
|
+
env/
|
|
25
|
+
.env
|
|
26
|
+
.env.local
|
|
27
|
+
|
|
28
|
+
# IDE files
|
|
29
|
+
.vscode/
|
|
30
|
+
.idea/
|
|
31
|
+
*.swp
|
|
32
|
+
*.swo
|
|
33
|
+
*~
|
|
34
|
+
|
|
35
|
+
# Build artifacts
|
|
36
|
+
build/
|
|
37
|
+
dist/
|
|
38
|
+
*.egg-info/
|
|
39
|
+
.eggs/
|
|
40
|
+
|
|
41
|
+
# CI/CD
|
|
42
|
+
.github/
|
|
43
|
+
|
|
44
|
+
# Local development
|
|
45
|
+
local/
|
|
46
|
+
temporal.db
|
|
47
|
+
*.db
|
|
48
|
+
*.db-shm
|
|
49
|
+
*.db-wal
|
|
50
|
+
|
|
51
|
+
# Examples (not needed in base image)
|
|
52
|
+
examples/
|
|
53
|
+
|
|
54
|
+
# Components (not needed in base image)
|
|
55
|
+
components/
|
|
56
|
+
|
|
57
|
+
# Note: uv.lock is needed by Dockerfile for uv sync --locked
|
|
58
|
+
# Keep it in build context (don't exclude it)
|
|
59
|
+
|
|
60
|
+
# Other
|
|
61
|
+
.DS_Store
|
|
62
|
+
*.log
|
|
63
|
+
*.tmp
|
|
64
|
+
|
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
name: 'Composite Build, Snyk/Trivy Scan, and Push'
|
|
2
|
+
description: 'A drop-in replacement for docker/build-push-action that adds mandatory Snyk and Trivy scans before pushing.'
|
|
3
|
+
|
|
4
|
+
#==================================================================
|
|
5
|
+
# == INPUTS ==
|
|
6
|
+
#==================================================================
|
|
7
|
+
inputs:
|
|
8
|
+
# == Custom inputs for this action's logic ==
|
|
9
|
+
branch:
|
|
10
|
+
description: "The current branch name (e.g., from github.ref_name)."
|
|
11
|
+
required: true
|
|
12
|
+
push:
|
|
13
|
+
description: "Set to 'true' to attempt a push after a successful scan."
|
|
14
|
+
required: false
|
|
15
|
+
default: 'false'
|
|
16
|
+
snyk-token:
|
|
17
|
+
description: 'Token for Snyk authentication.'
|
|
18
|
+
required: true
|
|
19
|
+
snyk-ghcr-integration-id:
|
|
20
|
+
description: 'Snyk Integration ID for GitHub Container Registry.'
|
|
21
|
+
required: true
|
|
22
|
+
snyk-docker-integration-id:
|
|
23
|
+
description: 'Snyk Integration ID for Docker Hub.'
|
|
24
|
+
required: true
|
|
25
|
+
snyk-integration-id:
|
|
26
|
+
description: 'Default Snyk Integration ID.'
|
|
27
|
+
required: true
|
|
28
|
+
snyk-org-id:
|
|
29
|
+
description: 'Snyk Organization ID.'
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
# == Complete list of inputs from docker/build-push-action ==
|
|
33
|
+
add-hosts:
|
|
34
|
+
description: 'List of custom host-to-IP mappings (host:ip).'
|
|
35
|
+
required: false
|
|
36
|
+
allow:
|
|
37
|
+
description: 'List of extra privileged entitlement (e.g., network.host,security.insecure).'
|
|
38
|
+
required: false
|
|
39
|
+
annotations:
|
|
40
|
+
description: 'List of OCI annotations to set on the image.'
|
|
41
|
+
required: false
|
|
42
|
+
attests:
|
|
43
|
+
description: 'List of attestations to generate (e.g., type=sbom,generator=image).'
|
|
44
|
+
required: false
|
|
45
|
+
build-args:
|
|
46
|
+
description: 'List of build-time variables.'
|
|
47
|
+
required: false
|
|
48
|
+
build-contexts:
|
|
49
|
+
description: 'List of additional build contexts (e.g., name=path).'
|
|
50
|
+
required: false
|
|
51
|
+
builder:
|
|
52
|
+
description: 'Builder instance to use.'
|
|
53
|
+
required: false
|
|
54
|
+
cache-from:
|
|
55
|
+
description: 'List of external cache sources.'
|
|
56
|
+
required: false
|
|
57
|
+
default: 'type=gha'
|
|
58
|
+
cache-to:
|
|
59
|
+
description: 'List of cache export destinations.'
|
|
60
|
+
required: false
|
|
61
|
+
default: 'type=gha,mode=min'
|
|
62
|
+
cgroup-parent:
|
|
63
|
+
description: 'Optional parent cgroup for the container.'
|
|
64
|
+
required: false
|
|
65
|
+
context:
|
|
66
|
+
description: 'Path to the build context.'
|
|
67
|
+
required: false
|
|
68
|
+
default: '.'
|
|
69
|
+
file:
|
|
70
|
+
description: 'Path to the Dockerfile.'
|
|
71
|
+
required: false
|
|
72
|
+
github-token:
|
|
73
|
+
description: 'GitHub token for authentication.'
|
|
74
|
+
required: false
|
|
75
|
+
labels:
|
|
76
|
+
description: 'List of metadata labels to apply to the image.'
|
|
77
|
+
required: false
|
|
78
|
+
load:
|
|
79
|
+
description: 'Load is a shorthand for --output=type=docker.'
|
|
80
|
+
required: false
|
|
81
|
+
default: 'false'
|
|
82
|
+
network:
|
|
83
|
+
description: 'Set the networking mode for the RUN instructions during build.'
|
|
84
|
+
required: false
|
|
85
|
+
no-cache:
|
|
86
|
+
description: 'Do not use cache when building the image.'
|
|
87
|
+
required: false
|
|
88
|
+
default: 'false'
|
|
89
|
+
no-cache-filters:
|
|
90
|
+
description: 'Do not cache specified stages.'
|
|
91
|
+
required: false
|
|
92
|
+
outputs:
|
|
93
|
+
description: 'List of output destinations (format: type=local,dest=path).'
|
|
94
|
+
required: false
|
|
95
|
+
platforms:
|
|
96
|
+
description: 'List of target platforms for build.'
|
|
97
|
+
required: false
|
|
98
|
+
provenance:
|
|
99
|
+
description: 'Generate provenance attestation for the build.'
|
|
100
|
+
required: false
|
|
101
|
+
pull:
|
|
102
|
+
description: 'Always attempt to pull all referenced images.'
|
|
103
|
+
required: false
|
|
104
|
+
default: 'false'
|
|
105
|
+
sbom:
|
|
106
|
+
description: 'Generate SBOM attestation for the build (shorthand for --attest=type=sbom).'
|
|
107
|
+
required: false
|
|
108
|
+
secrets:
|
|
109
|
+
description: 'List of secrets to expose to the build.'
|
|
110
|
+
required: false
|
|
111
|
+
secret-envs:
|
|
112
|
+
description: 'List of secret environment variables to expose to the build (e.g., MY_SECRET=MY_SECRET_VAR).'
|
|
113
|
+
required: false
|
|
114
|
+
shm-size:
|
|
115
|
+
description: 'Size of /dev/shm (e.g., 2g).'
|
|
116
|
+
required: false
|
|
117
|
+
ssh:
|
|
118
|
+
description: 'List of SSH agent sockets or keys to expose to the build.'
|
|
119
|
+
required: false
|
|
120
|
+
tags:
|
|
121
|
+
description: 'List of tags for the Docker image.'
|
|
122
|
+
required: true
|
|
123
|
+
target:
|
|
124
|
+
description: 'Sets the target stage to build.'
|
|
125
|
+
required: false
|
|
126
|
+
ulimit:
|
|
127
|
+
description: 'Ulimit options (e.g., nofile=1024:1024).'
|
|
128
|
+
required: false
|
|
129
|
+
|
|
130
|
+
#==================================================================
|
|
131
|
+
# == OUTPUTS ==
|
|
132
|
+
#==================================================================
|
|
133
|
+
outputs:
|
|
134
|
+
scan-passed:
|
|
135
|
+
description: "'true' if both scans found zero critical/high vulnerabilities, otherwise 'false'."
|
|
136
|
+
value: ${{ steps.decision.outputs.result }}
|
|
137
|
+
snyk-critical-count:
|
|
138
|
+
description: "Number of critical vulnerabilities found by Snyk."
|
|
139
|
+
value: ${{ steps.parse_snyk.outputs.critical-count }}
|
|
140
|
+
snyk-high-count:
|
|
141
|
+
description: "Number of high vulnerabilities found by Snyk."
|
|
142
|
+
value: ${{ steps.parse_snyk.outputs.high-count }}
|
|
143
|
+
trivy-critical-count:
|
|
144
|
+
description: "Number of critical vulnerabilities found by Trivy."
|
|
145
|
+
value: ${{ steps.parse_trivy.outputs.critical-count }}
|
|
146
|
+
trivy-high-count:
|
|
147
|
+
description: "Number of high vulnerabilities found by Trivy."
|
|
148
|
+
value: ${{ steps.parse_trivy.outputs.high-count }}
|
|
149
|
+
|
|
150
|
+
#==================================================================
|
|
151
|
+
# == EXECUTION LOGIC ==
|
|
152
|
+
#==================================================================
|
|
153
|
+
runs:
|
|
154
|
+
using: "composite"
|
|
155
|
+
steps:
|
|
156
|
+
- name: Configure Scan Policies
|
|
157
|
+
id: config
|
|
158
|
+
shell: bash
|
|
159
|
+
env:
|
|
160
|
+
SNYK_GHCR_INTEGRATION_ID: ${{ inputs.snyk-ghcr-integration-id }}
|
|
161
|
+
SNYK_DOCKER_INTEGRATION_ID: ${{ inputs.snyk-docker-integration-id }}
|
|
162
|
+
SNYK_INTEGRATION_ID: ${{ inputs.snyk-integration-id }}
|
|
163
|
+
SNYK_ORG_ID: ${{ inputs.snyk-org-id }}
|
|
164
|
+
run: |
|
|
165
|
+
# =================================================================
|
|
166
|
+
# == 🛡️ ADMIN CONFIGURATION SECTION ==
|
|
167
|
+
# =================================================================
|
|
168
|
+
#
|
|
169
|
+
# ENFORCEMENT_MODE:
|
|
170
|
+
# 'true': Fail the build if vulnerabilities are found at the
|
|
171
|
+
# specified severity. The image will NOT be pushed.
|
|
172
|
+
# 'false': Act in "Feedback Mode". Always allow the push and
|
|
173
|
+
# never fail the build, but still report vulnerabilities.
|
|
174
|
+
#
|
|
175
|
+
ENFORCEMENT_MODE='false'
|
|
176
|
+
|
|
177
|
+
# SEVERITY_THRESHOLD:
|
|
178
|
+
# Comma-separated list of severities to scan for and fail on
|
|
179
|
+
# when in enforcement mode.
|
|
180
|
+
# Examples: 'CRITICAL', 'CRITICAL,HIGH', 'CRITICAL,HIGH,MEDIUM'
|
|
181
|
+
#
|
|
182
|
+
SEVERITY_THRESHOLD='CRITICAL,HIGH'
|
|
183
|
+
#
|
|
184
|
+
# =================================================================
|
|
185
|
+
|
|
186
|
+
# ⭐ SNYK INTEGRATION ID MAPPING (from GitHub Secrets)
|
|
187
|
+
# Map registry hostnames to their Snyk Integration IDs.
|
|
188
|
+
# The script will automatically select the correct ID based on the image tag.
|
|
189
|
+
# - Use 'default' for Docker Hub or images without a full domain.
|
|
190
|
+
# - Add new entries for other registries as needed.
|
|
191
|
+
#
|
|
192
|
+
SNYK_INTEGRATION_IDS="
|
|
193
|
+
ghcr.io=${SNYK_GHCR_INTEGRATION_ID}
|
|
194
|
+
docker.io=${SNYK_DOCKER_INTEGRATION_ID}
|
|
195
|
+
default=${SNYK_INTEGRATION_ID}
|
|
196
|
+
"
|
|
197
|
+
#
|
|
198
|
+
# =================================================================
|
|
199
|
+
|
|
200
|
+
echo "ENFORCEMENT_MODE=$ENFORCEMENT_MODE" >> $GITHUB_OUTPUT
|
|
201
|
+
echo "SEVERITY_THRESHOLD=$SEVERITY_THRESHOLD" >> $GITHUB_OUTPUT
|
|
202
|
+
echo "SNYK_ORG_ID=$SNYK_ORG_ID" >> $GITHUB_OUTPUT
|
|
203
|
+
echo "SNYK_INTEGRATION_IDS<<EOF" >> $GITHUB_OUTPUT
|
|
204
|
+
echo "$SNYK_INTEGRATION_IDS" >> $GITHUB_OUTPUT
|
|
205
|
+
echo "EOF" >> $GITHUB_OUTPUT
|
|
206
|
+
|
|
207
|
+
# Snyk's '--severity-threshold' flag requires the LOWEST severity you want to see.
|
|
208
|
+
# This logic finds the last severity in the list (assuming CRITICAL,HIGH,MEDIUM order).
|
|
209
|
+
SNYK_LOWEST_SEVERITY=$(echo "$SEVERITY_THRESHOLD" | awk -F, '{print $NF}' | tr '[:upper:]' '[:lower:]')
|
|
210
|
+
echo "SNYK_SEVERITY_ARGS=--severity-threshold=$SNYK_LOWEST_SEVERITY" >> $GITHUB_OUTPUT
|
|
211
|
+
|
|
212
|
+
- name: Set up Docker Buildx
|
|
213
|
+
uses: docker/setup-buildx-action@v3
|
|
214
|
+
|
|
215
|
+
- name: Build single-platform image for scanning
|
|
216
|
+
id: build_for_scan
|
|
217
|
+
uses: docker/build-push-action@v6
|
|
218
|
+
with:
|
|
219
|
+
# Pass all inputs from the caller to the build action
|
|
220
|
+
add-hosts: ${{ inputs.add-hosts }}
|
|
221
|
+
allow: ${{ inputs.allow }}
|
|
222
|
+
annotations: ${{ inputs.annotations }}
|
|
223
|
+
attests: ${{ inputs.attests }}
|
|
224
|
+
build-args: ${{ inputs.build-args }}
|
|
225
|
+
build-contexts: ${{ inputs.build-contexts }}
|
|
226
|
+
builder: ${{ inputs.builder }}
|
|
227
|
+
cache-from: ${{ inputs.cache-from }}
|
|
228
|
+
# Cache is exported here
|
|
229
|
+
cache-to: ${{ inputs.cache-to }}
|
|
230
|
+
cgroup-parent: ${{ inputs.cgroup-parent }}
|
|
231
|
+
context: ${{ inputs.context }}
|
|
232
|
+
file: ${{ inputs.file }}
|
|
233
|
+
github-token: ${{ inputs.github-token }}
|
|
234
|
+
labels: ${{ inputs.labels }}
|
|
235
|
+
network: ${{ inputs.network }}
|
|
236
|
+
no-cache: ${{ inputs.no-cache }}
|
|
237
|
+
no-cache-filters: ${{ inputs.no-cache-filters }}
|
|
238
|
+
outputs: ${{ inputs.outputs }}
|
|
239
|
+
# Build only for the runner's native platform for scanning
|
|
240
|
+
platforms: linux/amd64
|
|
241
|
+
provenance: ${{ inputs.provenance }}
|
|
242
|
+
pull: ${{ inputs.pull }}
|
|
243
|
+
sbom: ${{ inputs.sbom }}
|
|
244
|
+
secrets: ${{ inputs.secrets }}
|
|
245
|
+
secret-envs: ${{ inputs.secret-envs }}
|
|
246
|
+
secret-files: ${{ inputs.secret-files }}
|
|
247
|
+
shm-size: ${{ inputs.shm-size }}
|
|
248
|
+
ssh: ${{ inputs.ssh }}
|
|
249
|
+
tags: ${{ inputs.tags }}
|
|
250
|
+
target: ${{ inputs.target }}
|
|
251
|
+
ulimit: ${{ inputs.ulimit }}
|
|
252
|
+
# Load the image for the scanners to use
|
|
253
|
+
load: true
|
|
254
|
+
push: false
|
|
255
|
+
|
|
256
|
+
- name: Run Snyk Scan to Generate Report
|
|
257
|
+
id: snyk_scan
|
|
258
|
+
continue-on-error: true
|
|
259
|
+
uses: snyk/actions/docker@0.4.0
|
|
260
|
+
env:
|
|
261
|
+
SNYK_TOKEN: ${{ inputs.snyk-token }}
|
|
262
|
+
SNYK_API: 'https://api.us.snyk.io'
|
|
263
|
+
with:
|
|
264
|
+
image: ${{ inputs.tags }}
|
|
265
|
+
args: ${{ steps.config.outputs.SNYK_SEVERITY_ARGS }} --json-file-output=snyk-results.json
|
|
266
|
+
|
|
267
|
+
# - name: DEBUG - Validate Snyk JSON
|
|
268
|
+
# if: always()
|
|
269
|
+
# shell: bash
|
|
270
|
+
# run: |
|
|
271
|
+
# echo "Validating snyk-results.json syntax..."
|
|
272
|
+
# jq . snyk-results.json || echo "JQ validation failed: The JSON is malformed."
|
|
273
|
+
|
|
274
|
+
# - name: DEBUG - Show Snyk JSON Content
|
|
275
|
+
# if: always()
|
|
276
|
+
# shell: bash
|
|
277
|
+
# run: |
|
|
278
|
+
# echo "--- Start of snyk-results.json ---"
|
|
279
|
+
# cat snyk-results.json
|
|
280
|
+
# echo "--- End of snyk-results.json ---"
|
|
281
|
+
|
|
282
|
+
- name: Parse Snyk Results
|
|
283
|
+
id: parse_snyk
|
|
284
|
+
shell: bash
|
|
285
|
+
run: |
|
|
286
|
+
if [ ! -f snyk-results.json ]; then
|
|
287
|
+
echo "Snyk scan failed to produce a report file. See 'Run Snyk Scan' step for details."
|
|
288
|
+
exit 1
|
|
289
|
+
fi
|
|
290
|
+
|
|
291
|
+
# CORRECTED: This jq query safely combines OS and all application vulnerabilities before processing.
|
|
292
|
+
CRITICAL_COUNT=$(jq '((.vulnerabilities // []) + ([.applications[]?.vulnerabilities // []] | flatten)) | map(select(.severity == "critical")) | unique_by(.id) | length' snyk-results.json)
|
|
293
|
+
HIGH_COUNT=$(jq '((.vulnerabilities // []) + ([.applications[]?.vulnerabilities // []] | flatten)) | map(select(.severity == "high")) | unique_by(.id) | length' snyk-results.json)
|
|
294
|
+
MEDIUM_COUNT=$(jq '((.vulnerabilities // []) + ([.applications[]?.vulnerabilities // []] | flatten)) | map(select(.severity == "medium")) | unique_by(.id) | length' snyk-results.json)
|
|
295
|
+
|
|
296
|
+
echo "Snyk Found: $CRITICAL_COUNT critical, $HIGH_COUNT high, $MEDIUM_COUNT medium vulnerabilities."
|
|
297
|
+
|
|
298
|
+
echo "critical-count=$CRITICAL_COUNT" >> $GITHUB_OUTPUT
|
|
299
|
+
echo "high-count=$HIGH_COUNT" >> $GITHUB_OUTPUT
|
|
300
|
+
echo "medium-count=$MEDIUM_COUNT" >> $GITHUB_OUTPUT
|
|
301
|
+
|
|
302
|
+
#Faced issues with Trivy not able to handle multi line inputs for image tags. Snyk handles this directly
|
|
303
|
+
- name: Extract Primary Image Tag for Scans
|
|
304
|
+
id: extract_tag
|
|
305
|
+
shell: bash
|
|
306
|
+
run: |
|
|
307
|
+
# Read the first line of the multi-line tags input
|
|
308
|
+
PRIMARY_TAG=$(echo "${{ inputs.tags }}" | head -n 1)
|
|
309
|
+
echo "primary_tag=$PRIMARY_TAG" >> $GITHUB_OUTPUT
|
|
310
|
+
|
|
311
|
+
- name: Run Trivy Scan
|
|
312
|
+
id: trivy_scan
|
|
313
|
+
uses: aquasecurity/trivy-action@0.24.0
|
|
314
|
+
with:
|
|
315
|
+
# UPDATED: Use the single, primary tag from the step above
|
|
316
|
+
image-ref: ${{ steps.extract_tag.outputs.primary_tag }}
|
|
317
|
+
format: 'json'
|
|
318
|
+
output: 'trivy-results.json'
|
|
319
|
+
severity: ${{ steps.config.outputs.SEVERITY_THRESHOLD }}
|
|
320
|
+
ignore-unfixed: true
|
|
321
|
+
exit-code: '0'
|
|
322
|
+
|
|
323
|
+
- name: Display Trivy Scan Results
|
|
324
|
+
if: always()
|
|
325
|
+
shell: bash
|
|
326
|
+
run: |
|
|
327
|
+
echo "Displaying full vulnerability report from trivy-results.json:"
|
|
328
|
+
jq '.' trivy-results.json
|
|
329
|
+
|
|
330
|
+
- name: Parse Trivy Results
|
|
331
|
+
id: parse_trivy
|
|
332
|
+
shell: bash
|
|
333
|
+
run: |
|
|
334
|
+
# Now we parse all severities, not just critical and high
|
|
335
|
+
CRITICAL_COUNT=$(jq '[.Results[].Vulnerabilities[]? | select(.Severity == "CRITICAL")] | length' trivy-results.json)
|
|
336
|
+
HIGH_COUNT=$(jq '[.Results[].Vulnerabilities[]? | select(.Severity == "HIGH")] | length' trivy-results.json)
|
|
337
|
+
MEDIUM_COUNT=$(jq '[.Results[].Vulnerabilities[]? | select(.Severity == "MEDIUM")] | length' trivy-results.json)
|
|
338
|
+
echo "Trivy Found: $CRITICAL_COUNT critical, $HIGH_COUNT high, $MEDIUM_COUNT medium vulnerabilities."
|
|
339
|
+
echo "critical-count=$CRITICAL_COUNT" >> $GITHUB_OUTPUT
|
|
340
|
+
echo "high-count=$HIGH_COUNT" >> $GITHUB_OUTPUT
|
|
341
|
+
echo "medium-count=$MEDIUM_COUNT" >> $GITHUB_OUTPUT
|
|
342
|
+
|
|
343
|
+
- name: Make Final Decision
|
|
344
|
+
id: decision
|
|
345
|
+
shell: bash
|
|
346
|
+
env:
|
|
347
|
+
ENFORCEMENT_MODE: ${{ steps.config.outputs.ENFORCEMENT_MODE }}
|
|
348
|
+
SEVERITY_THRESHOLD: ${{ steps.config.outputs.SEVERITY_THRESHOLD }}
|
|
349
|
+
SNYK_CRITICAL: ${{ steps.parse_snyk.outputs.critical-count }}
|
|
350
|
+
SNYK_HIGH: ${{ steps.parse_snyk.outputs.high-count }}
|
|
351
|
+
SNYK_MEDIUM: ${{ steps.parse_snyk.outputs.medium-count }}
|
|
352
|
+
TRIVY_CRITICAL: ${{ steps.parse_trivy.outputs.critical-count }}
|
|
353
|
+
TRIVY_HIGH: ${{ steps.parse_trivy.outputs.high-count }}
|
|
354
|
+
TRIVY_MEDIUM: ${{ steps.parse_trivy.outputs.medium-count }}
|
|
355
|
+
run: |
|
|
356
|
+
echo "Enforcement Mode: $ENFORCEMENT_MODE"
|
|
357
|
+
echo "Failing on severities: $SEVERITY_THRESHOLD"
|
|
358
|
+
|
|
359
|
+
VULNS_FOUND=0
|
|
360
|
+
if [[ "$SEVERITY_THRESHOLD" == *"CRITICAL"* && ($SNYK_CRITICAL -gt 0 || $TRIVY_CRITICAL -gt 0) ]]; then
|
|
361
|
+
echo "CRITICAL vulnerabilities found."
|
|
362
|
+
VULNS_FOUND=1
|
|
363
|
+
fi
|
|
364
|
+
if [[ "$SEVERITY_THRESHOLD" == *"HIGH"* && ($SNYK_HIGH -gt 0 || $TRIVY_HIGH -gt 0) ]]; then
|
|
365
|
+
echo "HIGH vulnerabilities found."
|
|
366
|
+
VULNS_FOUND=1
|
|
367
|
+
fi
|
|
368
|
+
if [[ "$SEVERITY_THRESHOLD" == *"MEDIUM"* && ($SNYK_MEDIUM -gt 0 || $TRIVY_MEDIUM -gt 0) ]]; then
|
|
369
|
+
echo "MEDIUM vulnerabilities found."
|
|
370
|
+
VULNS_FOUND=1
|
|
371
|
+
fi
|
|
372
|
+
|
|
373
|
+
if [[ "$ENFORCEMENT_MODE" == "true" && $VULNS_FOUND -eq 1 ]]; then
|
|
374
|
+
echo "❌ Scans failed in ENFORCEMENT mode. Vulnerabilities found at or above threshold."
|
|
375
|
+
echo "result=false" >> $GITHUB_OUTPUT
|
|
376
|
+
exit 1
|
|
377
|
+
else
|
|
378
|
+
if [[ $VULNS_FOUND -eq 1 ]]; then
|
|
379
|
+
echo "⚠️ Vulnerabilities found, but continuing in FEEDBACK mode."
|
|
380
|
+
else
|
|
381
|
+
echo "✅ All scans passed."
|
|
382
|
+
fi
|
|
383
|
+
echo "result=true" >> $GITHUB_OUTPUT
|
|
384
|
+
fi
|
|
385
|
+
|
|
386
|
+
- name: Cleanup loaded scanning image
|
|
387
|
+
shell: bash
|
|
388
|
+
run: |
|
|
389
|
+
PRIMARY_TAG=$(echo "${{ inputs.tags }}" | head -n 1)
|
|
390
|
+
docker rmi "$PRIMARY_TAG" || true
|
|
391
|
+
|
|
392
|
+
- name: Build and Push multi-platform image
|
|
393
|
+
id: docker_push
|
|
394
|
+
if: ${{ steps.decision.outputs.result == 'true' }}
|
|
395
|
+
uses: docker/build-push-action@v6
|
|
396
|
+
with:
|
|
397
|
+
# Pass all relevant inputs again for the final push
|
|
398
|
+
add-hosts: ${{ inputs.add-hosts }}
|
|
399
|
+
allow: ${{ inputs.allow }}
|
|
400
|
+
annotations: ${{ inputs.annotations }}
|
|
401
|
+
attests: ${{ inputs.attests }}
|
|
402
|
+
build-args: ${{ inputs.build-args }}
|
|
403
|
+
build-contexts: ${{ inputs.build-contexts }}
|
|
404
|
+
builder: ${{ inputs.builder }}
|
|
405
|
+
# Cache is imported here
|
|
406
|
+
cache-from: ${{ inputs.cache-from }}
|
|
407
|
+
cache-to: ${{ inputs.cache-to }}
|
|
408
|
+
cgroup-parent: ${{ inputs.cgroup-parent }}
|
|
409
|
+
context: ${{ inputs.context }}
|
|
410
|
+
file: ${{ inputs.file }}
|
|
411
|
+
github-token: ${{ inputs.github-token }}
|
|
412
|
+
labels: ${{ inputs.labels }}
|
|
413
|
+
network: ${{ inputs.network }}
|
|
414
|
+
no-cache: ${{ inputs.no-cache }}
|
|
415
|
+
# CORRECTED
|
|
416
|
+
no-cache-filters: ${{ inputs.no-cache-filters }}
|
|
417
|
+
outputs: ${{ inputs.outputs }}
|
|
418
|
+
# Use the platforms the developer originally requested
|
|
419
|
+
platforms: ${{ inputs.platforms }}
|
|
420
|
+
provenance: ${{ inputs.provenance }}
|
|
421
|
+
pull: ${{ inputs.pull }}
|
|
422
|
+
# NEW
|
|
423
|
+
sbom: ${{ inputs.sbom }}
|
|
424
|
+
secrets: ${{ inputs.secrets }}
|
|
425
|
+
# NEW
|
|
426
|
+
secret-envs: ${{ inputs.secret-envs }}
|
|
427
|
+
secret-files: ${{ inputs.secret-files }}
|
|
428
|
+
shm-size: ${{ inputs.shm-size }}
|
|
429
|
+
ssh: ${{ inputs.ssh }}
|
|
430
|
+
tags: ${{ inputs.tags }}
|
|
431
|
+
target: ${{ inputs.target }}
|
|
432
|
+
ulimit: ${{ inputs.ulimit }}
|
|
433
|
+
push: ${{ inputs.push }}
|
|
434
|
+
load: ${{ inputs.load }}
|
|
435
|
+
|
|
436
|
+
- name: Import or Monitor Image in Snyk
|
|
437
|
+
if: ${{ steps.docker_push.outcome == 'success' && inputs.push == 'true' && (inputs.branch == 'main' || inputs.branch == 'master') }}
|
|
438
|
+
shell: bash
|
|
439
|
+
env:
|
|
440
|
+
SNYK_TOKEN: ${{ inputs.snyk-token }}
|
|
441
|
+
SNYK_API: 'https://api.us.snyk.io'
|
|
442
|
+
SNYK_INTEGRATION_IDS: ${{ steps.config.outputs.SNYK_INTEGRATION_IDS }}
|
|
443
|
+
SNYK_ORG_ID: ${{ steps.config.outputs.SNYK_ORG_ID }}
|
|
444
|
+
run: |
|
|
445
|
+
set -euo pipefail
|
|
446
|
+
|
|
447
|
+
# Write metadata to temp file to avoid shell quoting issues
|
|
448
|
+
TEMP_METADATA=$(mktemp)
|
|
449
|
+
cat > "$TEMP_METADATA" << 'METADATA_EOF'
|
|
450
|
+
${{ steps.docker_push.outputs.metadata }}
|
|
451
|
+
METADATA_EOF
|
|
452
|
+
|
|
453
|
+
# Verify the temp file has content
|
|
454
|
+
if [ ! -s "$TEMP_METADATA" ]; then
|
|
455
|
+
echo "❌ Build metadata was not found. Cannot import to Snyk."
|
|
456
|
+
rm -f "$TEMP_METADATA"
|
|
457
|
+
exit 1
|
|
458
|
+
fi
|
|
459
|
+
|
|
460
|
+
# Parse image name from the temp file
|
|
461
|
+
TARGET_IMAGES_LIST=$(jq -r '.["image.name"]' "$TEMP_METADATA")
|
|
462
|
+
rm -f "$TEMP_METADATA"
|
|
463
|
+
|
|
464
|
+
if [ -z "$TARGET_IMAGES_LIST" ] || [ "$TARGET_IMAGES_LIST" = "null" ]; then
|
|
465
|
+
echo "❌ Could not extract image name from build metadata."
|
|
466
|
+
exit 1
|
|
467
|
+
fi
|
|
468
|
+
|
|
469
|
+
# Find the first image that has a Snyk integration
|
|
470
|
+
SELECTED_IMAGE=""
|
|
471
|
+
SNYK_INTEGRATION_ID=""
|
|
472
|
+
REGISTRY_KEY=""
|
|
473
|
+
|
|
474
|
+
# Convert comma-separated list to array and check each image
|
|
475
|
+
IFS=',' read -ra IMAGES <<< "$TARGET_IMAGES_LIST"
|
|
476
|
+
for image in "${IMAGES[@]}"; do
|
|
477
|
+
echo "🔍 Checking image: $image"
|
|
478
|
+
|
|
479
|
+
# Check if this image matches any integration
|
|
480
|
+
while IFS='=' read -r key value; do
|
|
481
|
+
if [[ -n "$key" && "$image" == *"$key"* ]]; then
|
|
482
|
+
SELECTED_IMAGE="$image"
|
|
483
|
+
SNYK_INTEGRATION_ID="$value"
|
|
484
|
+
REGISTRY_KEY="$key"
|
|
485
|
+
echo "✅ Found integration for: $image (registry: $key)"
|
|
486
|
+
break 2 # Break out of both loops
|
|
487
|
+
fi
|
|
488
|
+
done <<< "$SNYK_INTEGRATION_IDS"
|
|
489
|
+
done
|
|
490
|
+
|
|
491
|
+
# Use selected image or fall back to first image for CLI
|
|
492
|
+
if [ -n "$SELECTED_IMAGE" ]; then
|
|
493
|
+
PRIMARY_IMAGE="$SELECTED_IMAGE"
|
|
494
|
+
echo "📦 Using image with integration: ${PRIMARY_IMAGE}"
|
|
495
|
+
else
|
|
496
|
+
PRIMARY_IMAGE="${IMAGES[0]}"
|
|
497
|
+
echo "📦 No integration found, using first image for CLI: ${PRIMARY_IMAGE}"
|
|
498
|
+
fi
|
|
499
|
+
|
|
500
|
+
# Format the image name based on the registry type
|
|
501
|
+
FORMATTED_IMAGE="$PRIMARY_IMAGE"
|
|
502
|
+
if [[ "$REGISTRY_KEY" == "docker.io" || "$REGISTRY_KEY" == "default" ]]; then
|
|
503
|
+
# Docker Hub integration expects image name WITHOUT docker.io/ prefix
|
|
504
|
+
FORMATTED_IMAGE=$(echo "$PRIMARY_IMAGE" | sed 's|^docker\.io/||')
|
|
505
|
+
echo "📝 Formatted image for Docker Hub: $FORMATTED_IMAGE"
|
|
506
|
+
fi
|
|
507
|
+
|
|
508
|
+
# ⭐ NEW: Universal Fallback Logic
|
|
509
|
+
# If no integration ID was found, use 'snyk container monitor'.
|
|
510
|
+
if [ -z "$SNYK_INTEGRATION_ID" ]; then
|
|
511
|
+
echo "ℹ️ No Snyk integration ID found for this registry. Installing Snyk CLI for fallback monitoring."
|
|
512
|
+
|
|
513
|
+
# Install Snyk CLI
|
|
514
|
+
curl -Lo /tmp/snyk "https://static.snyk.io/cli/latest/snyk-linux"
|
|
515
|
+
chmod +x /tmp/snyk
|
|
516
|
+
sudo mv /tmp/snyk /usr/local/bin/snyk
|
|
517
|
+
|
|
518
|
+
echo "📦 Using 'snyk container monitor' as a fallback."
|
|
519
|
+
snyk container monitor "$FORMATTED_IMAGE" --org="$SNYK_ORG_ID"
|
|
520
|
+
echo "✅ Snapshot sent to Snyk for continuous monitoring."
|
|
521
|
+
exit 0 # Safely exit the step with success
|
|
522
|
+
fi
|
|
523
|
+
|
|
524
|
+
# --- This section now only runs if an integration ID WAS found ---
|
|
525
|
+
echo "📋 Registry integration found. Proceeding with API import..."
|
|
526
|
+
|
|
527
|
+
JSON_PAYLOAD=$(jq -n \
|
|
528
|
+
--arg image "$FORMATTED_IMAGE" \
|
|
529
|
+
'{
|
|
530
|
+
target: {
|
|
531
|
+
name: $image
|
|
532
|
+
}
|
|
533
|
+
}')
|
|
534
|
+
|
|
535
|
+
# Import via API with proper error handling
|
|
536
|
+
echo "🚀 Starting import job for: $FORMATTED_IMAGE"
|
|
537
|
+
|
|
538
|
+
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
|
|
539
|
+
"${SNYK_API}/v1/org/${SNYK_ORG_ID}/integrations/${SNYK_INTEGRATION_ID}/import" \
|
|
540
|
+
-H "Authorization: token $SNYK_TOKEN" \
|
|
541
|
+
-H "Content-Type: application/json" \
|
|
542
|
+
-d "$JSON_PAYLOAD")
|
|
543
|
+
|
|
544
|
+
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
|
|
545
|
+
RESPONSE_BODY=$(echo "$RESPONSE" | head -n -1)
|
|
546
|
+
|
|
547
|
+
if [ "$HTTP_CODE" -eq 201 ]; then
|
|
548
|
+
echo "✅ Import job started successfully."
|
|
549
|
+
else
|
|
550
|
+
echo "❌ Failed to start import job. HTTP Code: $HTTP_CODE"
|
|
551
|
+
exit 1
|
|
552
|
+
fi
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## v2.1.0 (January 08, 2026)
|
|
2
|
+
|
|
3
|
+
Full Changelog: https://github.com/atlanhq/application-sdk/compare/v2.0.0...v2.1.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- improving the getting started guide (#929) (by @vaibhavatlan in [e04762b](https://github.com/atlanhq/application-sdk/commit/e04762b))
|
|
8
|
+
- add context manager and close() support to Reader classes (#930) (by @inishchith in [c589342](https://github.com/atlanhq/application-sdk/commit/c589342))
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- removed logs to avoid infinite logging (#928) (by @sachi-atlan in [5710532](https://github.com/atlanhq/application-sdk/commit/5710532))
|