@codyswann/lisa 1.0.0 → 1.0.5
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/README.md +244 -36
- package/all/copy-overwrite/.claude/README.md +1 -3
- package/all/copy-overwrite/.claude/REFERENCE.md +519 -0
- package/all/copy-overwrite/.claude/agents/skill-evaluator.md +7 -7
- package/all/copy-overwrite/.claude/agents/test-coverage-agent.md +17 -0
- package/all/copy-overwrite/.claude/commands/git/commit.md +9 -5
- package/all/copy-overwrite/.claude/commands/git/submit-pr.md +1 -1
- package/all/copy-overwrite/.claude/commands/lisa/review-implementation.md +209 -0
- package/all/copy-overwrite/.claude/commands/project/add-test-coverage.md +58 -0
- package/all/copy-overwrite/.claude/commands/project/archive.md +1 -1
- package/all/copy-overwrite/.claude/commands/project/complete-task.md +53 -1
- package/all/copy-overwrite/.claude/commands/project/debrief.md +12 -23
- package/all/copy-overwrite/.claude/commands/project/execute.md +33 -77
- package/all/copy-overwrite/.claude/commands/project/fix-linter-error.md +87 -0
- package/all/copy-overwrite/.claude/commands/project/implement.md +24 -28
- package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +30 -55
- package/all/copy-overwrite/.claude/commands/project/plan.md +87 -242
- package/all/copy-overwrite/.claude/commands/project/reduce-max-lines-per-function.md +76 -0
- package/all/copy-overwrite/.claude/commands/project/reduce-max-lines.md +75 -0
- package/all/copy-overwrite/.claude/commands/project/research.md +86 -188
- package/all/copy-overwrite/.claude/commands/project/review.md +19 -38
- package/all/copy-overwrite/.claude/commands/project/setup.md +1 -1
- package/all/copy-overwrite/.claude/commands/project/verify.md +62 -25
- package/all/copy-overwrite/.claude/commands/pull-request/review.md +25 -7
- package/all/copy-overwrite/.claude/commands/tasks/load.md +63 -0
- package/all/copy-overwrite/.claude/commands/tasks/sync.md +84 -0
- package/all/copy-overwrite/.claude/hooks/README.md +75 -0
- package/all/copy-overwrite/.claude/hooks/check-tired-boss.sh +61 -0
- package/all/copy-overwrite/.claude/hooks/debug-hook.sh +47 -0
- package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +2 -0
- package/all/copy-overwrite/.claude/hooks/sync-tasks.sh +95 -0
- package/all/copy-overwrite/.claude/{skills/coding-philosophy/SKILL.md → rules/coding-philosophy.md} +93 -70
- package/all/copy-overwrite/.claude/settings.json +35 -14
- package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +41 -9
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +2 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +2 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +2 -0
- package/all/copy-overwrite/.safety-net.json +25 -0
- package/all/copy-overwrite/CLAUDE.md +8 -30
- package/all/copy-overwrite/HUMAN.md +517 -17
- package/all/create-only/.claude/rules/PROJECT_RULES.md +9 -0
- package/all/create-only/scripts/setup-deploy-key.sh +190 -0
- package/all/deletions.json +5 -0
- package/cdk/copy-overwrite/.github/workflows/ci.yml +142 -0
- package/cdk/copy-overwrite/.github/workflows/deploy.yml +59 -0
- package/cdk/copy-overwrite/eslint.cdk.ts +175 -0
- package/cdk/copy-overwrite/eslint.config.ts +51 -0
- package/cdk/copy-overwrite/eslint.slow.config.ts +80 -0
- package/cdk/copy-overwrite/knip.json +53 -0
- package/cdk/copy-overwrite/tsconfig.eslint.json +11 -0
- package/cdk/merge/package.json +17 -1
- package/dist/cli/index.d.ts +3 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +83 -64
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/prompts.d.ts +17 -3
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +52 -16
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/config.d.ts +13 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +17 -9
- package/dist/core/config.js.map +1 -1
- package/dist/core/git-service.d.ts +40 -0
- package/dist/core/git-service.d.ts.map +1 -0
- package/dist/core/git-service.js +52 -0
- package/dist/core/git-service.js.map +1 -0
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +3 -3
- package/dist/core/lisa.d.ts +124 -7
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +423 -221
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/manifest.d.ts +5 -1
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +22 -16
- package/dist/core/manifest.js.map +1 -1
- package/dist/detection/detector.interface.d.ts +1 -1
- package/dist/detection/detectors/cdk.d.ts +6 -1
- package/dist/detection/detectors/cdk.d.ts.map +1 -1
- package/dist/detection/detectors/cdk.js +16 -8
- package/dist/detection/detectors/cdk.js.map +1 -1
- package/dist/detection/detectors/expo.d.ts +6 -1
- package/dist/detection/detectors/expo.d.ts.map +1 -1
- package/dist/detection/detectors/expo.js +13 -8
- package/dist/detection/detectors/expo.js.map +1 -1
- package/dist/detection/detectors/nestjs.d.ts +7 -2
- package/dist/detection/detectors/nestjs.d.ts.map +1 -1
- package/dist/detection/detectors/nestjs.js +17 -9
- package/dist/detection/detectors/nestjs.js.map +1 -1
- package/dist/detection/detectors/npm-package.d.ts +6 -1
- package/dist/detection/detectors/npm-package.d.ts.map +1 -1
- package/dist/detection/detectors/npm-package.js +9 -4
- package/dist/detection/detectors/npm-package.js.map +1 -1
- package/dist/detection/detectors/typescript.d.ts +6 -1
- package/dist/detection/detectors/typescript.d.ts.map +1 -1
- package/dist/detection/detectors/typescript.js +12 -7
- package/dist/detection/detectors/typescript.js.map +1 -1
- package/dist/detection/index.d.ts +13 -3
- package/dist/detection/index.d.ts.map +1 -1
- package/dist/detection/index.js +17 -7
- package/dist/detection/index.js.map +1 -1
- package/dist/errors/index.d.ts +66 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +89 -17
- package/dist/errors/index.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/logging/console-logger.d.ts +21 -1
- package/dist/logging/console-logger.d.ts.map +1 -1
- package/dist/logging/console-logger.js +26 -6
- package/dist/logging/console-logger.js.map +1 -1
- package/dist/logging/index.d.ts +3 -3
- package/dist/logging/index.js +2 -2
- package/dist/logging/logger.interface.d.ts +1 -1
- package/dist/logging/silent-logger.d.ts +21 -1
- package/dist/logging/silent-logger.d.ts.map +1 -1
- package/dist/logging/silent-logger.js +20 -0
- package/dist/logging/silent-logger.js.map +1 -1
- package/dist/strategies/copy-contents.d.ts +47 -6
- package/dist/strategies/copy-contents.d.ts.map +1 -1
- package/dist/strategies/copy-contents.js +99 -49
- package/dist/strategies/copy-contents.js.map +1 -1
- package/dist/strategies/copy-overwrite.d.ts +10 -2
- package/dist/strategies/copy-overwrite.d.ts.map +1 -1
- package/dist/strategies/copy-overwrite.js +17 -9
- package/dist/strategies/copy-overwrite.js.map +1 -1
- package/dist/strategies/create-only.d.ts +10 -2
- package/dist/strategies/create-only.d.ts.map +1 -1
- package/dist/strategies/create-only.js +14 -6
- package/dist/strategies/create-only.js.map +1 -1
- package/dist/strategies/index.d.ts +17 -7
- package/dist/strategies/index.d.ts.map +1 -1
- package/dist/strategies/index.js +19 -9
- package/dist/strategies/index.js.map +1 -1
- package/dist/strategies/merge.d.ts +10 -2
- package/dist/strategies/merge.d.ts.map +1 -1
- package/dist/strategies/merge.js +21 -21
- package/dist/strategies/merge.js.map +1 -1
- package/dist/strategies/strategy.interface.d.ts +1 -1
- package/dist/strategies/strategy.interface.d.ts.map +1 -1
- package/dist/transaction/backup.d.ts +15 -1
- package/dist/transaction/backup.d.ts.map +1 -1
- package/dist/transaction/backup.js +47 -12
- package/dist/transaction/backup.js.map +1 -1
- package/dist/transaction/index.d.ts +3 -3
- package/dist/transaction/index.js +2 -2
- package/dist/transaction/transaction.d.ts +25 -2
- package/dist/transaction/transaction.d.ts.map +1 -1
- package/dist/transaction/transaction.js +25 -2
- package/dist/transaction/transaction.js.map +1 -1
- package/dist/utils/file-operations.d.ts +21 -0
- package/dist/utils/file-operations.d.ts.map +1 -1
- package/dist/utils/file-operations.js +48 -12
- package/dist/utils/file-operations.js.map +1 -1
- package/dist/utils/index.d.ts +3 -3
- package/dist/utils/index.js +3 -3
- package/dist/utils/json-utils.d.ts +12 -0
- package/dist/utils/json-utils.d.ts.map +1 -1
- package/dist/utils/json-utils.js +17 -5
- package/dist/utils/json-utils.js.map +1 -1
- package/dist/utils/path-utils.d.ts +11 -0
- package/dist/utils/path-utils.d.ts.map +1 -1
- package/dist/utils/path-utils.js +12 -1
- package/dist/utils/path-utils.js.map +1 -1
- package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
- package/eslint-plugin-code-organization/index.js +5 -0
- package/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +2 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +2 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +2 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +2 -0
- package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +2 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +2 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +2 -41
- package/{typescript → expo}/copy-overwrite/.github/workflows/build.yml +3 -0
- package/expo/copy-overwrite/.github/workflows/ci.yml +36 -0
- package/{typescript → expo}/copy-overwrite/.github/workflows/deploy.yml +22 -26
- package/{typescript → expo}/copy-overwrite/.github/workflows/lighthouse.yml +4 -1
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +6 -1
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +0 -68
- package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +5 -3
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +5 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +5 -0
- package/expo/copy-overwrite/eslint.config.ts +53 -0
- package/expo/copy-overwrite/eslint.expo.ts +330 -0
- package/expo/copy-overwrite/eslint.slow.config.ts +86 -0
- package/expo/copy-overwrite/knip.json +132 -0
- package/expo/copy-overwrite/lighthouserc.js +27 -0
- package/expo/copy-overwrite/tsconfig.eslint.json +25 -0
- package/expo/create-only/lighthouserc-config.json +6 -1
- package/expo/merge/package.json +16 -3
- package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +1 -1
- package/{typescript → nestjs}/copy-overwrite/.github/k6/README.md +2 -2
- package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +3 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/data-driven-test.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.js +6 -2
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/api-test.js +5 -0
- package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/default-test.js +5 -0
- package/nestjs/copy-overwrite/.github/workflows/ci.yml +29 -0
- package/nestjs/copy-overwrite/.github/workflows/deploy.yml +291 -0
- package/{typescript → nestjs}/copy-overwrite/.github/workflows/load-test.yml +3 -0
- package/nestjs/copy-overwrite/eslint.config.ts +53 -0
- package/nestjs/copy-overwrite/eslint.nestjs.ts +178 -0
- package/nestjs/merge/package.json +11 -3
- package/package.json +34 -40
- package/typescript/copy-contents/.husky/pre-commit +1 -1
- package/typescript/copy-contents/.husky/pre-push +99 -118
- package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +2 -0
- package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +3 -11
- package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +2 -0
- package/typescript/copy-overwrite/.claude/hooks/sg-scan-on-edit.sh +68 -0
- package/typescript/copy-overwrite/.claude/settings.json +79 -0
- package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +44 -0
- package/typescript/copy-overwrite/.github/README.md +49 -1
- package/typescript/copy-overwrite/.github/dependabot.yml +3 -0
- package/typescript/copy-overwrite/.github/workflows/ci.yml +7 -29
- package/typescript/copy-overwrite/.github/workflows/claude.yml +3 -0
- package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +6 -4
- package/typescript/copy-overwrite/.github/workflows/create-issue-on-failure.yml +176 -0
- package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +3 -1
- package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +3 -1
- package/typescript/copy-overwrite/.github/workflows/lint-slow.yml +40 -0
- package/typescript/copy-overwrite/.github/workflows/quality.yml +151 -38
- package/typescript/copy-overwrite/.github/workflows/release.yml +3 -0
- package/typescript/copy-overwrite/.gitleaksignore +3 -0
- package/typescript/copy-overwrite/.lintstagedrc.json +6 -0
- package/typescript/copy-overwrite/.prettierignore +2 -1
- package/typescript/copy-overwrite/.yamllint +2 -0
- package/typescript/copy-overwrite/ast-grep/rule-tests/.gitkeep +3 -0
- package/typescript/copy-overwrite/ast-grep/rules/.gitkeep +3 -0
- package/typescript/copy-overwrite/ast-grep/utils/.gitkeep +3 -0
- package/typescript/copy-overwrite/{commitlint.config.js → commitlint.config.cjs} +5 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +5 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
- package/typescript/copy-overwrite/eslint.base.ts +430 -0
- package/typescript/copy-overwrite/eslint.config.ts +52 -0
- package/typescript/copy-overwrite/eslint.ignore.config.json +19 -2
- package/typescript/copy-overwrite/eslint.slow.config.ts +69 -0
- package/typescript/copy-overwrite/eslint.typescript.ts +142 -0
- package/typescript/copy-overwrite/knip.json +64 -0
- package/typescript/copy-overwrite/sgconfig.yml +11 -0
- package/typescript/copy-overwrite/tsconfig.eslint.json +9 -0
- package/typescript/create-only/eslint.config.local.ts +24 -0
- package/typescript/{copy-overwrite/eslint.thresholds.config.json → create-only/eslint.thresholds.json} +1 -1
- package/typescript/github-rulesets/base.json +2 -75
- package/typescript/merge/.claude/settings.json +160 -0
- package/typescript/merge/package.json +35 -34
- package/all/copy-overwrite/.claude/commands/rules/format-md.md +0 -72
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +0 -416
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +0 -316
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +0 -73
- package/expo/copy-overwrite/eslint.config.mjs +0 -560
- package/lisa.sh +0 -35
- package/typescript/copy-overwrite/eslint.config.mjs +0 -390
- /package/{all/create-only/PROJECT_RULES.md → cdk/copy-overwrite/.github/workflows/.keep} +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/normal.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/relaxed.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/strict.json +0 -0
- /package/{typescript → nestjs}/copy-overwrite/.github/workflows/k6-load-test-README.md +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
3
|
+
# -----------------------------------------------------------------------------
|
|
4
|
+
# Cascading Issue Creation Workflow
|
|
5
|
+
# -----------------------------------------------------------------------------
|
|
6
|
+
# ⚠️ WARNING: THIS FILE IS AUTO-GENERATED. DO NOT EDIT MANUALLY! ⚠️
|
|
7
|
+
# Any changes may be overwritten by the generation process.
|
|
8
|
+
#
|
|
9
|
+
# This is a dispatcher workflow that intelligently routes failures to the
|
|
10
|
+
# appropriate issue tracking system based on available credentials:
|
|
11
|
+
#
|
|
12
|
+
# 1. If Sentry credentials exist → Create Sentry issue
|
|
13
|
+
# 2. Else if Jira credentials exist → Create Jira issue
|
|
14
|
+
# 3. Else → Create GitHub issue (fallback)
|
|
15
|
+
#
|
|
16
|
+
# Example usage in another workflow:
|
|
17
|
+
# ```yaml
|
|
18
|
+
# create_issue_on_failure:
|
|
19
|
+
# if: failure()
|
|
20
|
+
# uses: ./.github/workflows/create-issue-on-failure.yml
|
|
21
|
+
# with:
|
|
22
|
+
# workflow_name: 'My Workflow'
|
|
23
|
+
# failed_job: 'build_and_test'
|
|
24
|
+
# secrets: inherit
|
|
25
|
+
# ```
|
|
26
|
+
#
|
|
27
|
+
# The workflow automatically detects which system to use based on repository
|
|
28
|
+
# variables and secrets. No configuration needed in the calling workflow.
|
|
29
|
+
|
|
30
|
+
name: 📌 Create Issue on Failure (Auto-Dispatch)
|
|
31
|
+
|
|
32
|
+
on:
|
|
33
|
+
workflow_call:
|
|
34
|
+
inputs:
|
|
35
|
+
workflow_name:
|
|
36
|
+
required: true
|
|
37
|
+
type: string
|
|
38
|
+
description: 'Name of the workflow that failed'
|
|
39
|
+
failed_job:
|
|
40
|
+
required: false
|
|
41
|
+
type: string
|
|
42
|
+
description: 'Name of the job that failed (optional)'
|
|
43
|
+
issue_type:
|
|
44
|
+
required: false
|
|
45
|
+
type: string
|
|
46
|
+
default: 'Bug'
|
|
47
|
+
description: 'Type of issue to create (Bug, Task, etc.)'
|
|
48
|
+
environment:
|
|
49
|
+
required: false
|
|
50
|
+
type: string
|
|
51
|
+
default: 'production'
|
|
52
|
+
description: 'Environment where the failure occurred'
|
|
53
|
+
level:
|
|
54
|
+
required: false
|
|
55
|
+
type: string
|
|
56
|
+
default: 'error'
|
|
57
|
+
description: 'Severity level (debug, info, warning, error, fatal)'
|
|
58
|
+
node_version:
|
|
59
|
+
description: 'Node.js version to use'
|
|
60
|
+
required: false
|
|
61
|
+
default: '22.21.1'
|
|
62
|
+
type: string
|
|
63
|
+
package_manager:
|
|
64
|
+
description: 'Package manager to use (npm, yarn, or bun)'
|
|
65
|
+
required: false
|
|
66
|
+
default: 'npm'
|
|
67
|
+
type: string
|
|
68
|
+
working_directory:
|
|
69
|
+
description: 'Directory to run commands in (if not root)'
|
|
70
|
+
required: false
|
|
71
|
+
default: ''
|
|
72
|
+
type: string
|
|
73
|
+
secrets:
|
|
74
|
+
SENTRY_AUTH_TOKEN:
|
|
75
|
+
required: false
|
|
76
|
+
description: 'Sentry Auth Token (if using Sentry)'
|
|
77
|
+
JIRA_API_TOKEN:
|
|
78
|
+
required: false
|
|
79
|
+
description: 'Jira API token (if using Jira)'
|
|
80
|
+
PAT:
|
|
81
|
+
required: false
|
|
82
|
+
description: 'Personal Access Token (if using GitHub Issues)'
|
|
83
|
+
|
|
84
|
+
# Concurrency is managed by the parent workflow that calls this one
|
|
85
|
+
# This avoids deadlocks between parent and child workflows
|
|
86
|
+
|
|
87
|
+
jobs:
|
|
88
|
+
# Dispatch job determines which system to use based on available credentials
|
|
89
|
+
dispatch:
|
|
90
|
+
name: 🧭 Determine Issue Tracking System
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
timeout-minutes: 5
|
|
93
|
+
outputs:
|
|
94
|
+
use_sentry: ${{ steps.check.outputs.sentry }}
|
|
95
|
+
use_jira: ${{ steps.check.outputs.jira }}
|
|
96
|
+
use_github: ${{ steps.check.outputs.github }}
|
|
97
|
+
steps:
|
|
98
|
+
- name: 🔍 Check Available Credentials
|
|
99
|
+
id: check
|
|
100
|
+
run: |
|
|
101
|
+
# Check for Sentry (highest priority)
|
|
102
|
+
if [ -n "${{ vars.SENTRY_ORG }}" ] && [ -n "${{ vars.SENTRY_PROJECT }}" ] && [ -n "${{ secrets.SENTRY_AUTH_TOKEN }}" ]; then
|
|
103
|
+
echo "sentry=true" >> $GITHUB_OUTPUT
|
|
104
|
+
echo "jira=false" >> $GITHUB_OUTPUT
|
|
105
|
+
echo "github=false" >> $GITHUB_OUTPUT
|
|
106
|
+
echo "✓ Using Sentry for issue tracking"
|
|
107
|
+
exit 0
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# Check for Jira (second priority)
|
|
111
|
+
if [ -n "${{ vars.JIRA_BASE_URL }}" ] && [ -n "${{ vars.JIRA_USER_EMAIL }}" ] && [ -n "${{ vars.JIRA_PROJECT_KEY }}" ] && [ -n "${{ secrets.JIRA_API_TOKEN }}" ]; then
|
|
112
|
+
echo "sentry=false" >> $GITHUB_OUTPUT
|
|
113
|
+
echo "jira=true" >> $GITHUB_OUTPUT
|
|
114
|
+
echo "github=false" >> $GITHUB_OUTPUT
|
|
115
|
+
echo "✓ Using Jira for issue tracking"
|
|
116
|
+
exit 0
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# Fall back to GitHub (always available)
|
|
120
|
+
echo "sentry=false" >> $GITHUB_OUTPUT
|
|
121
|
+
echo "jira=false" >> $GITHUB_OUTPUT
|
|
122
|
+
echo "github=true" >> $GITHUB_OUTPUT
|
|
123
|
+
echo "✓ Using GitHub Issues for issue tracking (fallback)"
|
|
124
|
+
|
|
125
|
+
# Create Sentry issue (if available)
|
|
126
|
+
create_sentry_issue:
|
|
127
|
+
name: 📌 Create Sentry Issue
|
|
128
|
+
needs: [dispatch]
|
|
129
|
+
if: ${{ needs.dispatch.outputs.use_sentry == 'true' }}
|
|
130
|
+
uses: ./.github/workflows/create-sentry-issue-on-failure.yml
|
|
131
|
+
with:
|
|
132
|
+
workflow_name: ${{ inputs.workflow_name }}
|
|
133
|
+
failed_job: ${{ inputs.failed_job }}
|
|
134
|
+
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
|
|
135
|
+
SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
|
|
136
|
+
environment: ${{ inputs.environment }}
|
|
137
|
+
level: ${{ inputs.level }}
|
|
138
|
+
node_version: ${{ inputs.node_version }}
|
|
139
|
+
package_manager: ${{ inputs.package_manager }}
|
|
140
|
+
working_directory: ${{ inputs.working_directory }}
|
|
141
|
+
secrets:
|
|
142
|
+
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
143
|
+
|
|
144
|
+
# Create Jira issue (if available)
|
|
145
|
+
create_jira_issue:
|
|
146
|
+
name: 📌 Create Jira Issue
|
|
147
|
+
needs: [dispatch]
|
|
148
|
+
if: ${{ needs.dispatch.outputs.use_jira == 'true' }}
|
|
149
|
+
uses: ./.github/workflows/create-jira-issue-on-failure.yml
|
|
150
|
+
with:
|
|
151
|
+
workflow_name: ${{ inputs.workflow_name }}
|
|
152
|
+
failed_job: ${{ inputs.failed_job }}
|
|
153
|
+
issue_type: ${{ inputs.issue_type }}
|
|
154
|
+
JIRA_BASE_URL: ${{ vars.JIRA_BASE_URL }}
|
|
155
|
+
JIRA_USER_EMAIL: ${{ vars.JIRA_USER_EMAIL }}
|
|
156
|
+
JIRA_PROJECT_KEY: ${{ vars.JIRA_PROJECT_KEY }}
|
|
157
|
+
node_version: ${{ inputs.node_version }}
|
|
158
|
+
package_manager: ${{ inputs.package_manager }}
|
|
159
|
+
working_directory: ${{ inputs.working_directory }}
|
|
160
|
+
secrets:
|
|
161
|
+
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
|
|
162
|
+
|
|
163
|
+
# Create GitHub issue (fallback)
|
|
164
|
+
create_github_issue:
|
|
165
|
+
name: 📌 Create GitHub Issue
|
|
166
|
+
needs: [dispatch]
|
|
167
|
+
if: ${{ needs.dispatch.outputs.use_github == 'true' }}
|
|
168
|
+
uses: ./.github/workflows/create-github-issue-on-failure.yml
|
|
169
|
+
with:
|
|
170
|
+
workflow_name: ${{ inputs.workflow_name }}
|
|
171
|
+
failed_job: ${{ inputs.failed_job }}
|
|
172
|
+
node_version: ${{ inputs.node_version }}
|
|
173
|
+
package_manager: ${{ inputs.package_manager }}
|
|
174
|
+
working_directory: ${{ inputs.working_directory }}
|
|
175
|
+
secrets:
|
|
176
|
+
PAT: ${{ secrets.PAT }}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
1
3
|
# -----------------------------------------------------------------------------
|
|
2
4
|
# Jira Issue Creation Workflow
|
|
3
5
|
# -----------------------------------------------------------------------------
|
|
@@ -55,7 +57,7 @@ on:
|
|
|
55
57
|
node_version:
|
|
56
58
|
description: 'Node.js version to use'
|
|
57
59
|
required: false
|
|
58
|
-
default: '
|
|
60
|
+
default: '22.21.1'
|
|
59
61
|
type: string
|
|
60
62
|
package_manager:
|
|
61
63
|
description: 'Package manager to use (npm, yarn, or bun)'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
1
3
|
# -----------------------------------------------------------------------------
|
|
2
4
|
# Sentry Issue Creation Workflow
|
|
3
5
|
# -----------------------------------------------------------------------------
|
|
@@ -55,7 +57,7 @@ on:
|
|
|
55
57
|
node_version:
|
|
56
58
|
description: 'Node.js version to use'
|
|
57
59
|
required: false
|
|
58
|
-
default: '
|
|
60
|
+
default: '22.21.1'
|
|
59
61
|
type: string
|
|
60
62
|
package_manager:
|
|
61
63
|
description: 'Package manager to use (npm, yarn, or bun)'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
3
|
+
|
|
4
|
+
name: 🐢 Slow Lint Rules
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
schedule:
|
|
8
|
+
# Run nightly at 2 AM UTC
|
|
9
|
+
- cron: '0 2 * * *'
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
# Allow manual triggering
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint-slow:
|
|
15
|
+
name: 🐢 Slow Lint Rules
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: 📥 Checkout
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: 📦 Setup Bun
|
|
22
|
+
uses: oven-sh/setup-bun@v2
|
|
23
|
+
with:
|
|
24
|
+
bun-version: latest
|
|
25
|
+
|
|
26
|
+
- name: 📦 Install dependencies
|
|
27
|
+
run: bun install --frozen-lockfile
|
|
28
|
+
|
|
29
|
+
- name: 🐢 Run slow lint rules
|
|
30
|
+
run: bun run lint:slow
|
|
31
|
+
|
|
32
|
+
create_issue_on_failure:
|
|
33
|
+
name: 📌 Create Issue on Failure
|
|
34
|
+
needs: [lint-slow]
|
|
35
|
+
if: ${{ failure() }}
|
|
36
|
+
uses: ./.github/workflows/create-issue-on-failure.yml
|
|
37
|
+
with:
|
|
38
|
+
workflow_name: 'Slow Lint Rules'
|
|
39
|
+
failed_job: 'lint-slow'
|
|
40
|
+
secrets: inherit
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
1
3
|
# -----------------------------------------------------------------------------
|
|
2
4
|
# Quality Checks Workflow
|
|
3
5
|
# -----------------------------------------------------------------------------
|
|
@@ -44,7 +46,7 @@ on:
|
|
|
44
46
|
node_version:
|
|
45
47
|
description: 'Node.js version to use'
|
|
46
48
|
required: false
|
|
47
|
-
default: '
|
|
49
|
+
default: '22.21.1'
|
|
48
50
|
type: string
|
|
49
51
|
package_manager:
|
|
50
52
|
description: 'Package manager to use (npm, yarn, or bun)'
|
|
@@ -81,8 +83,18 @@ on:
|
|
|
81
83
|
required: false
|
|
82
84
|
default: false
|
|
83
85
|
type: boolean
|
|
86
|
+
skip_dead_code:
|
|
87
|
+
description: 'Skip the dead code detection job (knip)'
|
|
88
|
+
required: false
|
|
89
|
+
default: false
|
|
90
|
+
type: boolean
|
|
91
|
+
skip_sg_scan:
|
|
92
|
+
description: 'Skip the ast-grep scan job'
|
|
93
|
+
required: false
|
|
94
|
+
default: false
|
|
95
|
+
type: boolean
|
|
84
96
|
skip_jobs:
|
|
85
|
-
description: 'Jobs to skip (comma-separated: lint,typecheck,test,test:unit,test:integration,test:e2e,maestro_e2e,playwright_e2e,format,build,npm_security_scan,github_issue)'
|
|
97
|
+
description: 'Jobs to skip (comma-separated: lint,typecheck,test,test:unit,test:integration,test:e2e,maestro_e2e,playwright_e2e,format,build,dead_code,sg_scan,npm_security_scan,github_issue)'
|
|
86
98
|
required: false
|
|
87
99
|
default: ''
|
|
88
100
|
type: string
|
|
@@ -357,7 +369,7 @@ jobs:
|
|
|
357
369
|
elif [ "${{ inputs.package_manager }}" = "yarn" ]; then
|
|
358
370
|
yarn test
|
|
359
371
|
elif [ "${{ inputs.package_manager }}" = "bun" ]; then
|
|
360
|
-
bun test
|
|
372
|
+
bun run test
|
|
361
373
|
fi
|
|
362
374
|
working-directory: ${{ inputs.working_directory || '.' }}
|
|
363
375
|
|
|
@@ -795,6 +807,121 @@ jobs:
|
|
|
795
807
|
retention-days: 1
|
|
796
808
|
if-no-files-found: ignore
|
|
797
809
|
|
|
810
|
+
dead_code:
|
|
811
|
+
name: 🗑️ Dead Code Detection
|
|
812
|
+
runs-on: ubuntu-latest
|
|
813
|
+
timeout-minutes: 10
|
|
814
|
+
if: ${{ !inputs.skip_dead_code && !contains(inputs.skip_jobs, 'dead_code') }}
|
|
815
|
+
|
|
816
|
+
steps:
|
|
817
|
+
- name: 📥 Checkout repository
|
|
818
|
+
uses: actions/checkout@v4
|
|
819
|
+
|
|
820
|
+
- name: 🔧 Setup Node.js
|
|
821
|
+
uses: actions/setup-node@v4
|
|
822
|
+
with:
|
|
823
|
+
node-version: ${{ inputs.node_version }}
|
|
824
|
+
cache: ${{ inputs.package_manager != 'bun' && inputs.package_manager || '' }}
|
|
825
|
+
|
|
826
|
+
- name: 🍞 Setup Bun
|
|
827
|
+
if: inputs.package_manager == 'bun'
|
|
828
|
+
uses: oven-sh/setup-bun@v2
|
|
829
|
+
with:
|
|
830
|
+
bun-version: latest
|
|
831
|
+
|
|
832
|
+
- name: 📦 Install dependencies
|
|
833
|
+
run: |
|
|
834
|
+
if [ "${{ inputs.package_manager }}" = "npm" ]; then
|
|
835
|
+
npm ci
|
|
836
|
+
elif [ "${{ inputs.package_manager }}" = "yarn" ]; then
|
|
837
|
+
yarn install --frozen-lockfile
|
|
838
|
+
elif [ "${{ inputs.package_manager }}" = "bun" ]; then
|
|
839
|
+
bun install --frozen-lockfile
|
|
840
|
+
fi
|
|
841
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
842
|
+
|
|
843
|
+
- name: 🗑️ Run dead code detection (knip)
|
|
844
|
+
run: ${{ inputs.package_manager }} run knip
|
|
845
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
846
|
+
|
|
847
|
+
sg_scan:
|
|
848
|
+
name: 🔎 AST Grep Scan
|
|
849
|
+
runs-on: ubuntu-latest
|
|
850
|
+
timeout-minutes: 10
|
|
851
|
+
if: ${{ !inputs.skip_sg_scan && !contains(inputs.skip_jobs, 'sg_scan') }}
|
|
852
|
+
|
|
853
|
+
steps:
|
|
854
|
+
- name: 📥 Checkout repository
|
|
855
|
+
uses: actions/checkout@v4
|
|
856
|
+
|
|
857
|
+
- name: 🔧 Setup Node.js
|
|
858
|
+
uses: actions/setup-node@v4
|
|
859
|
+
with:
|
|
860
|
+
node-version: ${{ inputs.node_version }}
|
|
861
|
+
cache: ${{ inputs.package_manager != 'bun' && inputs.package_manager || '' }}
|
|
862
|
+
|
|
863
|
+
- name: 🍞 Setup Bun
|
|
864
|
+
if: inputs.package_manager == 'bun'
|
|
865
|
+
uses: oven-sh/setup-bun@v2
|
|
866
|
+
with:
|
|
867
|
+
bun-version: latest
|
|
868
|
+
|
|
869
|
+
- name: 📦 Install dependencies
|
|
870
|
+
run: |
|
|
871
|
+
if [ "${{ inputs.package_manager }}" = "npm" ]; then
|
|
872
|
+
npm ci
|
|
873
|
+
elif [ "${{ inputs.package_manager }}" = "yarn" ]; then
|
|
874
|
+
yarn install --frozen-lockfile
|
|
875
|
+
elif [ "${{ inputs.package_manager }}" = "bun" ]; then
|
|
876
|
+
bun install --frozen-lockfile
|
|
877
|
+
fi
|
|
878
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
879
|
+
|
|
880
|
+
- name: 🔍 Check for sgconfig.yml
|
|
881
|
+
id: check_config
|
|
882
|
+
run: |
|
|
883
|
+
if [ -f "sgconfig.yml" ]; then
|
|
884
|
+
echo "has_config=true" >> $GITHUB_OUTPUT
|
|
885
|
+
else
|
|
886
|
+
echo "has_config=false" >> $GITHUB_OUTPUT
|
|
887
|
+
fi
|
|
888
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
889
|
+
|
|
890
|
+
- name: 🔍 Check for ast-grep rules
|
|
891
|
+
id: check_rules
|
|
892
|
+
if: steps.check_config.outputs.has_config == 'true'
|
|
893
|
+
run: |
|
|
894
|
+
RULES_DIR="ast-grep/rules"
|
|
895
|
+
if [ -d "$RULES_DIR" ]; then
|
|
896
|
+
RULE_COUNT=$(find "$RULES_DIR" -name "*.yml" -o -name "*.yaml" 2>/dev/null | grep -v ".gitkeep" | wc -l | tr -d ' ')
|
|
897
|
+
if [ "$RULE_COUNT" -gt 0 ]; then
|
|
898
|
+
echo "has_rules=true" >> $GITHUB_OUTPUT
|
|
899
|
+
echo "rule_count=$RULE_COUNT" >> $GITHUB_OUTPUT
|
|
900
|
+
else
|
|
901
|
+
echo "has_rules=false" >> $GITHUB_OUTPUT
|
|
902
|
+
fi
|
|
903
|
+
else
|
|
904
|
+
echo "has_rules=false" >> $GITHUB_OUTPUT
|
|
905
|
+
fi
|
|
906
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
907
|
+
|
|
908
|
+
- name: 🔎 Run ast-grep scan
|
|
909
|
+
if: steps.check_config.outputs.has_config == 'true' && steps.check_rules.outputs.has_rules == 'true'
|
|
910
|
+
run: ${{ inputs.package_manager }} run sg:scan
|
|
911
|
+
working-directory: ${{ inputs.working_directory || '.' }}
|
|
912
|
+
|
|
913
|
+
- name: ⏭️ AST Grep Skipped (no config)
|
|
914
|
+
if: steps.check_config.outputs.has_config != 'true'
|
|
915
|
+
run: |
|
|
916
|
+
echo "::warning::ast-grep scan skipped - no sgconfig.yml found"
|
|
917
|
+
echo "To enable ast-grep scanning, add sgconfig.yml to your project root"
|
|
918
|
+
|
|
919
|
+
- name: ⏭️ AST Grep Skipped (no rules)
|
|
920
|
+
if: steps.check_config.outputs.has_config == 'true' && steps.check_rules.outputs.has_rules != 'true'
|
|
921
|
+
run: |
|
|
922
|
+
echo "::warning::ast-grep scan skipped - no rules defined in ast-grep/rules/"
|
|
923
|
+
echo "To enable ast-grep scanning, add rule YAML files to ast-grep/rules/"
|
|
924
|
+
|
|
798
925
|
npm_security_scan:
|
|
799
926
|
name: 🔒 Security Scan
|
|
800
927
|
runs-on: ubuntu-latest
|
|
@@ -865,43 +992,18 @@ jobs:
|
|
|
865
992
|
echo "::notice::No high or critical vulnerabilities found (excluding known false positives)"
|
|
866
993
|
fi
|
|
867
994
|
elif [ "${{ inputs.package_manager }}" = "bun" ]; then
|
|
868
|
-
#
|
|
869
|
-
#
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
# npm audit requires a lockfile - generate temporary one if needed
|
|
873
|
-
TEMP_LOCKFILE=false
|
|
874
|
-
if [ ! -f "package-lock.json" ]; then
|
|
875
|
-
echo "Generating temporary package-lock.json for audit..."
|
|
876
|
-
npm i --package-lock-only --ignore-scripts --legacy-peer-deps --silent 2>/dev/null
|
|
877
|
-
TEMP_LOCKFILE=true
|
|
878
|
-
fi
|
|
995
|
+
# Excluding GHSA-5j98-mcp5-4vw2 (CVE-2025-64756): glob CLI command injection
|
|
996
|
+
# This vulnerability only affects the glob CLI (--cmd flag), not library usage
|
|
997
|
+
# We only use glob as a library through Babel and other tools - never invoke CLI
|
|
879
998
|
|
|
880
999
|
# Excluding GHSA-8qq5-rm4j-mr97: node-tar path sanitization vulnerability
|
|
881
|
-
#
|
|
882
|
-
#
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
.value.severity == "high" or .value.severity == "critical"
|
|
887
|
-
)) | map(select(
|
|
888
|
-
.value.via | all(. | if type == "object" then (.url == "https://github.com/advisories/GHSA-8qq5-rm4j-mr97" | not) else true end)
|
|
889
|
-
)) | length
|
|
890
|
-
')
|
|
891
|
-
if [ "$VULN_COUNT" -gt 0 ] 2>/dev/null; then
|
|
892
|
-
exit_code=1
|
|
893
|
-
fi
|
|
894
|
-
|
|
895
|
-
# Clean up temporary lockfile
|
|
896
|
-
if [ "$TEMP_LOCKFILE" = "true" ]; then
|
|
897
|
-
rm -f package-lock.json
|
|
898
|
-
fi
|
|
899
|
-
|
|
900
|
-
if [ "${exit_code:-0}" -ne 0 ]; then
|
|
901
|
-
echo "::warning::Found high or critical vulnerabilities (excluding known false positives)"
|
|
902
|
-
exit $exit_code
|
|
1000
|
+
# Nested dependency in @expo/cli - bun resolves to patched version but audit still flags it
|
|
1001
|
+
# Risk: Low - only affects tar extraction with malicious filenames, not our use case
|
|
1002
|
+
if ! bun audit --audit-level=high --ignore GHSA-5j98-mcp5-4vw2 --ignore GHSA-8qq5-rm4j-mr97; then
|
|
1003
|
+
echo "::warning::Found high or critical vulnerabilities"
|
|
1004
|
+
exit 1
|
|
903
1005
|
fi
|
|
904
|
-
echo "::notice::No high or critical vulnerabilities found
|
|
1006
|
+
echo "::notice::No high or critical vulnerabilities found"
|
|
905
1007
|
else
|
|
906
1008
|
echo "Unsupported package manager: ${{ inputs.package_manager }}"
|
|
907
1009
|
exit 1
|
|
@@ -1228,6 +1330,8 @@ jobs:
|
|
|
1228
1330
|
playwright_e2e,
|
|
1229
1331
|
format,
|
|
1230
1332
|
build,
|
|
1333
|
+
dead_code,
|
|
1334
|
+
sg_scan,
|
|
1231
1335
|
npm_security_scan,
|
|
1232
1336
|
sonarcloud,
|
|
1233
1337
|
snyk,
|
|
@@ -1438,6 +1542,8 @@ jobs:
|
|
|
1438
1542
|
playwright_e2e,
|
|
1439
1543
|
format,
|
|
1440
1544
|
build,
|
|
1545
|
+
dead_code,
|
|
1546
|
+
sg_scan,
|
|
1441
1547
|
npm_security_scan,
|
|
1442
1548
|
sonarcloud,
|
|
1443
1549
|
snyk,
|
|
@@ -1489,7 +1595,8 @@ jobs:
|
|
|
1489
1595
|
maestro_e2e: '${{ needs.maestro_e2e.result }}',
|
|
1490
1596
|
playwright_e2e: '${{ needs.playwright_e2e.result }}',
|
|
1491
1597
|
format: '${{ needs.format.result }}',
|
|
1492
|
-
build: '${{ needs.build.result }}'
|
|
1598
|
+
build: '${{ needs.build.result }}',
|
|
1599
|
+
sg_scan: '${{ needs.sg_scan.result }}'
|
|
1493
1600
|
},
|
|
1494
1601
|
security: {
|
|
1495
1602
|
npm_audit: '${{ needs.npm_security_scan.result }}',
|
|
@@ -1647,6 +1754,8 @@ jobs:
|
|
|
1647
1754
|
playwright_e2e,
|
|
1648
1755
|
format,
|
|
1649
1756
|
build,
|
|
1757
|
+
dead_code,
|
|
1758
|
+
sg_scan,
|
|
1650
1759
|
npm_security_scan,
|
|
1651
1760
|
sonarcloud,
|
|
1652
1761
|
snyk,
|
|
@@ -1695,6 +1804,8 @@ jobs:
|
|
|
1695
1804
|
echo "| Playwright E2E | ${{ needs.playwright_e2e.result }} | Quality |" >> $GITHUB_STEP_SUMMARY
|
|
1696
1805
|
echo "| Format Check | ${{ needs.format.result }} | Quality |" >> $GITHUB_STEP_SUMMARY
|
|
1697
1806
|
echo "| Build | ${{ needs.build.result }} | Build |" >> $GITHUB_STEP_SUMMARY
|
|
1807
|
+
echo "| Dead Code | ${{ needs.dead_code.result }} | Quality |" >> $GITHUB_STEP_SUMMARY
|
|
1808
|
+
echo "| AST Grep | ${{ needs.sg_scan.result }} | Quality |" >> $GITHUB_STEP_SUMMARY
|
|
1698
1809
|
echo "| NPM Security | ${{ needs.npm_security_scan.result }} | Security |" >> $GITHUB_STEP_SUMMARY
|
|
1699
1810
|
echo "| SonarCloud | ${{ needs.sonarcloud.result }} | Security |" >> $GITHUB_STEP_SUMMARY
|
|
1700
1811
|
echo "| Snyk | ${{ needs.snyk.result }} | Security |" >> $GITHUB_STEP_SUMMARY
|
|
@@ -1722,6 +1833,8 @@ jobs:
|
|
|
1722
1833
|
[ "${{ needs.maestro_e2e.result }}" != "skipped" ] && QUALITY_JOBS=$((QUALITY_JOBS + 1))
|
|
1723
1834
|
[ "${{ needs.playwright_e2e.result }}" != "skipped" ] && QUALITY_JOBS=$((QUALITY_JOBS + 1))
|
|
1724
1835
|
[ "${{ needs.format.result }}" != "skipped" ] && QUALITY_JOBS=$((QUALITY_JOBS + 1))
|
|
1836
|
+
[ "${{ needs.dead_code.result }}" != "skipped" ] && QUALITY_JOBS=$((QUALITY_JOBS + 1))
|
|
1837
|
+
[ "${{ needs.sg_scan.result }}" != "skipped" ] && QUALITY_JOBS=$((QUALITY_JOBS + 1))
|
|
1725
1838
|
|
|
1726
1839
|
[ "${{ needs.sonarcloud.result }}" != "skipped" ] && SECURITY_JOBS=$((SECURITY_JOBS + 1))
|
|
1727
1840
|
[ "${{ needs.snyk.result }}" != "skipped" ] && SECURITY_JOBS=$((SECURITY_JOBS + 1))
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# This file is managed by Lisa.
|
|
2
|
+
# Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
3
|
+
|
|
1
4
|
# CDK snapshot files contain asset hashes that can trigger false positives
|
|
2
5
|
__tests__/infra/__snapshots__/sse-stream-stack.test.ts.snap:generic-api-key:380
|
|
3
6
|
__tests__/infra/__snapshots__/sse-stream-stack.test.ts.snap:generic-api-key:398
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is managed by Lisa.
|
|
3
|
+
* Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
+
*/
|
|
5
|
+
|
|
1
6
|
/* eslint-disable max-lines -- comprehensive test coverage requires extensive test cases */
|
|
2
7
|
/**
|
|
3
8
|
* Tests for enforce-statement-order ESLint rule
|