@codyswann/lisa 1.0.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/LICENSE +21 -0
- package/README.md +867 -0
- package/all/copy-overwrite/.claude/README.md +205 -0
- package/all/copy-overwrite/.claude/agents/agent-architect.md +311 -0
- package/all/copy-overwrite/.claude/agents/codebase-analyzer.md +146 -0
- package/all/copy-overwrite/.claude/agents/codebase-locator.md +125 -0
- package/all/copy-overwrite/.claude/agents/codebase-pattern-finder.md +237 -0
- package/all/copy-overwrite/.claude/agents/git-history-analyzer.md +183 -0
- package/all/copy-overwrite/.claude/agents/hooks-expert.md +74 -0
- package/all/copy-overwrite/.claude/agents/skill-evaluator.md +246 -0
- package/all/copy-overwrite/.claude/agents/slash-command-architect.md +87 -0
- package/all/copy-overwrite/.claude/agents/web-search-researcher.md +112 -0
- package/all/copy-overwrite/.claude/commands/git/commit-and-submit-pr.md +8 -0
- package/all/copy-overwrite/.claude/commands/git/commit.md +44 -0
- package/all/copy-overwrite/.claude/commands/git/prune.md +34 -0
- package/all/copy-overwrite/.claude/commands/git/submit-pr.md +50 -0
- package/all/copy-overwrite/.claude/commands/jira/create.md +50 -0
- package/all/copy-overwrite/.claude/commands/jira/verify.md +34 -0
- package/all/copy-overwrite/.claude/commands/project/archive.md +8 -0
- package/all/copy-overwrite/.claude/commands/project/bootstrap.md +49 -0
- package/all/copy-overwrite/.claude/commands/project/complete-task.md +7 -0
- package/all/copy-overwrite/.claude/commands/project/debrief.md +65 -0
- package/all/copy-overwrite/.claude/commands/project/execute.md +94 -0
- package/all/copy-overwrite/.claude/commands/project/implement.md +42 -0
- package/all/copy-overwrite/.claude/commands/project/local-code-review.md +88 -0
- package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +74 -0
- package/all/copy-overwrite/.claude/commands/project/plan.md +314 -0
- package/all/copy-overwrite/.claude/commands/project/research.md +248 -0
- package/all/copy-overwrite/.claude/commands/project/review.md +63 -0
- package/all/copy-overwrite/.claude/commands/project/setup.md +19 -0
- package/all/copy-overwrite/.claude/commands/project/verify.md +38 -0
- package/all/copy-overwrite/.claude/commands/pull-request/review.md +12 -0
- package/all/copy-overwrite/.claude/commands/rules/format-md.md +72 -0
- package/all/copy-overwrite/.claude/commands/sonarqube/check.md +6 -0
- package/all/copy-overwrite/.claude/commands/sonarqube/fix.md +3 -0
- package/all/copy-overwrite/.claude/hooks/README.md +301 -0
- package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +181 -0
- package/all/copy-overwrite/.claude/settings.json +41 -0
- package/all/copy-overwrite/.claude/settings.local.json.example +14 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/SKILL.md +405 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +416 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +316 -0
- package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +118 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/SKILL.md +210 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/all/copy-overwrite/CLAUDE.md +77 -0
- package/all/copy-overwrite/HUMAN.md +17 -0
- package/all/copy-overwrite/specs/.keep +0 -0
- package/all/create-only/PROJECT_RULES.md +0 -0
- package/cdk/merge/package.json +20 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +107 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +45 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +58 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/core/config.d.ts +73 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +36 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lisa.d.ts +81 -0
- package/dist/core/lisa.d.ts.map +1 -0
- package/dist/core/lisa.js +459 -0
- package/dist/core/lisa.js.map +1 -0
- package/dist/core/manifest.d.ts +58 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +104 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/detection/detector.interface.d.ts +15 -0
- package/dist/detection/detector.interface.d.ts.map +1 -0
- package/dist/detection/detector.interface.js +2 -0
- package/dist/detection/detector.interface.js.map +1 -0
- package/dist/detection/detectors/cdk.d.ts +10 -0
- package/dist/detection/detectors/cdk.d.ts.map +1 -0
- package/dist/detection/detectors/cdk.js +34 -0
- package/dist/detection/detectors/cdk.js.map +1 -0
- package/dist/detection/detectors/expo.d.ts +10 -0
- package/dist/detection/detectors/expo.d.ts.map +1 -0
- package/dist/detection/detectors/expo.js +30 -0
- package/dist/detection/detectors/expo.js.map +1 -0
- package/dist/detection/detectors/nestjs.d.ts +10 -0
- package/dist/detection/detectors/nestjs.d.ts.map +1 -0
- package/dist/detection/detectors/nestjs.js +34 -0
- package/dist/detection/detectors/nestjs.js.map +1 -0
- package/dist/detection/detectors/npm-package.d.ts +13 -0
- package/dist/detection/detectors/npm-package.d.ts.map +1 -0
- package/dist/detection/detectors/npm-package.js +30 -0
- package/dist/detection/detectors/npm-package.js.map +1 -0
- package/dist/detection/detectors/typescript.d.ts +10 -0
- package/dist/detection/detectors/typescript.d.ts.map +1 -0
- package/dist/detection/detectors/typescript.js +25 -0
- package/dist/detection/detectors/typescript.js.map +1 -0
- package/dist/detection/index.d.ts +24 -0
- package/dist/detection/index.d.ts.map +1 -0
- package/dist/detection/index.js +57 -0
- package/dist/detection/index.js.map +1 -0
- package/dist/errors/index.d.ts +69 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +110 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/console-logger.d.ts +12 -0
- package/dist/logging/console-logger.d.ts.map +1 -0
- package/dist/logging/console-logger.js +22 -0
- package/dist/logging/console-logger.js.map +1 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.interface.d.ts +20 -0
- package/dist/logging/logger.interface.d.ts.map +1 -0
- package/dist/logging/logger.interface.js +2 -0
- package/dist/logging/logger.interface.js.map +1 -0
- package/dist/logging/silent-logger.d.ts +12 -0
- package/dist/logging/silent-logger.d.ts.map +1 -0
- package/dist/logging/silent-logger.js +21 -0
- package/dist/logging/silent-logger.js.map +1 -0
- package/dist/strategies/copy-contents.d.ts +14 -0
- package/dist/strategies/copy-contents.d.ts.map +1 -0
- package/dist/strategies/copy-contents.js +69 -0
- package/dist/strategies/copy-contents.js.map +1 -0
- package/dist/strategies/copy-overwrite.d.ts +14 -0
- package/dist/strategies/copy-overwrite.d.ts.map +1 -0
- package/dist/strategies/copy-overwrite.js +47 -0
- package/dist/strategies/copy-overwrite.js.map +1 -0
- package/dist/strategies/create-only.d.ts +13 -0
- package/dist/strategies/create-only.d.ts.map +1 -0
- package/dist/strategies/create-only.js +30 -0
- package/dist/strategies/create-only.js.map +1 -0
- package/dist/strategies/index.d.ts +31 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/index.js +52 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/strategies/merge.d.ts +13 -0
- package/dist/strategies/merge.d.ts.map +1 -0
- package/dist/strategies/merge.js +60 -0
- package/dist/strategies/merge.js.map +1 -0
- package/dist/strategies/strategy.interface.d.ts +31 -0
- package/dist/strategies/strategy.interface.d.ts.map +1 -0
- package/dist/strategies/strategy.interface.js +2 -0
- package/dist/strategies/strategy.interface.js.map +1 -0
- package/dist/transaction/backup.d.ts +38 -0
- package/dist/transaction/backup.d.ts.map +1 -0
- package/dist/transaction/backup.js +97 -0
- package/dist/transaction/backup.js.map +1 -0
- package/dist/transaction/index.d.ts +4 -0
- package/dist/transaction/index.d.ts.map +1 -0
- package/dist/transaction/index.js +3 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/transaction/transaction.d.ts +34 -0
- package/dist/transaction/transaction.d.ts.map +1 -0
- package/dist/transaction/transaction.js +68 -0
- package/dist/transaction/transaction.js.map +1 -0
- package/dist/utils/file-operations.d.ts +29 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +84 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-utils.d.ts +22 -0
- package/dist/utils/json-utils.d.ts.map +1 -0
- package/dist/utils/json-utils.js +57 -0
- package/dist/utils/json-utils.js.map +1 -0
- package/dist/utils/path-utils.d.ts +21 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +35 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/eslint-plugin-code-organization/README.md +149 -0
- package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
- package/eslint-plugin-code-organization/index.js +23 -0
- package/eslint-plugin-code-organization/package.json +10 -0
- package/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
- package/expo/copy-overwrite/.claude/skills/apollo-client/SKILL.md +238 -0
- package/expo/copy-overwrite/.claude/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +327 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/SKILL.md +299 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/examples.md +749 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/patterns.md +318 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +198 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +207 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +414 -0
- package/expo/copy-overwrite/.claude/skills/directory-structure/SKILL.md +202 -0
- package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +443 -0
- package/expo/copy-overwrite/.claude/skills/expo-env-config/SKILL.md +309 -0
- package/expo/copy-overwrite/.claude/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/SKILL.md +431 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +169 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/SKILL.md +411 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +354 -0
- package/expo/copy-overwrite/.claude/skills/local-state/SKILL.md +362 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/async-storage.md +505 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/persistence-patterns.md +711 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/reactive-variables.md +446 -0
- package/expo/copy-overwrite/.claude/skills/playwright-selectors/SKILL.md +223 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/SKILL.md +319 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/async-patterns.md +420 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/expo-router-testing.md +556 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/mocking-patterns.md +590 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/query-priority.md +291 -0
- package/expo/copy-overwrite/.easignore.extra +2 -0
- package/expo/copy-overwrite/.mcp.json +33 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/README.md +234 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +84 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +196 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +289 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +32 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/package.json +10 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +230 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +91 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +178 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +238 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +260 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +29 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/package.json +10 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +51 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +55 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +73 -0
- package/expo/copy-overwrite/eslint.config.mjs +560 -0
- package/expo/copy-overwrite/lighthouserc.js +194 -0
- package/expo/create-only/lighthouserc-config.json +28 -0
- package/expo/merge/package.json +132 -0
- package/lisa.sh +35 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/SKILL.md +176 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +536 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/SKILL.md +275 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/nestjs/merge/package.json +75 -0
- package/package.json +124 -0
- package/typescript/copy-contents/.husky/commit-msg +91 -0
- package/typescript/copy-contents/.husky/pre-commit +96 -0
- package/typescript/copy-contents/.husky/pre-push +211 -0
- package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +74 -0
- package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +59 -0
- package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +103 -0
- package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +388 -0
- package/typescript/copy-overwrite/.github/README.md +455 -0
- package/typescript/copy-overwrite/.github/dependabot.yml +40 -0
- package/typescript/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +129 -0
- package/typescript/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +354 -0
- package/typescript/copy-overwrite/.github/k6/README.md +386 -0
- package/typescript/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +264 -0
- package/typescript/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +115 -0
- package/typescript/copy-overwrite/.github/k6/examples/data-driven-test.js +268 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/load.js +142 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/load.json +27 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/smoke.js +26 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/smoke.json +20 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/soak.js +244 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/soak.json +29 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/spike.js +180 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/spike.json +32 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/stress.js +206 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/stress.json +38 -0
- package/typescript/copy-overwrite/.github/k6/scripts/api-test.js +452 -0
- package/typescript/copy-overwrite/.github/k6/scripts/default-test.js +185 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/normal.json +30 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/relaxed.json +21 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/strict.json +29 -0
- package/typescript/copy-overwrite/.github/workflows/build.yml +72 -0
- package/typescript/copy-overwrite/.github/workflows/ci.yml +49 -0
- package/typescript/copy-overwrite/.github/workflows/claude.yml +51 -0
- package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +113 -0
- package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +195 -0
- package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +267 -0
- package/typescript/copy-overwrite/.github/workflows/deploy.yml +228 -0
- package/typescript/copy-overwrite/.github/workflows/k6-load-test-README.md +230 -0
- package/typescript/copy-overwrite/.github/workflows/lighthouse.yml +68 -0
- package/typescript/copy-overwrite/.github/workflows/load-test.yml +282 -0
- package/typescript/copy-overwrite/.github/workflows/quality.yml +1737 -0
- package/typescript/copy-overwrite/.github/workflows/release.yml +1599 -0
- package/typescript/copy-overwrite/.gitleaksignore +28 -0
- package/typescript/copy-overwrite/.nvmrc +1 -0
- package/typescript/copy-overwrite/.prettierignore +23 -0
- package/typescript/copy-overwrite/.prettierrc.json +22 -0
- package/typescript/copy-overwrite/.versionrc +42 -0
- package/typescript/copy-overwrite/.yamllint +20 -0
- package/typescript/copy-overwrite/commitlint.config.js +11 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/README.md +149 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +23 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/package.json +10 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
- package/typescript/copy-overwrite/eslint.config.mjs +390 -0
- package/typescript/copy-overwrite/eslint.ignore.config.json +57 -0
- package/typescript/copy-overwrite/eslint.thresholds.config.json +5 -0
- package/typescript/github-rulesets/base.json +106 -0
- package/typescript/merge/.claude/settings.json +28 -0
- package/typescript/merge/package.json +71 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# K6 Load Testing Integration Guide
|
|
2
|
+
|
|
3
|
+
This guide provides patterns and best practices for integrating the k6 load testing workflow into your deployment pipelines.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
1. [Integration Patterns](#integration-patterns)
|
|
8
|
+
2. [Multi-Environment Testing](#multi-environment-testing)
|
|
9
|
+
3. [Scheduled Testing](#scheduled-testing)
|
|
10
|
+
4. [Cost Optimization](#cost-optimization)
|
|
11
|
+
5. [Troubleshooting](#troubleshooting)
|
|
12
|
+
6. [Best Practices](#best-practices)
|
|
13
|
+
|
|
14
|
+
## Integration Patterns
|
|
15
|
+
|
|
16
|
+
### 1. Post-Deployment Smoke Testing
|
|
17
|
+
|
|
18
|
+
The most common pattern is running a smoke test immediately after deployment to verify basic functionality.
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
jobs:
|
|
22
|
+
deploy:
|
|
23
|
+
# Your deployment job
|
|
24
|
+
|
|
25
|
+
smoke-test:
|
|
26
|
+
needs: deploy
|
|
27
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
28
|
+
with:
|
|
29
|
+
environment: ${{ inputs.environment }}
|
|
30
|
+
test_scenario: smoke
|
|
31
|
+
base_url: ${{ needs.deploy.outputs.url }}
|
|
32
|
+
fail_on_threshold: true # Fail fast for smoke tests
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**When to use:**
|
|
36
|
+
- After every deployment
|
|
37
|
+
- As a deployment validation gate
|
|
38
|
+
- For rapid feedback on deployment health
|
|
39
|
+
|
|
40
|
+
### 2. Progressive Load Testing
|
|
41
|
+
|
|
42
|
+
Run increasingly intensive tests as you move through environments.
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
jobs:
|
|
46
|
+
test-suite:
|
|
47
|
+
strategy:
|
|
48
|
+
matrix:
|
|
49
|
+
include:
|
|
50
|
+
- env: development
|
|
51
|
+
scenario: smoke
|
|
52
|
+
fail_on_threshold: false
|
|
53
|
+
- env: staging
|
|
54
|
+
scenario: load
|
|
55
|
+
fail_on_threshold: true
|
|
56
|
+
- env: production
|
|
57
|
+
scenario: smoke
|
|
58
|
+
fail_on_threshold: true
|
|
59
|
+
|
|
60
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
61
|
+
with:
|
|
62
|
+
environment: ${{ matrix.env }}
|
|
63
|
+
test_scenario: ${{ matrix.scenario }}
|
|
64
|
+
base_url: ${{ vars[format('{0}_URL', matrix.env)] }}
|
|
65
|
+
fail_on_threshold: ${{ matrix.fail_on_threshold }}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**When to use:**
|
|
69
|
+
- Multi-stage deployment pipelines
|
|
70
|
+
- When production can only handle limited testing
|
|
71
|
+
- For risk-based testing strategies
|
|
72
|
+
|
|
73
|
+
### 3. Gated Production Deployment
|
|
74
|
+
|
|
75
|
+
Use performance tests as a quality gate before production deployment.
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
jobs:
|
|
79
|
+
staging-deploy:
|
|
80
|
+
# Deploy to staging
|
|
81
|
+
|
|
82
|
+
performance-gate:
|
|
83
|
+
needs: staging-deploy
|
|
84
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
85
|
+
with:
|
|
86
|
+
environment: staging
|
|
87
|
+
test_scenario: load
|
|
88
|
+
base_url: ${{ needs.staging-deploy.outputs.url }}
|
|
89
|
+
fail_on_threshold: true
|
|
90
|
+
|
|
91
|
+
production-deploy:
|
|
92
|
+
needs: performance-gate
|
|
93
|
+
if: success()
|
|
94
|
+
# Deploy to production only if performance tests pass
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**When to use:**
|
|
98
|
+
- High-traffic applications
|
|
99
|
+
- When performance SLAs are critical
|
|
100
|
+
- For applications with strict performance requirements
|
|
101
|
+
|
|
102
|
+
### 4. Rollback on Performance Degradation
|
|
103
|
+
|
|
104
|
+
Automatically rollback deployments that fail performance tests.
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
jobs:
|
|
108
|
+
deploy:
|
|
109
|
+
outputs:
|
|
110
|
+
previous_version: ${{ steps.get_version.outputs.previous }}
|
|
111
|
+
|
|
112
|
+
performance-test:
|
|
113
|
+
needs: deploy
|
|
114
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
115
|
+
with:
|
|
116
|
+
environment: ${{ inputs.environment }}
|
|
117
|
+
test_scenario: load
|
|
118
|
+
base_url: ${{ needs.deploy.outputs.url }}
|
|
119
|
+
|
|
120
|
+
rollback:
|
|
121
|
+
needs: [deploy, performance-test]
|
|
122
|
+
if: failure() && needs.performance-test.result == 'failure'
|
|
123
|
+
runs-on: ubuntu-latest
|
|
124
|
+
steps:
|
|
125
|
+
- name: Rollback deployment
|
|
126
|
+
run: |
|
|
127
|
+
# Your rollback logic here
|
|
128
|
+
echo "Rolling back to version ${{ needs.deploy.outputs.previous_version }}"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Multi-Environment Testing
|
|
132
|
+
|
|
133
|
+
### Strategy 1: Environment-Specific Configurations
|
|
134
|
+
|
|
135
|
+
Use different test configurations for each environment:
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
with:
|
|
139
|
+
test_scenario: ${{ inputs.environment == 'production' && 'smoke' || 'load' }}
|
|
140
|
+
virtual_users: ${{ inputs.environment == 'production' && 5 || 50 }}
|
|
141
|
+
test_duration: ${{ inputs.environment == 'production' && '1m' || '5m' }}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Strategy 2: Custom Threshold Files
|
|
145
|
+
|
|
146
|
+
Create environment-specific threshold configurations:
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
with:
|
|
150
|
+
thresholds_config: .github/k6/thresholds/${{ inputs.environment }}.json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Strategy 3: Progressive Testing
|
|
154
|
+
|
|
155
|
+
| Environment | Test Type | Duration | VUs | Purpose |
|
|
156
|
+
|------------|-----------|----------|-----|---------|
|
|
157
|
+
| Development | Smoke | 1m | 1 | Basic validation |
|
|
158
|
+
| Staging | Load | 10m | 50 | Full performance test |
|
|
159
|
+
| Production | Smoke | 2m | 5 | Health verification |
|
|
160
|
+
| Production | Soak | 1h | 10 | Weekend/monthly test |
|
|
161
|
+
|
|
162
|
+
## Scheduled Testing
|
|
163
|
+
|
|
164
|
+
### Daily Performance Baseline
|
|
165
|
+
|
|
166
|
+
Run performance tests on a schedule to detect gradual degradation:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
name: Scheduled Performance Tests
|
|
170
|
+
|
|
171
|
+
on:
|
|
172
|
+
schedule:
|
|
173
|
+
- cron: '0 2 * * *' # 2 AM daily
|
|
174
|
+
workflow_dispatch:
|
|
175
|
+
|
|
176
|
+
jobs:
|
|
177
|
+
baseline-test:
|
|
178
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
179
|
+
with:
|
|
180
|
+
environment: production
|
|
181
|
+
test_scenario: load
|
|
182
|
+
base_url: ${{ vars.PRODUCTION_URL }}
|
|
183
|
+
virtual_users: 20 # Lower than peak for baseline
|
|
184
|
+
fail_on_threshold: false # Don't fail, just report
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Weekly Stress Testing
|
|
188
|
+
|
|
189
|
+
Run intensive tests during low-traffic periods:
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
on:
|
|
193
|
+
schedule:
|
|
194
|
+
- cron: '0 3 * * 0' # 3 AM Sunday
|
|
195
|
+
|
|
196
|
+
jobs:
|
|
197
|
+
stress-test:
|
|
198
|
+
uses: ./.github/workflows/k6-load-test.yml
|
|
199
|
+
with:
|
|
200
|
+
environment: staging
|
|
201
|
+
test_scenario: stress
|
|
202
|
+
base_url: ${{ vars.STAGING_URL }}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Cost Optimization
|
|
206
|
+
|
|
207
|
+
### 1. Smart Test Selection
|
|
208
|
+
|
|
209
|
+
Minimize GitHub Actions minutes by running appropriate tests:
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
# Only run expensive tests on main branch
|
|
213
|
+
if: github.ref == 'refs/heads/main'
|
|
214
|
+
with:
|
|
215
|
+
test_scenario: ${{ github.event_name == 'pull_request' && 'smoke' || 'load' }}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 2. Conditional Testing
|
|
219
|
+
|
|
220
|
+
Skip tests for non-critical changes:
|
|
221
|
+
|
|
222
|
+
```yaml
|
|
223
|
+
# Skip tests for documentation changes
|
|
224
|
+
if: |
|
|
225
|
+
!contains(github.event.head_commit.message, '[skip-tests]') &&
|
|
226
|
+
!contains(fromJson('["docs", "README", "LICENSE"]'), github.event.head_commit.modified[0])
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 3. Resource Optimization
|
|
230
|
+
|
|
231
|
+
- **Development**: Smoke tests only (1 minute)
|
|
232
|
+
- **Pull Requests**: Smoke tests (1 minute)
|
|
233
|
+
- **Staging**: Full load tests (10 minutes)
|
|
234
|
+
- **Production**: Smoke tests, with weekly load tests
|
|
235
|
+
- **Use k6 Cloud**: For tests requiring high concurrency
|
|
236
|
+
|
|
237
|
+
### 4. Cost Calculation
|
|
238
|
+
|
|
239
|
+
| Test Type | Duration | Frequency | Monthly Minutes |
|
|
240
|
+
|-----------|----------|-----------|-----------------|
|
|
241
|
+
| Smoke | 2m | Every deploy (~100/mo) | 200 |
|
|
242
|
+
| Load | 10m | Daily staging | 300 |
|
|
243
|
+
| Stress | 30m | Weekly | 120 |
|
|
244
|
+
| **Total** | | | **620 minutes** |
|
|
245
|
+
|
|
246
|
+
## Troubleshooting
|
|
247
|
+
|
|
248
|
+
### Common Issues and Solutions
|
|
249
|
+
|
|
250
|
+
#### 1. Base URL Not Accessible
|
|
251
|
+
|
|
252
|
+
**Error**: `Base URL https://example.com is not accessible. Status: 404`
|
|
253
|
+
|
|
254
|
+
**Solutions**:
|
|
255
|
+
- Ensure deployment is complete before testing
|
|
256
|
+
- Add a health check wait step:
|
|
257
|
+
```yaml
|
|
258
|
+
- name: Wait for deployment
|
|
259
|
+
run: |
|
|
260
|
+
for i in {1..30}; do
|
|
261
|
+
if curl -s -o /dev/null -w "%{http_code}" ${{ inputs.base_url }}/health | grep -q "200"; then
|
|
262
|
+
echo "Application is ready"
|
|
263
|
+
break
|
|
264
|
+
fi
|
|
265
|
+
echo "Waiting for application to be ready..."
|
|
266
|
+
sleep 10
|
|
267
|
+
done
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### 2. Authentication Failures
|
|
271
|
+
|
|
272
|
+
**Error**: `GET /api/items: status is 401`
|
|
273
|
+
|
|
274
|
+
**Solutions**:
|
|
275
|
+
- Provide authentication headers via secrets:
|
|
276
|
+
```yaml
|
|
277
|
+
secrets:
|
|
278
|
+
CUSTOM_HEADERS: |
|
|
279
|
+
{
|
|
280
|
+
"Authorization": "Bearer ${{ secrets.API_TOKEN }}"
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### 3. Threshold Failures
|
|
285
|
+
|
|
286
|
+
**Error**: `✗ http_req_duration..........: avg=1523.45ms p(95)=2103.22ms`
|
|
287
|
+
|
|
288
|
+
**Solutions**:
|
|
289
|
+
- Review if thresholds are realistic for the environment
|
|
290
|
+
- Use environment-specific thresholds
|
|
291
|
+
- Consider gradual threshold tightening
|
|
292
|
+
|
|
293
|
+
#### 4. High Error Rates
|
|
294
|
+
|
|
295
|
+
**Error**: `✗ http_req_failed...........: 12.50% ✓ 250 ✗ 2250`
|
|
296
|
+
|
|
297
|
+
**Solutions**:
|
|
298
|
+
- Check rate limiting on the target server
|
|
299
|
+
- Reduce virtual users or add ramping
|
|
300
|
+
- Verify the application can handle the load
|
|
301
|
+
|
|
302
|
+
#### 5. Artifacts Too Large
|
|
303
|
+
|
|
304
|
+
**Error**: `Warning: Artifact k6-results-* is 103MB, exceeding the 100MB limit`
|
|
305
|
+
|
|
306
|
+
**Solutions**:
|
|
307
|
+
- Reduce test duration
|
|
308
|
+
- Limit output formats (remove CSV if not needed)
|
|
309
|
+
- Compress results before upload
|
|
310
|
+
|
|
311
|
+
## Best Practices
|
|
312
|
+
|
|
313
|
+
### 1. Start Small
|
|
314
|
+
- Begin with smoke tests
|
|
315
|
+
- Gradually add more complex scenarios
|
|
316
|
+
- Build confidence before intensive testing
|
|
317
|
+
|
|
318
|
+
### 2. Environment Isolation
|
|
319
|
+
- Never run stress tests on production
|
|
320
|
+
- Use staging for intensive testing
|
|
321
|
+
- Keep production tests minimal
|
|
322
|
+
|
|
323
|
+
### 3. Meaningful Thresholds
|
|
324
|
+
- Base thresholds on actual SLAs
|
|
325
|
+
- Start with relaxed thresholds
|
|
326
|
+
- Tighten gradually based on data
|
|
327
|
+
|
|
328
|
+
### 4. Test Data Management
|
|
329
|
+
- Use test accounts for authenticated endpoints
|
|
330
|
+
- Clean up test data after runs
|
|
331
|
+
- Avoid testing with production data
|
|
332
|
+
|
|
333
|
+
### 5. Monitoring Integration
|
|
334
|
+
- Compare k6 results with APM data
|
|
335
|
+
- Correlate test times with system metrics
|
|
336
|
+
- Use results to set alerting thresholds
|
|
337
|
+
|
|
338
|
+
### 6. Version Control
|
|
339
|
+
- Track test scripts in the repository
|
|
340
|
+
- Version threshold configurations
|
|
341
|
+
- Document changes to test scenarios
|
|
342
|
+
|
|
343
|
+
### 7. Team Communication
|
|
344
|
+
- Share test results in PR comments
|
|
345
|
+
- Document performance requirements
|
|
346
|
+
- Make thresholds visible to all stakeholders
|
|
347
|
+
|
|
348
|
+
## Next Steps
|
|
349
|
+
|
|
350
|
+
1. Start with smoke tests in your deployment pipeline
|
|
351
|
+
2. Establish baseline metrics from initial runs
|
|
352
|
+
3. Gradually add more scenarios based on needs
|
|
353
|
+
4. Customize thresholds based on your SLAs
|
|
354
|
+
5. Integrate results with your monitoring stack
|