declapract-typescript-ehmpathy 0.17.0
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.
- package/declapract.declare.yml +4 -0
- package/dist/examples/todo.md +1 -0
- package/dist/getVariables.ts +27 -0
- package/dist/practices/cicd-deploy-package/bad-practices/old-names/.github/workflows/publish_on_tag.yml.declapract.ts +3 -0
- package/dist/practices/cicd-deploy-package/best-practice/.declapract.readme.md +2 -0
- package/dist/practices/cicd-deploy-package/best-practice/.github/workflows/publish-on-tag.yml +36 -0
- package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_dev_on_main.yml.declapract.ts +3 -0
- package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_dev_on_master.yml.declapract.ts +3 -0
- package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_on_tag.yml.declapract.ts +3 -0
- package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_prod_on_tag.yml.declapract.ts +3 -0
- package/dist/practices/cicd-deploy-service/best-practice/.declapract.readme.md +4 -0
- package/dist/practices/cicd-deploy-service/best-practice/.github/workflows/deploy-dev-on-main.yml +59 -0
- package/dist/practices/cicd-deploy-service/best-practice/.github/workflows/deploy-prod-on-tag.yml +74 -0
- package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/ci-on-commit.yml.declapract.ts +3 -0
- package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/ci_on_commit.yml.declapract.ts +3 -0
- package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/test_on_commit.yml.declapract.ts +3 -0
- package/dist/practices/cicd-integrate/best-practice/.declapract.readme.md +3 -0
- package/dist/practices/cicd-integrate/best-practice/.github/workflows/pr-release-on-main.yml +17 -0
- package/dist/practices/cicd-integrate/best-practice/.github/workflows/test-on-commit.yml +285 -0
- package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/dev.json.declapract.ts +9 -0
- package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/prod.json.declapract.ts +9 -0
- package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/test.json.declapract.ts +9 -0
- package/dist/practices/config/bad-practices/divergent-config-shapes/.declapract.readme.md +8 -0
- package/dist/practices/config/bad-practices/divergent-config-shapes/config/dev.json.declapract.ts +37 -0
- package/dist/practices/config/bad-practices/divergent-config-shapes/config/prod.json.declapract.ts +37 -0
- package/dist/practices/config/bad-practices/in-util-dir-directly/.declapract.readme.md +1 -0
- package/dist/practices/config/bad-practices/in-util-dir-directly/src/<star><star>/<star>.ts.declapract.ts +16 -0
- package/dist/practices/config/bad-practices/in-util-dir-directly/src/utils/config.integration.test.ts.declapract.ts +3 -0
- package/dist/practices/config/bad-practices/in-util-dir-directly/src/utils/config.ts.declapract.ts +3 -0
- package/dist/practices/config/bad-practices/promise-config/src/<star><star>/<star>.ts.declapract.ts +19 -0
- package/dist/practices/config/best-practice/config/dev.json +3 -0
- package/dist/practices/config/best-practice/config/dev.json.declapract.ts +3 -0
- package/dist/practices/config/best-practice/config/prod.json +3 -0
- package/dist/practices/config/best-practice/config/prod.json.declapract.ts +3 -0
- package/dist/practices/config/best-practice/config/test.json +3 -0
- package/dist/practices/config/best-practice/config/test.json.declapract.ts +3 -0
- package/dist/practices/config/best-practice/nontyped_modules/config-with-paramstore.d.ts +1 -0
- package/dist/practices/config/best-practice/package.json +5 -0
- package/dist/practices/config/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/config/best-practice/provision/aws/product/parameter-store.tf +3 -0
- package/dist/practices/config/best-practice/provision/aws/product/parameter-store.tf.declapract.ts +16 -0
- package/dist/practices/config/best-practice/provision/aws/product/variables.tf +3 -0
- package/dist/practices/config/best-practice/provision/aws/product/variables.tf.declapract.ts +3 -0
- package/dist/practices/config/best-practice/src/utils/config/Config.ts +1 -0
- package/dist/practices/config/best-practice/src/utils/config/Config.ts.declapract.ts +7 -0
- package/dist/practices/config/best-practice/src/utils/config/getConfig.integration.test.ts +8 -0
- package/dist/practices/config/best-practice/src/utils/config/getConfig.ts +8 -0
- package/dist/practices/config/best-practice/src/utils/environment.ts +3 -0
- package/dist/practices/config/best-practice/src/utils/environment.ts.declapract.ts +3 -0
- package/dist/practices/conventional-commits/best-practice/.declapract.readme.md +5 -0
- package/dist/practices/conventional-commits/best-practice/.husky/commit-msg +4 -0
- package/dist/practices/conventional-commits/best-practice/commitlint.config.js +4 -0
- package/dist/practices/conventional-commits/best-practice/package.json +17 -0
- package/dist/practices/conventional-commits/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/dates-and-times/bad-practices/moment/.declapract.readme.md +9 -0
- package/dist/practices/dates-and-times/bad-practices/moment/package.json.declapract.ts +12 -0
- package/dist/practices/dates-and-times/best-practice/.declapract.readme.md +1 -0
- package/dist/practices/dates-and-times/best-practice/package.json +5 -0
- package/dist/practices/dates-and-times/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/directory-structure-src/bad-practices/model-dir/.declapract.readme.md +2 -0
- package/dist/practices/directory-structure-src/bad-practices/model-dir/src/<star><star>/<star>.ts.declapract.ts +44 -0
- package/dist/practices/directory-structure-src/bad-practices/model-dir/src/model/<star><star>/<star>.ts.declapract.ts +16 -0
- package/dist/practices/directory-structure-src/bad-practices/services-dir/.declapract.readme.md +5 -0
- package/dist/practices/directory-structure-src/bad-practices/services-dir/src/services/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/directory-structure-src/best-practice/.declapract.readme.md +32 -0
- package/dist/practices/directory-structure-src/best-practice/src/contract/<star><star>/<star>.ts.declapract.ts +4 -0
- package/dist/practices/directory-structure-src/best-practice/src/data/clients/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/directory-structure-src/best-practice/src/data/dao/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/directory-structure-src/best-practice/src/domain/constants.ts.declapract.ts +15 -0
- package/dist/practices/directory-structure-src/best-practice/src/domain/index.ts.declapract.ts +3 -0
- package/dist/practices/directory-structure-src/best-practice/src/domain/objects/index.ts.declapract.ts +4 -0
- package/dist/practices/directory-structure-src/best-practice/src/logic/<star><star>/<star>.ts.declapract.ts +4 -0
- package/dist/practices/domain/bad-practices/schematic-joi-model/src/domain/<star><star>/<star>.ts.declapract.ts +16 -0
- package/dist/practices/domain/best-practice/package.json +7 -0
- package/dist/practices/domain/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/domain/best-practice/src/domain/objects/index.ts.declapract.ts +4 -0
- package/dist/practices/environments/best-practice/.declapract.readme.md +30 -0
- package/dist/practices/environments/best-practice/provision/aws/environments/dev/main.tf.declapract.ts +3 -0
- package/dist/practices/environments/best-practice/provision/aws/environments/prod/main.tf.declapract.ts +3 -0
- package/dist/practices/environments/best-practice/provision/aws/environments/test/main.tf.declapract.ts +3 -0
- package/dist/practices/environments/best-practice/src/utils/environment.ts +35 -0
- package/dist/practices/errors/best-practice/src/utils/errors/UnexpectedCodePathError.ts +14 -0
- package/dist/practices/format/best-practice/package.json +6 -0
- package/dist/practices/format/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/git/best-practice/.gitignore.declapract.ts +29 -0
- package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/.declapract.readme.md +1 -0
- package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/package.json +5 -0
- package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/package.json.declapract.ts +16 -0
- package/dist/practices/lambda-clients/best-practice/package.json +5 -0
- package/dist/practices/lambda-clients/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/lambda-clients/best-practice/src/data/clients/<star>.ts +1 -0
- package/dist/practices/lambda-clients/best-practice/src/data/clients/<star>.ts.declapract.ts +3 -0
- package/dist/practices/lambda-handlers/best-practice/package.json +9 -0
- package/dist/practices/lambda-handlers/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/lambda-handlers/best-practice/src/contract/handlers/<star><star>/<star>.declapract.ts +3 -0
- package/dist/practices/linting/best-practice/.eslintrc.js +44 -0
- package/dist/practices/linting/best-practice/package.json +16 -0
- package/dist/practices/linting/best-practice/package.json.declapract.ts +4 -0
- package/dist/practices/logging/best-practice/package.json +5 -0
- package/dist/practices/logging/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/logging/best-practice/src/utils/logger.ts +3 -0
- package/dist/practices/node/bad-practices/license/package.json.declapract.ts +22 -0
- package/dist/practices/node/best-practice/.nvmrc +1 -0
- package/dist/practices/node/best-practice/package.json +11 -0
- package/dist/practices/node/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/node/best-practice/readme.md +1 -0
- package/dist/practices/node/best-practice/readme.md.declapract.ts +3 -0
- package/dist/practices/nonpublished-modules/.declapract.readme.md +5 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/.declapract.readme.md +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/__nonpublished_modules__/ahbode-standard-lambda-handler/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.integration.test.ts +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.integration.test.ts.declapract.ts +15 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.ts +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.ts.declapract.ts +13 -0
- package/dist/practices/nonpublished-modules/bad-practices/deep-omit/.declapract.readme.md +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/__nonpublished_modules__/deep-omit/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/data/dao/<star><star>/<star>.integration.test.ts +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/data/dao/<star><star>/<star>.integration.test.ts.declapract.ts +18 -0
- package/dist/practices/nonpublished-modules/bad-practices/simple-dynamodb-client/.declapract.readme.md +1 -0
- package/dist/practices/nonpublished-modules/bad-practices/simple-dynamodb-client/src/__nonpublished_modules__/simple-dynamodb-client/<star><star>/<star>.ts.declapract.ts +3 -0
- package/dist/practices/package-json-order/best-practice/.declapract.readme.md +3 -0
- package/dist/practices/package-json-order/best-practice/package.json.declapract.ts +171 -0
- package/dist/practices/persist-with-dynamodb/best-practice/package.json +5 -0
- package/dist/practices/persist-with-dynamodb/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/database.sql.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/extensions.sql.declapract.ts +13 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/schema.sql.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.cicd.sql.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.datalakedb.sql.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/readme.md +5 -0
- package/dist/practices/persist-with-rds/bad-practices/old-config-file-names/codegen.sql.yml.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/.declapract.readme.md +1 -0
- package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/entities/<star>.ts.declapract.ts +12 -0
- package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/sql/entities.yml.declapract.ts +13 -0
- package/dist/practices/persist-with-rds/best-practice/.declapract.readme.md +6 -0
- package/dist/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +18 -0
- package/dist/practices/persist-with-rds/best-practice/codegen.sql.dao.yml.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/codegen.sql.schema.yml +6 -0
- package/dist/practices/persist-with-rds/best-practice/codegen.sql.types.yml +15 -0
- package/dist/practices/persist-with-rds/best-practice/config/dev.json +20 -0
- package/dist/practices/persist-with-rds/best-practice/config/dev.json.declapract.ts +15 -0
- package/dist/practices/persist-with-rds/best-practice/config/prod.json +20 -0
- package/dist/practices/persist-with-rds/best-practice/config/prod.json.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/config/test.json +20 -0
- package/dist/practices/persist-with-rds/best-practice/config/test.json.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/package.json +27 -0
- package/dist/practices/persist-with-rds/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/provision/aws/product/parameter-store.tf +24 -0
- package/dist/practices/persist-with-rds/best-practice/provision/aws/product/parameter-store.tf.declapract.ts +18 -0
- package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/build-image.dockerfile +7 -0
- package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/docker-compose.yml +13 -0
- package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/init/.gitignore +3 -0
- package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/init/readme.md +3 -0
- package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/wait-for-postgres.sh +15 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/connection.config.js +23 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/control.yml +7 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +71 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.database.sql +10 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql +16 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql.declapract.ts +37 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.schema.sql +11 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.cicd.sql +14 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.datalakedb.sql +12 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/default_transaction_isolation.sql +6 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/user.service.sql +16 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml +9 -0
- package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts +2 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts.declapract.ts +3 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.integration.test.ts +10 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.ts +65 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseConnection.ts +38 -0
- package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +20 -0
- package/dist/practices/prettier/bad-practices/format-script/package.json.declapract.ts +26 -0
- package/dist/practices/prettier/best-practice/.prettierignore +1 -0
- package/dist/practices/prettier/best-practice/package.json +10 -0
- package/dist/practices/prettier/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/prettier/best-practice/prettier.config.js +9 -0
- package/dist/practices/runtime-type-checking/bad-practices/joi-types/package.json +5 -0
- package/dist/practices/runtime-type-checking/bad-practices/joi-types/package.json.declapract.ts +18 -0
- package/dist/practices/runtime-type-checking/bad-practices/old-joi-syntax-valid-input-cant-be-array/.declapract.readme.md +1 -0
- package/dist/practices/runtime-type-checking/bad-practices/old-joi-syntax-valid-input-cant-be-array/src/<star><star>/<star>.ts.declapract.ts +15 -0
- package/dist/practices/runtime-type-checking/best-practice/package.json +5 -0
- package/dist/practices/runtime-type-checking/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/serverless/bad-practices/generic-deploy-script/package.json +8 -0
- package/dist/practices/serverless/bad-practices/generic-deploy-script/package.json.declapract.ts +23 -0
- package/dist/practices/serverless/bad-practices/old-sls-plugins/package.json +6 -0
- package/dist/practices/serverless/bad-practices/old-sls-plugins/package.json.declapract.ts +19 -0
- package/dist/practices/serverless/best-practice/package.json +11 -0
- package/dist/practices/serverless/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/serverless/best-practice/serverless.yml +70 -0
- package/dist/practices/serverless/best-practice/serverless.yml.declapract.ts +26 -0
- package/dist/practices/terraform/bad-practices/terraform-dir/.declapract.readme.md +8 -0
- package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/.gitignore.declapract.ts +12 -0
- package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/<star>.hcl.declapract.ts +12 -0
- package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/<star>.tf.declapract.ts +12 -0
- package/dist/practices/terraform/best-practice/.terraform-version +1 -0
- package/dist/practices/terraform/best-practice/package.json +6 -0
- package/dist/practices/terraform/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/dev/main.tf +18 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/dev/versions.tf +9 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/prod/main.tf +18 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/prod/versions.tf +9 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/test/main.tf +18 -0
- package/dist/practices/terraform/best-practice/provision/aws/environments/test/versions.tf +9 -0
- package/dist/practices/terraform/best-practice/provision/aws/product/variables.tf +14 -0
- package/dist/practices/terraform/best-practice/provision/github/environment/import-existing-repo.sh +12 -0
- package/dist/practices/terraform/best-practice/provision/github/environment/main.tf +20 -0
- package/dist/practices/terraform/best-practice/provision/github/environment/versions.tf +9 -0
- package/dist/practices/terraform/best-practice/provision/github/product/repository.tf +70 -0
- package/dist/practices/testing/bad-practices/mocks/.declapract.readme.md +8 -0
- package/dist/practices/testing/bad-practices/mocks/<star><star>/__mock__/<star>.js +3 -0
- package/dist/practices/testing/bad-practices/mocks/<star><star>/__mock__/<star>.ts +3 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/_utils/getDataFromLastOpenBracketAtStartOfLine.ts.declapract.ts +3 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/_utils/invokeLambda.ts.declapract.ts +3 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/lambdas/<star>.ts.declapract.ts +44 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils-2/acceptance/__test_utils__/environment.ts.declapract.ts +3 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils-2/acceptance/lambdas/<star>.ts.declapract.ts +22 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils-3/acceptance/_utils/environment.ts.declapract.ts +3 -0
- package/dist/practices/testing/bad-practices/old-acceptance-test-utils-3/acceptance/lambdas/<star>.ts.declapract.ts +18 -0
- package/dist/practices/testing/bad-practices/old-extension-pattern/.declapract.readme.md +3 -0
- package/dist/practices/testing/bad-practices/old-extension-pattern/<star><star>/<star>.test.acceptance.ts.declapract.ts +11 -0
- package/dist/practices/testing/bad-practices/old-extension-pattern/<star><star>/<star>.test.integration.ts.declapract.ts +11 -0
- package/dist/practices/testing/best-practice/.declapract.readme.md +45 -0
- package/dist/practices/testing/best-practice/acceptance/<star><star>/<star>.acceptance.test.ts.declapract.ts +3 -0
- package/dist/practices/testing/best-practice/acceptance/environment.ts +5 -0
- package/dist/practices/testing/best-practice/acceptance/lambdas/<star>.acceptance.test.ts.declapract.ts +32 -0
- package/dist/practices/testing/best-practice/jest.acceptance.config.js +15 -0
- package/dist/practices/testing/best-practice/jest.acceptance.env.js +2 -0
- package/dist/practices/testing/best-practice/jest.config.js +1 -0
- package/dist/practices/testing/best-practice/jest.integration.config.js +10 -0
- package/dist/practices/testing/best-practice/jest.integration.env.js +13 -0
- package/dist/practices/testing/best-practice/jest.unit.config.js +15 -0
- package/dist/practices/testing/best-practice/jest.unit.env.js +16 -0
- package/dist/practices/testing/best-practice/package.json +16 -0
- package/dist/practices/testing/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/testing/best-practice/src/<star><star>/<star>.integration.test.ts.declapract.ts +3 -0
- package/dist/practices/testing/best-practice/src/<star><star>/<star>.test.ts.declapract.ts +3 -0
- package/dist/practices/testing/best-practice/src/utils/environment.ts +3 -0
- package/dist/practices/testing/best-practice/src/utils/environment.ts.declapract.ts +3 -0
- package/dist/practices/testing/defineFunctionNameFromTestFileName.ts +11 -0
- package/dist/practices/typescript/best-practice/.declapract.readme.md +10 -0
- package/dist/practices/typescript/best-practice/package.json +12 -0
- package/dist/practices/typescript/best-practice/package.json.declapract.ts +3 -0
- package/dist/practices/typescript/best-practice/tsconfig.build.json +17 -0
- package/dist/practices/typescript/best-practice/tsconfig.json +18 -0
- package/dist/practices/uuid/bad-practices/npm-uuidv4/.declapract.readme.md +1 -0
- package/dist/practices/uuid/bad-practices/npm-uuidv4/package.json.declapract.ts +17 -0
- package/dist/practices/uuid/best-practice/.declapract.readme.md +1 -0
- package/dist/practices/uuid/best-practice/package.json +8 -0
- package/dist/practices/uuid/best-practice/package.json.declapract.ts +3 -0
- package/dist/useCases.yml +48 -0
- package/package.json +96 -0
- package/readme.md +39 -0
package/dist/practices/runtime-type-checking/bad-practices/joi-types/package.json.declapract.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FileCheckType, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check = FileCheckType.CONTAINS;
|
|
4
|
+
|
|
5
|
+
export const fix: FileFixFunction = (contents) => {
|
|
6
|
+
if (!contents) return { contents }; // do nothing if no contents
|
|
7
|
+
const packageJSON = JSON.parse(contents);
|
|
8
|
+
const updatedPackageJSON = {
|
|
9
|
+
...packageJSON,
|
|
10
|
+
devDependencies: {
|
|
11
|
+
...packageJSON.devDependencies,
|
|
12
|
+
'@types/joi': undefined,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
contents: JSON.stringify(updatedPackageJSON, null, 2),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
joi updated their syntax and now throws an error if `.valid([])`, instead we need to give `.valid(...[])`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FileCheckFunction, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check: FileCheckFunction = (contents) => {
|
|
4
|
+
if (contents?.includes('.valid(Object.values(')) return; // matches bad practice if this is found
|
|
5
|
+
throw new Error('passes, does not match bad practice');
|
|
6
|
+
};
|
|
7
|
+
export const fix: FileFixFunction = (contents) => {
|
|
8
|
+
if (!contents) return {};
|
|
9
|
+
return {
|
|
10
|
+
contents: contents.replace(
|
|
11
|
+
/\.valid\(Object\.values/g,
|
|
12
|
+
'.valid(...Object.values',
|
|
13
|
+
),
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scripts": {
|
|
3
|
+
"deploy:release": "npm run build && sls deploy --verbose --stage $DEPLOYMENT_STAGE",
|
|
4
|
+
"deploy:send-notification": "curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"$([ -z $DEPLOYER_NAME ] && git config user.name || echo $DEPLOYER_NAME) has deployed $npm_package_name@v$npm_package_version:\nhttps://github.com/@declapract{variable.organizationName}/$npm_package_name/tree/v$npm_package_version\\\"}\" @declapract{variable.slackWebhookUrl}",
|
|
5
|
+
"deploy:dev": "DEPLOYMENT_STAGE=dev npm run deploy:release",
|
|
6
|
+
"deploy:prod": "DEPLOYMENT_STAGE=prod npm run deploy:release && npm run deploy:send-notification"
|
|
7
|
+
}
|
|
8
|
+
}
|
package/dist/practices/serverless/bad-practices/generic-deploy-script/package.json.declapract.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FileCheckFunction, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check: FileCheckFunction = (contents) => {
|
|
4
|
+
if (!contents) throw new Error('does not match bad practice'); // no contents -> fine
|
|
5
|
+
const packageJSON = JSON.parse(contents);
|
|
6
|
+
if (packageJSON.scripts.deploy) return; // bad practice
|
|
7
|
+
throw new Error('does not match bad practice');
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const fix: FileFixFunction = (contents) => {
|
|
11
|
+
if (!contents) return { contents }; // do nothing if no contents
|
|
12
|
+
const packageJSON = JSON.parse(contents);
|
|
13
|
+
const updatedPackageJSON = {
|
|
14
|
+
...packageJSON,
|
|
15
|
+
scripts: {
|
|
16
|
+
...packageJSON.scripts,
|
|
17
|
+
deploy: undefined, // remove the deploy script
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
contents: JSON.stringify(updatedPackageJSON, null, 2),
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FileCheckType, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check = FileCheckType.CONTAINS;
|
|
4
|
+
|
|
5
|
+
export const fix: FileFixFunction = (contents) => {
|
|
6
|
+
if (!contents) return { contents }; // do nothing if no contents
|
|
7
|
+
const packageJSON = JSON.parse(contents);
|
|
8
|
+
const updatedPackageJSON = {
|
|
9
|
+
...packageJSON,
|
|
10
|
+
devDependencies: {
|
|
11
|
+
...packageJSON.devDependencies,
|
|
12
|
+
'serverless-offline': undefined, // remove the dep
|
|
13
|
+
'serverless-pseudo-parameters': undefined, // remove the deploy script
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
contents: JSON.stringify(updatedPackageJSON, null, 2),
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"devDependencies": {
|
|
3
|
+
"serverless": "@declapract{check.minVersion('2.57.0')}"
|
|
4
|
+
},
|
|
5
|
+
"scripts": {
|
|
6
|
+
"deploy:release": "npm run build && sls deploy --verbose --stage $DEPLOYMENT_STAGE",
|
|
7
|
+
"deploy:send-notification": "curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"$([ -z $DEPLOYER_NAME ] && git config user.name || echo $DEPLOYER_NAME) has deployed $npm_package_name@v$npm_package_version:\nhttps://github.com/@declapract{variable.organizationName}/$npm_package_name/tree/v$npm_package_version\\\"}\" @declapract{variable.slackWebhookUrl}",
|
|
8
|
+
"deploy:dev": "DEPLOYMENT_STAGE=dev npm run deploy:release",
|
|
9
|
+
"deploy:prod": "DEPLOYMENT_STAGE=prod npm run deploy:release && npm run deploy:send-notification"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
service: @declapract{variable.projectName}
|
|
2
|
+
|
|
3
|
+
provider:
|
|
4
|
+
name: aws
|
|
5
|
+
runtime: nodejs16.x
|
|
6
|
+
memorySize: 1024 # optional, in MB, default is 1024
|
|
7
|
+
timeout: 10
|
|
8
|
+
stage: ${opt:stage}
|
|
9
|
+
stackTags:
|
|
10
|
+
app: @declapract{variable.organizationName}
|
|
11
|
+
environment: ${self:provider.stage}
|
|
12
|
+
product: ${self:service}
|
|
13
|
+
environment:
|
|
14
|
+
NODE_ENV: production # deploy with production optimizations of all resources, to make `dev` and `prod` stage deployments equivalent functionally (i.e., the same code paths in dev and prod)
|
|
15
|
+
DEPLOYMENT_STAGE: ${self:provider.stage} # deploy specifying which stage we're targeting, to enable targeting the correct config + resources (e.g., hit dev db -vs- prod db)
|
|
16
|
+
AWS_NODEJS_CONNECTION_REUSE_ENABLED: true # https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html
|
|
17
|
+
deploymentBucket: serverless-deployment-@declapract{variable.infrastructureNamespaceId}-${self:provider.stage}
|
|
18
|
+
vpc:
|
|
19
|
+
securityGroupIds:
|
|
20
|
+
- ${ssm:/tf/infrastructure/vpc/main/lambdaSecurityGroupId}
|
|
21
|
+
subnetIds:
|
|
22
|
+
- ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet1Id}
|
|
23
|
+
- ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet2Id}
|
|
24
|
+
- ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet3Id}
|
|
25
|
+
iamRoleStatements:
|
|
26
|
+
# parameter store access
|
|
27
|
+
- Effect: 'Allow'
|
|
28
|
+
Action: 'ssm:DescribeParameters'
|
|
29
|
+
Resource: '*'
|
|
30
|
+
- Effect: 'Allow'
|
|
31
|
+
Action: 'ssm:GetParameters'
|
|
32
|
+
Resource: arn:aws:ssm:${aws:region}:${aws:accountId}:parameter/*
|
|
33
|
+
- Effect: 'Allow'
|
|
34
|
+
Action: 'kms:Decrypt'
|
|
35
|
+
Resource: arn:aws:kms:${aws:region}:${aws:accountId}:alias/aws/ssm*
|
|
36
|
+
# allow invocation of other lambdas
|
|
37
|
+
- Effect: Allow
|
|
38
|
+
Action:
|
|
39
|
+
- lambda:InvokeFunction
|
|
40
|
+
- lambda:InvokeAsync
|
|
41
|
+
Resource: '*'
|
|
42
|
+
# allow reading and writing to s3 buckets namespaced by this service
|
|
43
|
+
- Effect: Allow
|
|
44
|
+
Action:
|
|
45
|
+
- s3:ListObject
|
|
46
|
+
- s3:GetObject
|
|
47
|
+
- s3:PutObject
|
|
48
|
+
Resource: arn:aws:s3:${aws:region}:${aws:accountId}:${self:service}-*
|
|
49
|
+
# allow reading and writing to sqs queues namespaced to this service
|
|
50
|
+
- Effect: Allow
|
|
51
|
+
Action:
|
|
52
|
+
- sqs:SendMessage
|
|
53
|
+
- sqs:ReceiveMessage
|
|
54
|
+
- sqs:DeleteMessage
|
|
55
|
+
- sqs:GetQueueAttributes
|
|
56
|
+
Resource: arn:aws:sqs:${aws:region}:${aws:accountId}:${self:service}-*
|
|
57
|
+
# allow reading and writing to dynamodb tables namespaced to this service
|
|
58
|
+
- Effect: Allow
|
|
59
|
+
Action:
|
|
60
|
+
- dynamodb:DescribeTable
|
|
61
|
+
- dynamodb:Query
|
|
62
|
+
- dynamodb:Scan
|
|
63
|
+
- dynamodb:GetItem
|
|
64
|
+
- dynamodb:PutItem
|
|
65
|
+
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-*
|
|
66
|
+
# allow publishing to sns topics namespaced by this service
|
|
67
|
+
- Effect: Allow
|
|
68
|
+
Action:
|
|
69
|
+
- SNS:Publish
|
|
70
|
+
Resource: arn:aws:sns:${aws:region}:${aws:accountId}:${self:service}-*
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FileCheckType } from 'declapract';
|
|
2
|
+
import { FileFixFunction } from 'declapract/dist/domain';
|
|
3
|
+
|
|
4
|
+
export const check = FileCheckType.CONTAINS; // i.e., check that the contents of the file contains what's declared (default is equals)
|
|
5
|
+
|
|
6
|
+
export const fix: FileFixFunction = (contents) => {
|
|
7
|
+
if (!contents) return { contents }; // do nothing if file dne; // TODO: update to provision file from declared contents
|
|
8
|
+
return {
|
|
9
|
+
contents: contents
|
|
10
|
+
.replace(/runtime\: nodejs\d\d.x/, 'runtime: nodejs14.x')
|
|
11
|
+
.replace('\nplugins:\n', '')
|
|
12
|
+
.replace(/ - serverless-offline .*\n/, '') // a plugin we no longer use (never used it, no need to have it)
|
|
13
|
+
.replace(/ - serverless-pseudo-parameters .*\n/, '') // a plugin we no longer use (serverless supports variables natively now)
|
|
14
|
+
.replace(/\#\{AWS\:\:Region\}/g, '${aws:region}') // use the serverless native variables, instead of the pseudo-parameters format
|
|
15
|
+
.replace(/\#\{AWS\:\:AccountId\}/g, '${aws:accountId}') // use the serverless native variables, instead of the pseudo-parameters format
|
|
16
|
+
.replace('## paramstore access', '# parameter store access')
|
|
17
|
+
.replace(
|
|
18
|
+
'## allow invocation of other lambdas',
|
|
19
|
+
'# allow invocation of other lambdas',
|
|
20
|
+
)
|
|
21
|
+
.replace(
|
|
22
|
+
'NODE_ENV: ${self:custom.stageToNodeEnvMapping.${self:provider.stage}}\n deploymentBucket',
|
|
23
|
+
'NODE_ENV: ${self:custom.stageToNodeEnvMapping.${self:provider.stage}}\n AWS_NODEJS_CONNECTION_REUSE_ENABLED: true # https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html\n deploymentBucket',
|
|
24
|
+
), // add this env flag // TODO: when we have special support for yml, do this better (i.e., instead of string replace, just add to the yml object after parsing it)
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
having a `/provision/terraform` dir is bad practice since we use the tool terraform to provision multiple things:
|
|
2
|
+
- aws resources
|
|
3
|
+
- github resources
|
|
4
|
+
- etc
|
|
5
|
+
|
|
6
|
+
instead, those should be separately identified and managed with separate tf projects
|
|
7
|
+
|
|
8
|
+
we used to just manage aws-resources in each repo, so thats why this pattern originally existed
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FileCheckType, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check = FileCheckType.EXISTS;
|
|
4
|
+
|
|
5
|
+
export const fix: FileFixFunction = (_, context) => {
|
|
6
|
+
return {
|
|
7
|
+
relativeFilePath: context.relativeFilePath.replace(
|
|
8
|
+
'provision/terraform/',
|
|
9
|
+
'provision/aws/',
|
|
10
|
+
),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FileCheckType, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check = FileCheckType.EXISTS;
|
|
4
|
+
|
|
5
|
+
export const fix: FileFixFunction = (_, context) => {
|
|
6
|
+
return {
|
|
7
|
+
relativeFilePath: context.relativeFilePath.replace(
|
|
8
|
+
'provision/terraform/',
|
|
9
|
+
'provision/aws/',
|
|
10
|
+
),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FileCheckType, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check = FileCheckType.EXISTS;
|
|
4
|
+
|
|
5
|
+
export const fix: FileFixFunction = (_, context) => {
|
|
6
|
+
return {
|
|
7
|
+
relativeFilePath: context.relativeFilePath.replace(
|
|
8
|
+
'provision/terraform/',
|
|
9
|
+
'provision/aws/',
|
|
10
|
+
),
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.14.11
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
provider "aws" {
|
|
2
|
+
region = "us-east-1"
|
|
3
|
+
allowed_account_ids = ["@declapract{variable.awsAccountId.dev}"] # `dev` environment resources are provisioned in the `dev` aws account
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
terraform {
|
|
7
|
+
backend "s3" {
|
|
8
|
+
bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-dev"
|
|
9
|
+
key = "@declapract{variable.projectName}-dev"
|
|
10
|
+
region = "us-east-1"
|
|
11
|
+
encrypt = true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module "product" {
|
|
16
|
+
source = "../../product"
|
|
17
|
+
environment = "dev"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
provider "aws" {
|
|
2
|
+
region = "us-east-1"
|
|
3
|
+
allowed_account_ids = ["@declapract{variable.awsAccountId.prod}"] # `prod` environment resources are provisioned in the `prod` aws account
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
terraform {
|
|
7
|
+
backend "s3" {
|
|
8
|
+
bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-prod"
|
|
9
|
+
key = "@declapract{variable.projectName}-prod"
|
|
10
|
+
region = "us-east-1"
|
|
11
|
+
encrypt = true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module "product" {
|
|
16
|
+
source = "../../product"
|
|
17
|
+
environment = "prod"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
provider "aws" {
|
|
2
|
+
region = "us-east-1"
|
|
3
|
+
allowed_account_ids = ["@declapract{variable.awsAccountId.dev}"] # `test` environment resources are provisioned in the `dev` aws account
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
terraform {
|
|
7
|
+
backend "s3" {
|
|
8
|
+
bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-test"
|
|
9
|
+
key = "@declapract{variable.projectName}-test"
|
|
10
|
+
region = "us-east-1"
|
|
11
|
+
encrypt = true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module "product" {
|
|
16
|
+
source = "../../product"
|
|
17
|
+
environment = "test"
|
|
18
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
variable "environment" {}
|
|
2
|
+
|
|
3
|
+
locals {
|
|
4
|
+
service = "@declapract{variable.projectName}"
|
|
5
|
+
s3_namespace = "@declapract{variable.infrastructureNamespaceId}"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
locals {
|
|
9
|
+
tags = {
|
|
10
|
+
app = "@declapract{variable.organizationName}"
|
|
11
|
+
environment = var.environment
|
|
12
|
+
product = local.service
|
|
13
|
+
}
|
|
14
|
+
}
|
package/dist/practices/terraform/best-practice/provision/github/environment/import-existing-repo.sh
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# terraform... why cant you just look this stuff up given that you already have the inputs....
|
|
2
|
+
REPO_NAME='@declapract{variable.projectName}';
|
|
3
|
+
|
|
4
|
+
# import the repo itself
|
|
5
|
+
terraform import module.product.github_repository.this $REPO_NAME;
|
|
6
|
+
|
|
7
|
+
# import the default branch setting
|
|
8
|
+
terraform import module.product.github_branch_default.default_branch_is_main $REPO_NAME;
|
|
9
|
+
|
|
10
|
+
# import the branch protection rules
|
|
11
|
+
terraform import "module.product.github_branch_protection.main_branch[0]" $REPO_NAME:main
|
|
12
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
provider "github" {
|
|
2
|
+
owner = "@declapract{variable.organizationName}" # for the @declapract{variable.organizationName} organization
|
|
3
|
+
# note: `token` is sourced from env var GITHUB_TOKEN (e.g,. `use.github`)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
terraform {
|
|
7
|
+
backend "s3" {
|
|
8
|
+
bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-prod" # tracked in the prod aws account's s3 bucket, so `use.@declapract{variable.organizationName}.prod`
|
|
9
|
+
key = "@declapract{variable.projectName}-github"
|
|
10
|
+
region = "us-east-1"
|
|
11
|
+
encrypt = true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module "product" {
|
|
16
|
+
source = "../product"
|
|
17
|
+
name = "@declapract{variable.projectName}"
|
|
18
|
+
visibility = "private"
|
|
19
|
+
protected = true
|
|
20
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
variable "name" {
|
|
2
|
+
type = string
|
|
3
|
+
}
|
|
4
|
+
variable "visibility" {
|
|
5
|
+
default = "private"
|
|
6
|
+
}
|
|
7
|
+
variable "protected" {
|
|
8
|
+
default = true
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
# the repository itself
|
|
12
|
+
resource "github_repository" "this" {
|
|
13
|
+
name = var.name
|
|
14
|
+
visibility = var.visibility
|
|
15
|
+
|
|
16
|
+
# standard settings
|
|
17
|
+
has_issues = true # only issues are allowed... todo: decide if there's too much overlap between linear and issues
|
|
18
|
+
has_projects = false
|
|
19
|
+
has_wiki = false
|
|
20
|
+
has_downloads = false
|
|
21
|
+
is_template = false
|
|
22
|
+
allow_squash_merge = true # only squash merges are allowed
|
|
23
|
+
allow_merge_commit = false # especially not merge merges. never merge merges
|
|
24
|
+
allow_rebase_merge = false
|
|
25
|
+
allow_auto_merge = true
|
|
26
|
+
delete_branch_on_merge = true # always delete branch on merging
|
|
27
|
+
|
|
28
|
+
lifecycle {
|
|
29
|
+
ignore_changes = [
|
|
30
|
+
description # dont worry about the description in these checks; the purpose of these checks is to check developer experience, not repo contents
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# the main branch (its "data" instead of a "resource" because 1. you cant create it w/ terraform anyway, 2. there's a constant "etag" out of sync with terraform)
|
|
36
|
+
data "github_branch" "main" {
|
|
37
|
+
repository = github_repository.this.name
|
|
38
|
+
branch = "main"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# set it as the default for this org
|
|
42
|
+
resource "github_branch_default" "default_branch_is_main" {
|
|
43
|
+
repository = github_repository.this.name
|
|
44
|
+
branch = data.github_branch.main.branch
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# the branch protection rule on the main branch
|
|
48
|
+
resource "github_branch_protection" "main_branch" {
|
|
49
|
+
repository_id = github_repository.this.node_id
|
|
50
|
+
pattern = data.github_branch.main.branch
|
|
51
|
+
|
|
52
|
+
enforce_admins = true # yes, even admins need to follow this (note: they can still take the time to go and change the settings temporarily for the exceptions)
|
|
53
|
+
allows_deletions = false # dont allow the `main` branch to be deleted
|
|
54
|
+
allows_force_pushes = false # dont allow `main` branch to be force pushed to
|
|
55
|
+
|
|
56
|
+
required_status_checks {
|
|
57
|
+
strict = true # branch must be up to date. otherwise, we dont know if it will really pass once it is merged
|
|
58
|
+
contexts = [
|
|
59
|
+
"test-commits",
|
|
60
|
+
"test-types",
|
|
61
|
+
"test-format",
|
|
62
|
+
"test-lint",
|
|
63
|
+
"test-unit",
|
|
64
|
+
"test-integration",
|
|
65
|
+
"test-acceptance-locally"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
count = var.protected == false ? 0 : 1 # only define protection rules if this repository is marked as protected (default = true)
|
|
70
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FileCheckFunction, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
import { getProjectVariables } from '../../../../../../getVariables';
|
|
4
|
+
|
|
5
|
+
export const check: FileCheckFunction = (contents) => {
|
|
6
|
+
if (
|
|
7
|
+
contents?.includes(`import { invokeLambda } from '../_utils/invokeLambda';`)
|
|
8
|
+
)
|
|
9
|
+
return; // then it matches bad practice
|
|
10
|
+
throw new Error('does not match bad practice');
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const fix: FileFixFunction = async (contents, context) => {
|
|
14
|
+
if (!contents) return {}; // do nothing if no contents. really, this shouldn't have been called
|
|
15
|
+
const { projectName } = await getProjectVariables(context);
|
|
16
|
+
return {
|
|
17
|
+
contents: contents
|
|
18
|
+
.replace(
|
|
19
|
+
// replace the bad import
|
|
20
|
+
`import { invokeLambda } from '../_utils/invokeLambda';`,
|
|
21
|
+
[
|
|
22
|
+
`import { invokeLambdaForTesting } from 'simple-lambda-testing-methods';`,
|
|
23
|
+
`import { stage } from '../../src/utils/environment';`,
|
|
24
|
+
`import { locally } from '../environment';`,
|
|
25
|
+
].join('\n'),
|
|
26
|
+
)
|
|
27
|
+
.replace(
|
|
28
|
+
// replace calls to the fn
|
|
29
|
+
/invokeLambda\(\{/g,
|
|
30
|
+
'invokeLambdaForTesting({',
|
|
31
|
+
)
|
|
32
|
+
.replace(
|
|
33
|
+
// replace the inputs
|
|
34
|
+
/name\: '(\w+)',/g,
|
|
35
|
+
[
|
|
36
|
+
`service: '${projectName}',`,
|
|
37
|
+
`function: '$1',`,
|
|
38
|
+
`stage,`,
|
|
39
|
+
`locally,`,
|
|
40
|
+
].join('\n'),
|
|
41
|
+
)
|
|
42
|
+
.replace(/data\: /g, 'event: '),
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FileCheckFunction, FileFixFunction } from 'declapract';
|
|
2
|
+
|
|
3
|
+
export const check: FileCheckFunction = (contents) => {
|
|
4
|
+
if (
|
|
5
|
+
contents?.includes(
|
|
6
|
+
`import { locally } from '../__test_utils__/environment';`,
|
|
7
|
+
)
|
|
8
|
+
)
|
|
9
|
+
return; // then it matches bad practice
|
|
10
|
+
throw new Error('does not match bad practice');
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const fix: FileFixFunction = async (contents) => {
|
|
14
|
+
if (!contents) return {}; // do nothing if no contents. really, this shouldn't have been called
|
|
15
|
+
return {
|
|
16
|
+
contents: contents.replace(
|
|
17
|
+
// replace the bad import
|
|
18
|
+
`import { locally } from '../__test_utils__/environment';`,
|
|
19
|
+
`import { locally } from '../environment';`,
|
|
20
|
+
),
|
|
21
|
+
};
|
|
22
|
+
};
|