vaulter 0.3.1 → 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/README.md +495 -19
- package/dist/cli/commands/integrations/terraform.js +1 -1
- package/dist/cli/commands/integrations/terraform.js.map +1 -1
- package/dist/cli/commands/key.d.ts.map +1 -1
- package/dist/cli/commands/key.js +1 -1
- package/dist/cli/commands/key.js.map +1 -1
- package/dist/cli/commands/services.js +1 -1
- package/dist/cli/commands/services.js.map +1 -1
- package/dist/cli/commands/set.d.ts +1 -1
- package/dist/cli/commands/set.d.ts.map +1 -1
- package/dist/cli/commands/set.js +16 -12
- package/dist/cli/commands/set.js.map +1 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +2 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/prompts.d.ts +22 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +402 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +8 -2
- package/dist/mcp/resources.d.ts.map +1 -1
- package/dist/mcp/resources.js +298 -23
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/server.d.ts +5 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +31 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +2 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +703 -286
- package/dist/mcp/tools.js.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -21,8 +21,8 @@ vaulter init
|
|
|
21
21
|
# Set secrets (encrypted, synced to backend)
|
|
22
22
|
vaulter set DATABASE_URL="postgres://localhost/mydb" API_KEY="sk-secret-key" -e dev
|
|
23
23
|
|
|
24
|
-
# Set configs (plain text,
|
|
25
|
-
vaulter set PORT
|
|
24
|
+
# Set configs (plain text in split mode, synced in unified mode)
|
|
25
|
+
vaulter set PORT::3000 LOG_LEVEL::debug -e dev
|
|
26
26
|
|
|
27
27
|
# Export to shell
|
|
28
28
|
eval $(vaulter export -e dev)
|
|
@@ -72,8 +72,16 @@ MCP server for Claude AI. Zero config for dev, production-ready.
|
|
|
72
72
|
- [Monorepo Support](#monorepo-support)
|
|
73
73
|
- [NX Monorepo](#nx-monorepo)
|
|
74
74
|
- [Turborepo](#turborepo)
|
|
75
|
-
- [MCP
|
|
75
|
+
- [MCP Server](#mcp-server)
|
|
76
|
+
- [MCP Tools](#mcp-tools-14)
|
|
77
|
+
- [MCP Resources](#mcp-resources-5)
|
|
78
|
+
- [MCP Prompts](#mcp-prompts-5)
|
|
76
79
|
- [CI/CD](#cicd)
|
|
80
|
+
- [Developer Daily Workflow](#developer-daily-workflow)
|
|
81
|
+
- [GitHub Actions](#github-actions)
|
|
82
|
+
- [GitLab CI](#gitlab-ci)
|
|
83
|
+
- [CircleCI](#circleci)
|
|
84
|
+
- [Azure DevOps](#azure-devops)
|
|
77
85
|
- [Security Best Practices](#security-best-practices)
|
|
78
86
|
- [API Usage](#api-usage)
|
|
79
87
|
- [Pre-built Binaries](#pre-built-binaries)
|
|
@@ -172,7 +180,7 @@ loader({ path: '.env.local', override: true })
|
|
|
172
180
|
| `init` | Initialize project | `vaulter init` |
|
|
173
181
|
| `get <key>` | Get a variable | `vaulter get DATABASE_URL -e prd` |
|
|
174
182
|
| `set KEY=val ...` | Set secrets (batch) | `vaulter set KEY1=v1 KEY2=v2 -e prd` |
|
|
175
|
-
| `set KEY
|
|
183
|
+
| `set KEY::val ...` | Set configs (plain) | `vaulter set PORT::3000 HOST::0.0.0.0 -e dev` |
|
|
176
184
|
| `delete <key>` | Delete a variable | `vaulter delete OLD_KEY -e dev` |
|
|
177
185
|
| `list` | List all variables | `vaulter list -e prd` |
|
|
178
186
|
| `export` | Export for shell | `eval $(vaulter export -e dev)` |
|
|
@@ -223,13 +231,15 @@ vaulter set DB_URL=postgres://... @tag:database,sensitive @owner:backend -e prd
|
|
|
223
231
|
vaulter set KEY "value" -e dev # Treated as secret
|
|
224
232
|
```
|
|
225
233
|
|
|
226
|
-
| Separator | Type | Backend Sync | Encryption |
|
|
234
|
+
| Separator | Type | Backend Sync | Encryption (backend) |
|
|
227
235
|
|:----------|:-----|:-------------|:-----------|
|
|
228
236
|
| `=` | Secret | ✓ | ✓ |
|
|
229
237
|
| `:=` | Secret (typed) | ✓ | ✓ |
|
|
230
|
-
| `::` | Config | Split: ✗ / Unified: ✓ |
|
|
238
|
+
| `::` | Config | Split: ✗ / Unified: ✓ | ✓ |
|
|
231
239
|
| `@key:value` | Metadata | — | — |
|
|
232
240
|
|
|
241
|
+
Note: Config files remain plain text; backend storage is encrypted for all values.
|
|
242
|
+
|
|
233
243
|
## Global Options
|
|
234
244
|
|
|
235
245
|
```
|
|
@@ -777,44 +787,508 @@ vaulter sync -e dev -s "svc-*"
|
|
|
777
787
|
vaulter export -e prd --all --format=json
|
|
778
788
|
```
|
|
779
789
|
|
|
780
|
-
## MCP
|
|
790
|
+
## MCP Server
|
|
791
|
+
|
|
792
|
+
Vaulter includes a full-featured **Model Context Protocol (MCP)** server for AI assistant integration. Works with Claude, ChatGPT, and any MCP-compatible client.
|
|
793
|
+
|
|
794
|
+
### Quick Setup
|
|
795
|
+
|
|
796
|
+
```bash
|
|
797
|
+
# Start MCP server
|
|
798
|
+
vaulter mcp
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
Add to your Claude config (`~/.config/claude/claude_desktop_config.json`):
|
|
802
|
+
|
|
803
|
+
```json
|
|
804
|
+
{
|
|
805
|
+
"mcpServers": {
|
|
806
|
+
"vaulter": {
|
|
807
|
+
"command": "npx",
|
|
808
|
+
"args": ["vaulter", "mcp"]
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
Or with the binary:
|
|
815
|
+
|
|
816
|
+
```json
|
|
817
|
+
{
|
|
818
|
+
"mcpServers": {
|
|
819
|
+
"vaulter": {
|
|
820
|
+
"command": "/usr/local/bin/vaulter",
|
|
821
|
+
"args": ["mcp"]
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
### MCP Tools (14)
|
|
828
|
+
|
|
829
|
+
The MCP server exposes 14 tools organized into categories:
|
|
830
|
+
|
|
831
|
+
#### Core Tools
|
|
832
|
+
|
|
833
|
+
| Tool | Description | Example Use |
|
|
834
|
+
|:-----|:------------|:------------|
|
|
835
|
+
| `vaulter_get` | Get a single variable | "Get the DATABASE_URL for production" |
|
|
836
|
+
| `vaulter_set` | Set a variable with tags | "Set API_KEY to sk-xxx for dev" |
|
|
837
|
+
| `vaulter_delete` | Delete a variable | "Remove the old LEGACY_KEY" |
|
|
838
|
+
| `vaulter_list` | List all variables | "Show all vars in staging" |
|
|
839
|
+
| `vaulter_export` | Export in various formats | "Export prod vars as JSON" |
|
|
840
|
+
|
|
841
|
+
#### Sync Tools
|
|
842
|
+
|
|
843
|
+
| Tool | Description | Example Use |
|
|
844
|
+
|:-----|:------------|:------------|
|
|
845
|
+
| `vaulter_sync` | Bidirectional sync | "Sync local .env with dev backend" |
|
|
846
|
+
| `vaulter_pull` | Download from backend | "Pull production vars to .env.prd" |
|
|
847
|
+
| `vaulter_push` | Upload to backend | "Push .env.local to dev" |
|
|
848
|
+
|
|
849
|
+
#### Analysis Tools
|
|
850
|
+
|
|
851
|
+
| Tool | Description | Example Use |
|
|
852
|
+
|:-----|:------------|:------------|
|
|
853
|
+
| `vaulter_compare` | Compare two environments | "What's different between stg and prd?" |
|
|
854
|
+
| `vaulter_search` | Search by key pattern | "Find all vars containing DATABASE" |
|
|
855
|
+
|
|
856
|
+
#### Monorepo Tools
|
|
857
|
+
|
|
858
|
+
| Tool | Description | Example Use |
|
|
859
|
+
|:-----|:------------|:------------|
|
|
860
|
+
| `vaulter_services` | List discovered services | "What services are in this monorepo?" |
|
|
861
|
+
|
|
862
|
+
#### Kubernetes Tools
|
|
863
|
+
|
|
864
|
+
| Tool | Description | Example Use |
|
|
865
|
+
|:-----|:------------|:------------|
|
|
866
|
+
| `vaulter_k8s_secret` | Generate K8s Secret YAML | "Generate a K8s secret for prod" |
|
|
867
|
+
| `vaulter_k8s_configmap` | Generate K8s ConfigMap | "Create a ConfigMap for non-secrets" |
|
|
868
|
+
|
|
869
|
+
#### Setup Tools
|
|
870
|
+
|
|
871
|
+
| Tool | Description | Example Use |
|
|
872
|
+
|:-----|:------------|:------------|
|
|
873
|
+
| `vaulter_init` | Initialize new project | "Set up vaulter in this project" |
|
|
874
|
+
|
|
875
|
+
### MCP Resources (5)
|
|
876
|
+
|
|
877
|
+
Resources provide read-only views of your secrets and configuration:
|
|
878
|
+
|
|
879
|
+
| Resource URI | Description | Content |
|
|
880
|
+
|:-------------|:------------|:--------|
|
|
881
|
+
| `vaulter://config` | Project configuration | YAML from .vaulter/config.yaml |
|
|
882
|
+
| `vaulter://services` | Monorepo services | JSON list of discovered services |
|
|
883
|
+
| `vaulter://project/env` | Environment variables | .env format for project/env |
|
|
884
|
+
| `vaulter://project/env/service` | Service-specific vars | .env format for service |
|
|
885
|
+
| `vaulter://compare/env1/env2` | Environment comparison | Diff between two environments |
|
|
886
|
+
|
|
887
|
+
**Example resource access:**
|
|
888
|
+
- `vaulter://config` → Current config.yaml content
|
|
889
|
+
- `vaulter://my-app/prd` → Production vars for my-app
|
|
890
|
+
- `vaulter://compare/dev/prd` → What's different between dev and prod
|
|
891
|
+
|
|
892
|
+
### MCP Prompts (5)
|
|
893
|
+
|
|
894
|
+
Pre-configured workflow prompts guide AI through complex operations:
|
|
895
|
+
|
|
896
|
+
| Prompt | Description | Arguments |
|
|
897
|
+
|:-------|:------------|:----------|
|
|
898
|
+
| `setup_project` | Initialize a new vaulter project | `project_name`, `mode?`, `backend?` |
|
|
899
|
+
| `migrate_dotenv` | Migrate existing .env to vaulter | `file_path`, `environment`, `dry_run?` |
|
|
900
|
+
| `deploy_secrets` | Deploy secrets to Kubernetes | `environment`, `namespace?`, `secret_name?` |
|
|
901
|
+
| `compare_environments` | Compare two environments | `source_env`, `target_env`, `show_values?` |
|
|
902
|
+
| `security_audit` | Audit secrets for security issues | `environment`, `strict?` |
|
|
781
903
|
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
|
904
|
+
**Example prompt usage in Claude:**
|
|
905
|
+
- "Use the setup_project prompt to create a new project called api-service"
|
|
906
|
+
- "Run the migrate_dotenv prompt for .env.local to dev environment"
|
|
907
|
+
- "Execute security_audit for production in strict mode"
|
|
908
|
+
|
|
909
|
+
### MCP Capabilities Summary
|
|
910
|
+
|
|
911
|
+
| Category | Count | Features |
|
|
912
|
+
|:---------|------:|:---------|
|
|
913
|
+
| **Tools** | 14 | CRUD, sync, compare, K8s, init |
|
|
914
|
+
| **Resources** | 5 | Config, services, vars, comparison |
|
|
915
|
+
| **Prompts** | 5 | Setup, migrate, deploy, compare, audit |
|
|
916
|
+
| **Formats** | 5 | shell, json, yaml, env, tfvars |
|
|
917
|
+
|
|
918
|
+
### Example AI Conversations
|
|
919
|
+
|
|
920
|
+
**Setting up a new project:**
|
|
921
|
+
> "Help me set up vaulter for my new api-service project using S3 backend"
|
|
922
|
+
|
|
923
|
+
The AI will use `vaulter_init`, guide through backend config, and set up encryption.
|
|
924
|
+
|
|
925
|
+
**Migrating from dotenv:**
|
|
926
|
+
> "I have a .env.production file with 50 variables. Help me migrate to vaulter"
|
|
927
|
+
|
|
928
|
+
The AI will analyze the file, identify secrets vs configs, and sync to backend.
|
|
929
|
+
|
|
930
|
+
**Deploying to Kubernetes:**
|
|
931
|
+
> "Generate Kubernetes secrets for production and show me how to deploy them"
|
|
932
|
+
|
|
933
|
+
The AI will use `vaulter_k8s_secret` and provide kubectl commands.
|
|
934
|
+
|
|
935
|
+
**Comparing environments:**
|
|
936
|
+
> "What variables are in staging but missing from production?"
|
|
937
|
+
|
|
938
|
+
The AI will use `vaulter_compare` and show the differences.
|
|
939
|
+
|
|
940
|
+
**Security review:**
|
|
941
|
+
> "Audit my production secrets for security issues"
|
|
942
|
+
|
|
943
|
+
The AI will analyze variable patterns, check for weak values, and provide recommendations.
|
|
790
944
|
|
|
791
945
|
## CI/CD
|
|
792
946
|
|
|
947
|
+
### Developer Daily Workflow
|
|
948
|
+
|
|
949
|
+
A typical day with vaulter:
|
|
950
|
+
|
|
951
|
+
#### 1. Morning Setup
|
|
952
|
+
|
|
953
|
+
```bash
|
|
954
|
+
# Pull latest secrets to your local .env
|
|
955
|
+
vaulter pull -e dev
|
|
956
|
+
|
|
957
|
+
# Start development with loaded vars
|
|
958
|
+
eval $(vaulter export -e dev) npm run dev
|
|
959
|
+
|
|
960
|
+
# Or use the alias (add to ~/.bashrc)
|
|
961
|
+
alias vdev='eval $(vaulter export -e dev)'
|
|
962
|
+
vdev npm run dev
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
#### 2. Adding New Variables
|
|
966
|
+
|
|
967
|
+
```bash
|
|
968
|
+
# Add a new secret (encrypted, synced to backend)
|
|
969
|
+
vaulter set NEW_API_KEY="sk-xxx" -e dev
|
|
970
|
+
|
|
971
|
+
# Add a config (plain text)
|
|
972
|
+
vaulter set LOG_LEVEL::debug -e dev
|
|
973
|
+
|
|
974
|
+
# Batch add multiple vars
|
|
975
|
+
vaulter set DB_HOST::localhost DB_PORT::5432 DB_PASSWORD="secret123" -e dev
|
|
976
|
+
|
|
977
|
+
# Check what you have
|
|
978
|
+
vaulter list -e dev
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
#### 3. Syncing with Team
|
|
982
|
+
|
|
983
|
+
```bash
|
|
984
|
+
# Your teammate added new vars - pull them
|
|
985
|
+
vaulter pull -e dev
|
|
986
|
+
|
|
987
|
+
# You made changes - push to backend
|
|
988
|
+
vaulter push -e dev
|
|
989
|
+
|
|
990
|
+
# Two-way sync (recommended)
|
|
991
|
+
vaulter sync -e dev
|
|
992
|
+
|
|
993
|
+
# Preview before sync
|
|
994
|
+
vaulter sync -e dev --dry-run
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
#### 4. Testing Different Environments
|
|
998
|
+
|
|
999
|
+
```bash
|
|
1000
|
+
# Run with staging config
|
|
1001
|
+
eval $(vaulter export -e stg) npm test
|
|
1002
|
+
|
|
1003
|
+
# Compare what's different in production
|
|
1004
|
+
vaulter compare -e dev -e prd
|
|
1005
|
+
|
|
1006
|
+
# One-liner to check production
|
|
1007
|
+
vdev npm run dev # dev
|
|
1008
|
+
vstg npm test # stg
|
|
1009
|
+
vprd npm run build # prd (be careful!)
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
#### 5. Before Code Review
|
|
1013
|
+
|
|
1014
|
+
```bash
|
|
1015
|
+
# Make sure all required vars are documented
|
|
1016
|
+
vaulter list -e dev --json | jq 'keys'
|
|
1017
|
+
|
|
1018
|
+
# Check nothing sensitive is in wrong place
|
|
1019
|
+
vaulter search "*PASSWORD*" -e dev
|
|
1020
|
+
vaulter search "*SECRET*" -e dev
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
#### 6. Deployment Prep
|
|
1024
|
+
|
|
1025
|
+
```bash
|
|
1026
|
+
# Generate K8s secret and review
|
|
1027
|
+
vaulter k8s:secret -e prd --dry-run
|
|
1028
|
+
|
|
1029
|
+
# Generate and apply
|
|
1030
|
+
vaulter k8s:secret -e prd | kubectl apply -f -
|
|
1031
|
+
|
|
1032
|
+
# Or export for Helm
|
|
1033
|
+
vaulter helm:values -e prd > values.prd.yaml
|
|
1034
|
+
helm upgrade myapp ./chart -f values.prd.yaml
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
### Shell Aliases (Recommended)
|
|
1038
|
+
|
|
1039
|
+
Add to `~/.bashrc` or `~/.zshrc`:
|
|
1040
|
+
|
|
1041
|
+
```bash
|
|
1042
|
+
# Quick environment loading
|
|
1043
|
+
alias vdev='eval $(vaulter export -e dev)'
|
|
1044
|
+
alias vstg='eval $(vaulter export -e stg)'
|
|
1045
|
+
alias vprd='eval $(vaulter export -e prd)'
|
|
1046
|
+
|
|
1047
|
+
# Common operations
|
|
1048
|
+
alias vpull='vaulter pull -e dev'
|
|
1049
|
+
alias vpush='vaulter push -e dev'
|
|
1050
|
+
alias vsync='vaulter sync -e dev'
|
|
1051
|
+
alias vlist='vaulter list -e dev'
|
|
1052
|
+
|
|
1053
|
+
# K8s shortcuts
|
|
1054
|
+
alias vk8s='vaulter k8s:secret'
|
|
1055
|
+
alias vhelm='vaulter helm:values'
|
|
1056
|
+
|
|
1057
|
+
# Usage
|
|
1058
|
+
vdev npm run dev # Dev with env vars
|
|
1059
|
+
vstg npm test # Test with staging
|
|
1060
|
+
vpull && vdev npm run dev # Pull latest, then run
|
|
1061
|
+
vk8s -e prd | kubectl apply -f - # Deploy secrets
|
|
1062
|
+
```
|
|
1063
|
+
|
|
793
1064
|
### GitHub Actions
|
|
794
1065
|
|
|
1066
|
+
#### Basic Deploy Secrets
|
|
1067
|
+
|
|
795
1068
|
```yaml
|
|
1069
|
+
name: Deploy
|
|
1070
|
+
on:
|
|
1071
|
+
push:
|
|
1072
|
+
branches: [main]
|
|
1073
|
+
|
|
796
1074
|
jobs:
|
|
797
1075
|
deploy:
|
|
798
1076
|
runs-on: ubuntu-latest
|
|
799
1077
|
steps:
|
|
800
1078
|
- uses: actions/checkout@v4
|
|
1079
|
+
|
|
1080
|
+
- name: Deploy secrets to K8s
|
|
1081
|
+
env:
|
|
1082
|
+
VAULTER_KEY: ${{ secrets.VAULTER_KEY }}
|
|
1083
|
+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
1084
|
+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
1085
|
+
run: |
|
|
1086
|
+
npx vaulter k8s:secret -e prd | kubectl apply -f -
|
|
1087
|
+
```
|
|
1088
|
+
|
|
1089
|
+
#### Multi-Environment Deploy
|
|
1090
|
+
|
|
1091
|
+
```yaml
|
|
1092
|
+
name: Deploy to Environment
|
|
1093
|
+
on:
|
|
1094
|
+
workflow_dispatch:
|
|
1095
|
+
inputs:
|
|
1096
|
+
environment:
|
|
1097
|
+
description: 'Environment to deploy'
|
|
1098
|
+
required: true
|
|
1099
|
+
type: choice
|
|
1100
|
+
options: [dev, stg, prd]
|
|
1101
|
+
|
|
1102
|
+
jobs:
|
|
1103
|
+
deploy:
|
|
1104
|
+
runs-on: ubuntu-latest
|
|
1105
|
+
environment: ${{ inputs.environment }}
|
|
1106
|
+
steps:
|
|
1107
|
+
- uses: actions/checkout@v4
|
|
1108
|
+
|
|
801
1109
|
- name: Deploy secrets
|
|
802
1110
|
env:
|
|
803
1111
|
VAULTER_KEY: ${{ secrets.VAULTER_KEY }}
|
|
804
1112
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
805
1113
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
806
1114
|
run: |
|
|
1115
|
+
npx vaulter k8s:secret -e ${{ inputs.environment }} | kubectl apply -f -
|
|
1116
|
+
npx vaulter k8s:configmap -e ${{ inputs.environment }} | kubectl apply -f -
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
#### Monorepo with Matrix
|
|
1120
|
+
|
|
1121
|
+
```yaml
|
|
1122
|
+
name: Deploy Services
|
|
1123
|
+
on:
|
|
1124
|
+
push:
|
|
1125
|
+
branches: [main]
|
|
1126
|
+
|
|
1127
|
+
jobs:
|
|
1128
|
+
deploy:
|
|
1129
|
+
runs-on: ubuntu-latest
|
|
1130
|
+
strategy:
|
|
1131
|
+
matrix:
|
|
1132
|
+
service: [api, web, worker]
|
|
1133
|
+
steps:
|
|
1134
|
+
- uses: actions/checkout@v4
|
|
1135
|
+
|
|
1136
|
+
- name: Deploy ${{ matrix.service }} secrets
|
|
1137
|
+
env:
|
|
1138
|
+
VAULTER_KEY: ${{ secrets.VAULTER_KEY }}
|
|
1139
|
+
run: |
|
|
1140
|
+
cd apps/${{ matrix.service }}
|
|
807
1141
|
npx vaulter k8s:secret -e prd | kubectl apply -f -
|
|
808
1142
|
```
|
|
809
1143
|
|
|
1144
|
+
#### PR Preview Environment
|
|
1145
|
+
|
|
1146
|
+
```yaml
|
|
1147
|
+
name: PR Preview
|
|
1148
|
+
on:
|
|
1149
|
+
pull_request:
|
|
1150
|
+
types: [opened, synchronize]
|
|
1151
|
+
|
|
1152
|
+
jobs:
|
|
1153
|
+
preview:
|
|
1154
|
+
runs-on: ubuntu-latest
|
|
1155
|
+
steps:
|
|
1156
|
+
- uses: actions/checkout@v4
|
|
1157
|
+
|
|
1158
|
+
- name: Create preview secrets
|
|
1159
|
+
env:
|
|
1160
|
+
VAULTER_KEY: ${{ secrets.VAULTER_KEY }}
|
|
1161
|
+
run: |
|
|
1162
|
+
# Use dev secrets for PR previews
|
|
1163
|
+
npx vaulter k8s:secret -e dev -n preview-pr-${{ github.event.number }} | \
|
|
1164
|
+
kubectl apply -f -
|
|
1165
|
+
```
|
|
1166
|
+
|
|
1167
|
+
#### Validate Secrets Exist
|
|
1168
|
+
|
|
1169
|
+
```yaml
|
|
1170
|
+
name: Validate Secrets
|
|
1171
|
+
on:
|
|
1172
|
+
pull_request:
|
|
1173
|
+
paths:
|
|
1174
|
+
- '.vaulter/**'
|
|
1175
|
+
- 'deploy/**'
|
|
1176
|
+
|
|
1177
|
+
jobs:
|
|
1178
|
+
validate:
|
|
1179
|
+
runs-on: ubuntu-latest
|
|
1180
|
+
steps:
|
|
1181
|
+
- uses: actions/checkout@v4
|
|
1182
|
+
|
|
1183
|
+
- name: Check required secrets exist
|
|
1184
|
+
env:
|
|
1185
|
+
VAULTER_KEY: ${{ secrets.VAULTER_KEY }}
|
|
1186
|
+
run: |
|
|
1187
|
+
# List and verify required secrets are set
|
|
1188
|
+
npx vaulter list -e prd --json | jq -e '.DATABASE_URL and .API_KEY'
|
|
1189
|
+
```
|
|
1190
|
+
|
|
810
1191
|
### GitLab CI
|
|
811
1192
|
|
|
812
1193
|
```yaml
|
|
813
|
-
|
|
1194
|
+
stages:
|
|
1195
|
+
- validate
|
|
1196
|
+
- deploy
|
|
1197
|
+
|
|
1198
|
+
variables:
|
|
1199
|
+
VAULTER_KEY: $VAULTER_KEY
|
|
1200
|
+
|
|
1201
|
+
validate-secrets:
|
|
1202
|
+
stage: validate
|
|
1203
|
+
script:
|
|
1204
|
+
- npx vaulter list -e $CI_ENVIRONMENT_NAME --json | jq -e 'keys | length > 0'
|
|
1205
|
+
rules:
|
|
1206
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
1207
|
+
|
|
1208
|
+
deploy-secrets:
|
|
1209
|
+
stage: deploy
|
|
814
1210
|
script:
|
|
815
1211
|
- npx vaulter k8s:secret -e prd | kubectl apply -f -
|
|
816
|
-
|
|
817
|
-
|
|
1212
|
+
environment:
|
|
1213
|
+
name: production
|
|
1214
|
+
rules:
|
|
1215
|
+
- if: $CI_COMMIT_BRANCH == "main"
|
|
1216
|
+
```
|
|
1217
|
+
|
|
1218
|
+
### CircleCI
|
|
1219
|
+
|
|
1220
|
+
```yaml
|
|
1221
|
+
version: 2.1
|
|
1222
|
+
jobs:
|
|
1223
|
+
deploy:
|
|
1224
|
+
docker:
|
|
1225
|
+
- image: cimg/node:20.0
|
|
1226
|
+
steps:
|
|
1227
|
+
- checkout
|
|
1228
|
+
- run:
|
|
1229
|
+
name: Deploy secrets
|
|
1230
|
+
command: |
|
|
1231
|
+
npx vaulter k8s:secret -e prd | kubectl apply -f -
|
|
1232
|
+
environment:
|
|
1233
|
+
VAULTER_KEY: ${VAULTER_KEY}
|
|
1234
|
+
|
|
1235
|
+
workflows:
|
|
1236
|
+
deploy:
|
|
1237
|
+
jobs:
|
|
1238
|
+
- deploy:
|
|
1239
|
+
filters:
|
|
1240
|
+
branches:
|
|
1241
|
+
only: main
|
|
1242
|
+
```
|
|
1243
|
+
|
|
1244
|
+
### Azure DevOps
|
|
1245
|
+
|
|
1246
|
+
```yaml
|
|
1247
|
+
trigger:
|
|
1248
|
+
- main
|
|
1249
|
+
|
|
1250
|
+
pool:
|
|
1251
|
+
vmImage: 'ubuntu-latest'
|
|
1252
|
+
|
|
1253
|
+
steps:
|
|
1254
|
+
- task: NodeTool@0
|
|
1255
|
+
inputs:
|
|
1256
|
+
versionSpec: '20.x'
|
|
1257
|
+
|
|
1258
|
+
- script: |
|
|
1259
|
+
npx vaulter k8s:secret -e prd | kubectl apply -f -
|
|
1260
|
+
displayName: 'Deploy secrets'
|
|
1261
|
+
env:
|
|
1262
|
+
VAULTER_KEY: $(VAULTER_KEY)
|
|
1263
|
+
AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
|
|
1264
|
+
AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
|
|
1265
|
+
```
|
|
1266
|
+
|
|
1267
|
+
### CI/CD Best Practices
|
|
1268
|
+
|
|
1269
|
+
| Practice | Recommendation |
|
|
1270
|
+
|:---------|:---------------|
|
|
1271
|
+
| **Store VAULTER_KEY securely** | Use CI provider's secret management |
|
|
1272
|
+
| **Use IAM roles when possible** | Prefer roles over hardcoded credentials |
|
|
1273
|
+
| **Different keys per environment** | Don't share prd key with dev |
|
|
1274
|
+
| **Validate before deploy** | Run `--dry-run` first in pipelines |
|
|
1275
|
+
| **Use environment protection** | Require approval for prd deploys |
|
|
1276
|
+
| **Cache vaulter binary** | Download once per pipeline, not per job |
|
|
1277
|
+
|
|
1278
|
+
### Caching Vaulter Binary
|
|
1279
|
+
|
|
1280
|
+
```yaml
|
|
1281
|
+
# GitHub Actions
|
|
1282
|
+
- uses: actions/cache@v3
|
|
1283
|
+
with:
|
|
1284
|
+
path: ~/.npm
|
|
1285
|
+
key: vaulter-${{ runner.os }}
|
|
1286
|
+
|
|
1287
|
+
# Or download binary directly
|
|
1288
|
+
- name: Install vaulter
|
|
1289
|
+
run: |
|
|
1290
|
+
curl -sL https://github.com/forattini-dev/vaulter/releases/latest/download/vaulter-linux -o /usr/local/bin/vaulter
|
|
1291
|
+
chmod +x /usr/local/bin/vaulter
|
|
818
1292
|
```
|
|
819
1293
|
|
|
820
1294
|
## Security Best Practices
|
|
@@ -891,7 +1365,9 @@ await client.disconnect()
|
|
|
891
1365
|
| Backends | 7 (S3, MinIO, R2, Spaces, B2, FileSystem, Memory) |
|
|
892
1366
|
| Environments | 5 (dev, stg, prd, sbx, dr) |
|
|
893
1367
|
| Export Formats | 5 (shell, json, yaml, env, tfvars) |
|
|
894
|
-
| MCP Tools |
|
|
1368
|
+
| MCP Tools | 14 (core, sync, analysis, monorepo, k8s, setup) |
|
|
1369
|
+
| MCP Resources | 5 (config, services, vars, service vars, compare) |
|
|
1370
|
+
| MCP Prompts | 5 (setup, migrate, deploy, compare, audit) |
|
|
895
1371
|
| Integrations | 5 (K8s Secret, K8s ConfigMap, Helm, Terraform, tfvars) |
|
|
896
1372
|
|
|
897
1373
|
## Pre-built Binaries
|
|
@@ -50,7 +50,7 @@ export async function runTfVars(context) {
|
|
|
50
50
|
* Generate Terraform JSON variables file
|
|
51
51
|
*/
|
|
52
52
|
export async function runTfJson(context) {
|
|
53
|
-
const { args, config, project, service, environment, verbose
|
|
53
|
+
const { args, config, project, service, environment, verbose } = context;
|
|
54
54
|
if (!project) {
|
|
55
55
|
console.error('Error: Project not specified');
|
|
56
56
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/terraform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAYnE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAyB;IACvD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAEpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,IAAI,WAAW,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QAE/D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,MAAM,EAAE,QAAQ;gBAChB,OAAO;gBACP,WAAW;gBACX,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;aACxC,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE;gBAClC,OAAO;gBACP,OAAO;gBACP,WAAW;aACZ,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAyB;IACvD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../../src/cli/commands/integrations/terraform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE5D,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;CACpB;AAWD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/D"}
|
package/dist/cli/commands/key.js
CHANGED
|
@@ -18,7 +18,7 @@ function generateKey() {
|
|
|
18
18
|
* Run the key command
|
|
19
19
|
*/
|
|
20
20
|
export async function runKey(context) {
|
|
21
|
-
const { args
|
|
21
|
+
const { args } = context;
|
|
22
22
|
const subcommand = args._[1];
|
|
23
23
|
switch (subcommand) {
|
|
24
24
|
case 'generate':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAW5B;;GAEG;AACH,SAAS,WAAW;IAClB,2CAA2C;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAClC,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAmB;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAExB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK;YACR,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;YAC7B,MAAK;QAEP,KAAK,MAAM;YACT,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;YACzB,MAAK;QAEP,KAAK,QAAQ;YACX,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;YAC3B,MAAK;QAEP;YACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAA;YAClE,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;YAC9D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAC1B,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;YACjF,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAA;YAC3E,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAA;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAmB;IAC/C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAErD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAA;IAExC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IAEzB,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,UAAU,IAAI,QAAQ;gBAClC,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAA;YAC1D,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,OAAM;IACR,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,gBAAgB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAExC,uBAAuB;QACvB,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;YAC/C,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,wCAAwC;QACxC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAEtD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAA;YACrD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;YAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC/B,OAAO,CAAC,GAAG,CAAC,2DAA2D,OAAO,GAAG,CAAC,CAAA;YAClF,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;YACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,GAAG;gBACH,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,OAAmB;IAC3C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACtD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,CAAA;IAEtD,oBAAoB;IACpB,MAAM,OAAO,GAAgE,EAAE,CAAA;IAE/E,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,MAAM,CAAC,GAAG;gBAClB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;aACrC,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACpD,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,MAAM,CAAC,EAAE;gBACjB,SAAS,EAAE,KAAK,CAAC,yBAAyB;aAC3C,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;SACrC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;YACjC,OAAO;YACP,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,IAAI;SAC7D,CAAC,CAAC,CAAA;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,OAAmB;IAC7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACtD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,0DAA0D;IAC1D,sBAAsB;IACtB,qCAAqC;IACrC,wCAAwC;IACxC,wBAAwB;IAExB,gDAAgD;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC,CAAA;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;QACvD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAE3D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { discoverServices, findMonorepoRoot } from '../../lib/monorepo.js';
|
|
|
9
9
|
* Run the services command
|
|
10
10
|
*/
|
|
11
11
|
export async function runServices(context) {
|
|
12
|
-
const { args
|
|
12
|
+
const { args } = context;
|
|
13
13
|
const subcommand = args._[1];
|
|
14
14
|
switch (subcommand) {
|
|
15
15
|
case 'list':
|