@rahul05ranjan/dhruv-cli 1.3.0 → 1.4.6
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/.github/ENTERPRISE.md +275 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +45 -17
- package/.github/ISSUE_TEMPLATE/documentation_issue.md +61 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +61 -9
- package/.github/ISSUE_TEMPLATE/security_vulnerability.md +74 -0
- package/.github/dependabot.yml +42 -2
- package/.github/pull_request_template.md +13 -0
- package/.github/workflows/build-publish.yml +154 -0
- package/.github/workflows/ci.yml +251 -18
- package/.github/workflows/contribution.yml +169 -27
- package/.github/workflows/dependabot-auto-merge.yml +61 -2
- package/.github/workflows/deploy.yml +336 -0
- package/.github/workflows/monitoring.yml +270 -0
- package/.github/workflows/release.yml +229 -0
- package/.github/workflows/security.yml +198 -0
- package/.releaserc.json +50 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +8 -0
- package/PUBLISHING_FIX.md +92 -0
- package/__tests__/core.test.ts +318 -0
- package/__tests__/setup.ts +61 -0
- package/__tests__/workflows.test.ts +95 -0
- package/dist/commands/explain.js +13 -44
- package/dist/commands/fix.js +13 -38
- package/dist/commands/generate.js +45 -54
- package/dist/commands/health.d.ts +1 -0
- package/dist/commands/health.js +376 -0
- package/dist/commands/init.js +47 -42
- package/dist/commands/menu.js +90 -2
- package/dist/commands/metrics.d.ts +1 -0
- package/dist/commands/metrics.js +51 -0
- package/dist/commands/optimize.js +42 -34
- package/dist/commands/review.js +52 -48
- package/dist/commands/security-check.js +52 -42
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +45 -0
- package/dist/commands/suggest.js +13 -39
- package/dist/config/config.js +30 -2
- package/dist/core/ai.d.ts +77 -2
- package/dist/core/ai.js +207 -30
- package/dist/core/command-runner.d.ts +17 -0
- package/dist/core/command-runner.js +78 -0
- package/dist/core/logger.d.ts +40 -0
- package/dist/core/logger.js +138 -0
- package/dist/core/metrics.d.ts +34 -0
- package/dist/core/metrics.js +206 -0
- package/dist/core/prompts.d.ts +1 -0
- package/dist/core/prompts.js +121 -0
- package/dist/core/security.d.ts +34 -0
- package/dist/core/security.js +197 -0
- package/dist/index.js +43 -3
- package/dist/utils/ux.d.ts +3 -0
- package/dist/utils/ux.js +15 -0
- package/docs/agents/domain.md +51 -0
- package/docs/agents/issue-tracker.md +45 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/api/.nojekyll +1 -0
- package/docs/api/assets/hierarchy.js +1 -0
- package/docs/api/assets/highlight.css +71 -0
- package/docs/api/assets/icons.js +18 -0
- package/docs/api/assets/icons.svg +1 -0
- package/docs/api/assets/main.js +60 -0
- package/docs/api/assets/navigation.js +1 -0
- package/docs/api/assets/search.js +1 -0
- package/docs/api/assets/style.css +1633 -0
- package/docs/api/hierarchy.html +1 -0
- package/docs/api/index.html +39 -0
- package/docs/api/modules.html +1 -0
- package/eslint.config.js +170 -0
- package/jest.config.json +37 -0
- package/lighthouserc.json +22 -0
- package/logs/.8a99b6cf655346317fdbf29f4fffcf91131432f3-audit.json +15 -0
- package/logs/.eee104bf8fff5ecd38a6a2842df260de6470a7c3-audit.json +15 -0
- package/package.json +62 -8
- package/src/commands/explain.ts +13 -42
- package/src/commands/fix.ts +13 -31
- package/src/commands/generate.ts +47 -46
- package/src/commands/health.ts +440 -0
- package/src/commands/init.ts +48 -42
- package/src/commands/menu.ts +86 -2
- package/src/commands/metrics.ts +65 -0
- package/src/commands/optimize.ts +40 -28
- package/src/commands/review.ts +54 -40
- package/src/commands/security-check.ts +54 -34
- package/src/commands/status.ts +47 -0
- package/src/commands/suggest.ts +13 -32
- package/src/config/config.ts +35 -2
- package/src/core/ai.ts +237 -26
- package/src/core/command-runner.ts +105 -0
- package/src/core/logger.ts +194 -0
- package/src/core/metrics.ts +232 -0
- package/src/core/prompts.ts +128 -0
- package/src/core/security.ts +243 -0
- package/src/index.ts +50 -3
- package/src/utils/ux.ts +18 -0
- package/test-suite.sh +147 -0
- package/tsconfig.json +3 -2
- package/typedoc.json +44 -0
- package/types/global.d.ts +13 -0
- package/validate-workflows.sh +270 -0
- package/.eslintignore +0 -1
- package/.eslintrc.cjs +0 -43
- package/src/core/ai.test.js +0 -40
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
name: Release Management
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
tags: ['v*']
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
release_type:
|
|
10
|
+
description: 'Release type (patch, minor, major, prerelease)'
|
|
11
|
+
required: true
|
|
12
|
+
default: 'patch'
|
|
13
|
+
type: choice
|
|
14
|
+
options:
|
|
15
|
+
- patch
|
|
16
|
+
- minor
|
|
17
|
+
- major
|
|
18
|
+
- prerelease
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: write
|
|
22
|
+
packages: write
|
|
23
|
+
pull-requests: write
|
|
24
|
+
issues: write
|
|
25
|
+
id-token: write
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
pre-release-validation:
|
|
29
|
+
name: Pre-Release Validation
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
timeout-minutes: 20
|
|
32
|
+
steps:
|
|
33
|
+
- name: Harden Runner
|
|
34
|
+
uses: step-security/harden-runner@v2
|
|
35
|
+
with:
|
|
36
|
+
egress-policy: audit
|
|
37
|
+
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
with:
|
|
40
|
+
fetch-depth: 0
|
|
41
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
42
|
+
|
|
43
|
+
- name: Set up Node.js
|
|
44
|
+
uses: actions/setup-node@v4
|
|
45
|
+
with:
|
|
46
|
+
node-version: '22.14.0'
|
|
47
|
+
cache: 'npm'
|
|
48
|
+
registry-url: 'https://registry.npmjs.org'
|
|
49
|
+
|
|
50
|
+
- name: Install dependencies
|
|
51
|
+
run: npm ci --prefer-offline --no-audit
|
|
52
|
+
|
|
53
|
+
- name: Run full test suite
|
|
54
|
+
run: npm run test:ci
|
|
55
|
+
|
|
56
|
+
- name: Build project
|
|
57
|
+
run: npm run build
|
|
58
|
+
|
|
59
|
+
- name: Generate documentation
|
|
60
|
+
run: npm run docs
|
|
61
|
+
|
|
62
|
+
- name: Run security audit
|
|
63
|
+
run: npm audit --omit=dev --audit-level=high
|
|
64
|
+
|
|
65
|
+
- name: Package size check
|
|
66
|
+
run: |
|
|
67
|
+
npm pack --dry-run
|
|
68
|
+
du -sh *.tgz || echo "No package found"
|
|
69
|
+
|
|
70
|
+
- name: Validate package contents
|
|
71
|
+
run: |
|
|
72
|
+
npm pack
|
|
73
|
+
tar -tzf *.tgz | head -20
|
|
74
|
+
|
|
75
|
+
release:
|
|
76
|
+
name: Create Release
|
|
77
|
+
runs-on: ubuntu-latest
|
|
78
|
+
needs: pre-release-validation
|
|
79
|
+
timeout-minutes: 15
|
|
80
|
+
environment: production
|
|
81
|
+
env:
|
|
82
|
+
# Authentication uses OIDC with npm 11.5.1+; provenance is an attestation.
|
|
83
|
+
NPM_CONFIG_PROVENANCE: 'true'
|
|
84
|
+
steps:
|
|
85
|
+
- name: Harden Runner
|
|
86
|
+
uses: step-security/harden-runner@v2
|
|
87
|
+
with:
|
|
88
|
+
egress-policy: audit
|
|
89
|
+
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
with:
|
|
92
|
+
fetch-depth: 0
|
|
93
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
94
|
+
|
|
95
|
+
- name: Set up Node.js
|
|
96
|
+
uses: actions/setup-node@v4
|
|
97
|
+
with:
|
|
98
|
+
node-version: '22.14.0'
|
|
99
|
+
cache: 'npm'
|
|
100
|
+
registry-url: 'https://registry.npmjs.org'
|
|
101
|
+
|
|
102
|
+
- name: Install dependencies
|
|
103
|
+
run: npm ci --prefer-offline --no-audit
|
|
104
|
+
|
|
105
|
+
- name: Build project
|
|
106
|
+
run: npm run build
|
|
107
|
+
|
|
108
|
+
- name: Generate documentation
|
|
109
|
+
run: npm run docs
|
|
110
|
+
|
|
111
|
+
- name: Install npm with trusted publishing support
|
|
112
|
+
run: npm install --global npm@11.17.0
|
|
113
|
+
|
|
114
|
+
- name: Generate changelog
|
|
115
|
+
run: |
|
|
116
|
+
npx conventional-changelog-cli -p angular -i CHANGELOG.md -s
|
|
117
|
+
git add CHANGELOG.md || echo "No changelog changes"
|
|
118
|
+
|
|
119
|
+
- name: Create Release PR
|
|
120
|
+
if: github.event_name == 'workflow_dispatch'
|
|
121
|
+
uses: peter-evans/create-pull-request@v7
|
|
122
|
+
with:
|
|
123
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
124
|
+
commit-message: 'chore(release): prepare release ${{ github.event.inputs.release_type }}'
|
|
125
|
+
title: 'chore(release): prepare ${{ github.event.inputs.release_type }} release'
|
|
126
|
+
body: |
|
|
127
|
+
## Release Preparation
|
|
128
|
+
|
|
129
|
+
This PR prepares a ${{ github.event.inputs.release_type }} release.
|
|
130
|
+
|
|
131
|
+
### Changes included:
|
|
132
|
+
- Updated version in package.json
|
|
133
|
+
- Generated changelog
|
|
134
|
+
- Updated documentation
|
|
135
|
+
|
|
136
|
+
### Pre-release checklist:
|
|
137
|
+
- [ ] All tests passing
|
|
138
|
+
- [ ] Documentation updated
|
|
139
|
+
- [ ] Security audit clean
|
|
140
|
+
- [ ] Breaking changes documented
|
|
141
|
+
|
|
142
|
+
**Auto-generated by Release Management workflow**
|
|
143
|
+
branch: release/prepare-${{ github.event.inputs.release_type }}
|
|
144
|
+
delete-branch: true
|
|
145
|
+
|
|
146
|
+
- name: Release with semantic-release
|
|
147
|
+
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
|
148
|
+
env:
|
|
149
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
150
|
+
run: npx semantic-release
|
|
151
|
+
|
|
152
|
+
- name: Manual publish for workflow dispatch
|
|
153
|
+
if: github.event_name == 'workflow_dispatch'
|
|
154
|
+
run: |
|
|
155
|
+
# For manual releases, update version first
|
|
156
|
+
npm version ${{ github.event.inputs.release_type }} --no-git-tag-version
|
|
157
|
+
npm publish --access public --provenance
|
|
158
|
+
|
|
159
|
+
- name: Update GitHub Pages
|
|
160
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
161
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
162
|
+
with:
|
|
163
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
164
|
+
publish_dir: ./docs
|
|
165
|
+
publish_branch: gh-pages
|
|
166
|
+
enable_jekyll: false
|
|
167
|
+
|
|
168
|
+
- name: Create GitHub Release
|
|
169
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
170
|
+
uses: softprops/action-gh-release@v2
|
|
171
|
+
with:
|
|
172
|
+
files: |
|
|
173
|
+
dist/**
|
|
174
|
+
docs/**
|
|
175
|
+
*.tgz
|
|
176
|
+
generate_release_notes: true
|
|
177
|
+
draft: false
|
|
178
|
+
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
|
179
|
+
|
|
180
|
+
post-release:
|
|
181
|
+
name: Post Release Tasks
|
|
182
|
+
runs-on: ubuntu-latest
|
|
183
|
+
needs: release
|
|
184
|
+
if: always() && (needs.release.result == 'success')
|
|
185
|
+
timeout-minutes: 10
|
|
186
|
+
steps:
|
|
187
|
+
- name: Harden Runner
|
|
188
|
+
uses: step-security/harden-runner@v2
|
|
189
|
+
with:
|
|
190
|
+
egress-policy: audit
|
|
191
|
+
|
|
192
|
+
- uses: actions/checkout@v4
|
|
193
|
+
|
|
194
|
+
- name: Update repository topics
|
|
195
|
+
# Best-effort: GITHUB_TOKEN cannot replaceAllTopics without admin.
|
|
196
|
+
continue-on-error: true
|
|
197
|
+
uses: actions/github-script@v7
|
|
198
|
+
with:
|
|
199
|
+
script: |
|
|
200
|
+
const packageJson = require('./package.json');
|
|
201
|
+
const topics = [
|
|
202
|
+
'cli',
|
|
203
|
+
'ai',
|
|
204
|
+
'developer-tools',
|
|
205
|
+
'ollama',
|
|
206
|
+
'typescript',
|
|
207
|
+
`version-${packageJson.version.replace(/\./g, '-')}`
|
|
208
|
+
];
|
|
209
|
+
|
|
210
|
+
await github.rest.repos.replaceAllTopics({
|
|
211
|
+
owner: context.repo.owner,
|
|
212
|
+
repo: context.repo.repo,
|
|
213
|
+
names: topics
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
- name: Notify stakeholders
|
|
217
|
+
uses: 8398a7/action-slack@v3
|
|
218
|
+
continue-on-error: true
|
|
219
|
+
with:
|
|
220
|
+
status: 'success'
|
|
221
|
+
channel: '#releases'
|
|
222
|
+
text: |
|
|
223
|
+
🎉 New release published!
|
|
224
|
+
|
|
225
|
+
**Repository:** ${{ github.repository }}
|
|
226
|
+
**Version:** ${{ github.ref_name }}
|
|
227
|
+
**Release Notes:** ${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ github.ref_name }}
|
|
228
|
+
env:
|
|
229
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
name: Security Monitoring
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 6 * * 1' # Every Monday at 6 AM UTC
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ main ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ main ]
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
actions: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
secret-scan:
|
|
18
|
+
name: Secret Scanning
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 10
|
|
21
|
+
steps:
|
|
22
|
+
- name: Harden Runner
|
|
23
|
+
uses: step-security/harden-runner@v2
|
|
24
|
+
with:
|
|
25
|
+
egress-policy: audit
|
|
26
|
+
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
|
|
31
|
+
- name: Run TruffleHog
|
|
32
|
+
uses: trufflesecurity/trufflehog@main
|
|
33
|
+
with:
|
|
34
|
+
path: ./
|
|
35
|
+
# Use the action's event-aware range (push, PR, or full history).
|
|
36
|
+
extra_args: --debug --only-verified
|
|
37
|
+
|
|
38
|
+
license-check:
|
|
39
|
+
name: License Compliance
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
timeout-minutes: 10
|
|
42
|
+
steps:
|
|
43
|
+
- name: Harden Runner
|
|
44
|
+
uses: step-security/harden-runner@v2
|
|
45
|
+
with:
|
|
46
|
+
egress-policy: audit
|
|
47
|
+
|
|
48
|
+
- uses: actions/checkout@v4
|
|
49
|
+
|
|
50
|
+
- name: Set up Node.js
|
|
51
|
+
uses: actions/setup-node@v4
|
|
52
|
+
with:
|
|
53
|
+
node-version: '20.8.1'
|
|
54
|
+
cache: 'npm'
|
|
55
|
+
|
|
56
|
+
- name: Install dependencies
|
|
57
|
+
run: npm ci --prefer-offline --no-audit
|
|
58
|
+
|
|
59
|
+
- name: Check licenses
|
|
60
|
+
run: |
|
|
61
|
+
npx license-checker --summary --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;0BSD;Unlicense' || echo "License check completed with warnings"
|
|
62
|
+
continue-on-error: true
|
|
63
|
+
|
|
64
|
+
supply-chain:
|
|
65
|
+
name: Supply Chain Security
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
timeout-minutes: 15
|
|
68
|
+
steps:
|
|
69
|
+
- name: Harden Runner
|
|
70
|
+
uses: step-security/harden-runner@v2
|
|
71
|
+
with:
|
|
72
|
+
egress-policy: audit
|
|
73
|
+
|
|
74
|
+
- uses: actions/checkout@v4
|
|
75
|
+
|
|
76
|
+
- name: Set up Node.js
|
|
77
|
+
uses: actions/setup-node@v4
|
|
78
|
+
with:
|
|
79
|
+
node-version: '20.8.1'
|
|
80
|
+
cache: 'npm'
|
|
81
|
+
|
|
82
|
+
- name: Install dependencies
|
|
83
|
+
run: npm ci --prefer-offline --no-audit
|
|
84
|
+
|
|
85
|
+
- name: Run OSV Scanner
|
|
86
|
+
uses: google/osv-scanner-action/osv-scanner-action@v2.6.0
|
|
87
|
+
continue-on-error: true
|
|
88
|
+
with:
|
|
89
|
+
scan-args: |-
|
|
90
|
+
--recursive
|
|
91
|
+
./
|
|
92
|
+
|
|
93
|
+
- name: Run Snyk Security Scan
|
|
94
|
+
uses: snyk/actions/node@master
|
|
95
|
+
env:
|
|
96
|
+
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
|
|
97
|
+
with:
|
|
98
|
+
args: --severity-threshold=high
|
|
99
|
+
continue-on-error: true
|
|
100
|
+
|
|
101
|
+
sbom-generation:
|
|
102
|
+
name: Generate SBOM
|
|
103
|
+
runs-on: ubuntu-latest
|
|
104
|
+
timeout-minutes: 10
|
|
105
|
+
steps:
|
|
106
|
+
- name: Harden Runner
|
|
107
|
+
uses: step-security/harden-runner@v2
|
|
108
|
+
with:
|
|
109
|
+
egress-policy: audit
|
|
110
|
+
|
|
111
|
+
- uses: actions/checkout@v4
|
|
112
|
+
|
|
113
|
+
- name: Set up Node.js
|
|
114
|
+
uses: actions/setup-node@v4
|
|
115
|
+
with:
|
|
116
|
+
node-version: '20.8.1'
|
|
117
|
+
cache: 'npm'
|
|
118
|
+
|
|
119
|
+
- name: Install dependencies
|
|
120
|
+
run: npm ci --prefer-offline --no-audit
|
|
121
|
+
|
|
122
|
+
- name: Generate SBOM
|
|
123
|
+
run: |
|
|
124
|
+
npx --yes @cyclonedx/cyclonedx-npm --output-file sbom.json
|
|
125
|
+
npx --yes @cyclonedx/cyclonedx-npm --output-file sbom.xml --output-format XML
|
|
126
|
+
|
|
127
|
+
- name: Upload SBOM
|
|
128
|
+
uses: actions/upload-artifact@v4
|
|
129
|
+
with:
|
|
130
|
+
name: sbom-files
|
|
131
|
+
path: |
|
|
132
|
+
sbom.json
|
|
133
|
+
sbom.xml
|
|
134
|
+
retention-days: 90
|
|
135
|
+
|
|
136
|
+
security-scorecard:
|
|
137
|
+
name: OSSF Scorecard
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
permissions:
|
|
140
|
+
security-events: write
|
|
141
|
+
actions: read
|
|
142
|
+
contents: read
|
|
143
|
+
id-token: write
|
|
144
|
+
# Scorecard only supports analysis from the repository's default branch.
|
|
145
|
+
if: github.event_name != 'pull_request' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
|
|
146
|
+
steps:
|
|
147
|
+
- name: Harden Runner
|
|
148
|
+
uses: step-security/harden-runner@v2
|
|
149
|
+
with:
|
|
150
|
+
egress-policy: audit
|
|
151
|
+
|
|
152
|
+
- uses: actions/checkout@v4
|
|
153
|
+
with:
|
|
154
|
+
persist-credentials: false
|
|
155
|
+
|
|
156
|
+
- name: Run analysis
|
|
157
|
+
uses: ossf/scorecard-action@v2.4.4
|
|
158
|
+
with:
|
|
159
|
+
results_file: results.sarif
|
|
160
|
+
results_format: sarif
|
|
161
|
+
publish_results: true
|
|
162
|
+
|
|
163
|
+
- name: Upload SARIF results
|
|
164
|
+
if: always() && hashFiles('results.sarif') != ''
|
|
165
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
166
|
+
with:
|
|
167
|
+
sarif_file: results.sarif
|
|
168
|
+
|
|
169
|
+
container-scan:
|
|
170
|
+
name: Container and Dependency Scan
|
|
171
|
+
runs-on: ubuntu-latest
|
|
172
|
+
timeout-minutes: 15
|
|
173
|
+
if: github.event_name != 'pull_request'
|
|
174
|
+
permissions:
|
|
175
|
+
contents: read
|
|
176
|
+
security-events: write
|
|
177
|
+
steps:
|
|
178
|
+
- name: Harden Runner
|
|
179
|
+
uses: step-security/harden-runner@v2
|
|
180
|
+
with:
|
|
181
|
+
egress-policy: audit
|
|
182
|
+
|
|
183
|
+
- uses: actions/checkout@v4
|
|
184
|
+
|
|
185
|
+
# Scorecard publishing only permits approved actions in its own job.
|
|
186
|
+
- name: Container and dependency scan
|
|
187
|
+
uses: anchore/scan-action@v7.4.2
|
|
188
|
+
id: scan
|
|
189
|
+
with:
|
|
190
|
+
path: "."
|
|
191
|
+
fail-build: false
|
|
192
|
+
output-format: sarif
|
|
193
|
+
|
|
194
|
+
- name: Upload Anchore scan SARIF file
|
|
195
|
+
if: always() && steps.scan.outputs.sarif != ''
|
|
196
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
197
|
+
with:
|
|
198
|
+
sarif_file: ${{ steps.scan.outputs.sarif }}
|
package/.releaserc.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"branches": [
|
|
3
|
+
"main",
|
|
4
|
+
{
|
|
5
|
+
"name": "improvement",
|
|
6
|
+
"prerelease": "beta"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "development",
|
|
10
|
+
"prerelease": "alpha"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"plugins": [
|
|
14
|
+
"@semantic-release/commit-analyzer",
|
|
15
|
+
"@semantic-release/release-notes-generator",
|
|
16
|
+
[
|
|
17
|
+
"@semantic-release/changelog",
|
|
18
|
+
{
|
|
19
|
+
"changelogFile": "CHANGELOG.md"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"@semantic-release/npm",
|
|
23
|
+
[
|
|
24
|
+
"@semantic-release/github",
|
|
25
|
+
{
|
|
26
|
+
"assets": [
|
|
27
|
+
{
|
|
28
|
+
"path": "dist/**",
|
|
29
|
+
"label": "Distribution files"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"path": "docs/**",
|
|
33
|
+
"label": "Documentation"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
"@semantic-release/git",
|
|
40
|
+
{
|
|
41
|
+
"assets": [
|
|
42
|
+
"CHANGELOG.md",
|
|
43
|
+
"package.json",
|
|
44
|
+
"package-lock.json"
|
|
45
|
+
],
|
|
46
|
+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
]
|
|
50
|
+
}
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## Agent skills
|
|
2
|
+
|
|
3
|
+
### Issue tracker
|
|
4
|
+
|
|
5
|
+
Issues live in GitHub Issues (rahul05ranjan/dhruv-cli), via the `gh` CLI. See `docs/agents/issue-tracker.md`.
|
|
6
|
+
|
|
7
|
+
### Triage labels
|
|
8
|
+
|
|
9
|
+
Default five-role vocabulary: `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`. See `docs/agents/triage-labels.md`.
|
|
10
|
+
|
|
11
|
+
### Domain docs
|
|
12
|
+
|
|
13
|
+
Single-context: one `CONTEXT.md` + `docs/adr/` at the repo root. See `docs/agents/domain.md`.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [1.4.0](https://github.com/rahul05ranjan/dhruv-cli/compare/v1.4.5...v1.4.0) (2026-09-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **ci:** isolate Scorecard publishing from other security scans ([087833b](https://github.com/rahul05ranjan/dhruv-cli/commit/087833b470c2df96da54eb1f07fc5ef488106f61))
|
|
7
|
+
* **ci:** repair trusted publishing and security workflows ([7f6d202](https://github.com/rahul05ranjan/dhruv-cli/commit/7f6d2028ffde96a446d6f346d0936c56fb830e61))
|
|
8
|
+
* **ci:** update Anchore scanner for the current vulnerability database ([7009198](https://github.com/rahul05ranjan/dhruv-cli/commit/70091989b636878f61c741eb2b5abf21fb5df922))
|
|
1
9
|
# Changelog
|
|
2
10
|
|
|
3
11
|
## [1.1.1](https://github.com/rahul05ranjan/dhruv-cli/compare/v1.1.0...v1.1.1) (2025-06-29)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# 🔧 NPM Publishing Issue Resolution
|
|
2
|
+
|
|
3
|
+
## Issue Description
|
|
4
|
+
The GitHub Actions workflow was failing with:
|
|
5
|
+
```
|
|
6
|
+
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/@rahul05ranjan%2fdhruv-cli - You cannot publish over the previously published versions: 0.0.0-development.
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Root Cause
|
|
10
|
+
The package.json had version `0.0.0-development` which already exists on NPM and cannot be republished.
|
|
11
|
+
|
|
12
|
+
## Solution Applied
|
|
13
|
+
|
|
14
|
+
### 1. ✅ Updated Package Version
|
|
15
|
+
- Changed version from `0.0.0-development` to `1.4.0` (next logical version after `1.3.0`)
|
|
16
|
+
- This avoids the conflict with existing published versions
|
|
17
|
+
|
|
18
|
+
### 2. ✅ Added Semantic Release Configuration
|
|
19
|
+
- Created `.releaserc.json` with proper semantic-release configuration
|
|
20
|
+
- Added support for conventional commits and automated versioning
|
|
21
|
+
- Installed required semantic-release plugins
|
|
22
|
+
|
|
23
|
+
### 3. ✅ Improved CI/CD Workflows
|
|
24
|
+
- **Modified `ci.yml`**: Removed direct npm publish to avoid conflicts
|
|
25
|
+
- **Updated `release.yml`**: Enhanced with semantic-release support
|
|
26
|
+
- **Created `build-publish.yml`**: New dedicated publishing workflow with version conflict detection
|
|
27
|
+
|
|
28
|
+
### 4. ✅ Version Conflict Prevention
|
|
29
|
+
The new `build-publish.yml` workflow includes:
|
|
30
|
+
- Automatic version conflict detection
|
|
31
|
+
- Smart version bumping based on commit messages
|
|
32
|
+
- Support for manual version bumping
|
|
33
|
+
- Proper Git tagging and GitHub releases
|
|
34
|
+
|
|
35
|
+
## Current Status
|
|
36
|
+
- ✅ Package version: `1.4.0` (ready for publishing)
|
|
37
|
+
- ✅ Dry run successful: Package can be published without conflicts
|
|
38
|
+
- ✅ All tests passing
|
|
39
|
+
- ✅ Build successful
|
|
40
|
+
- ✅ Linting clean
|
|
41
|
+
- ✅ Documentation generated
|
|
42
|
+
|
|
43
|
+
## Published Versions on NPM
|
|
44
|
+
```json
|
|
45
|
+
[
|
|
46
|
+
"0.0.0-development",
|
|
47
|
+
"1.0.0", "1.0.1", "1.1.0", "1.1.1",
|
|
48
|
+
"1.1.2", "1.1.3", "1.1.4", "1.1.5",
|
|
49
|
+
"1.1.6", "1.2.0", "1.2.1", "1.2.2",
|
|
50
|
+
"1.2.3", "1.2.4", "1.3.0"
|
|
51
|
+
]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Next Steps
|
|
55
|
+
1. **For immediate fix**: The package is ready to publish as version `1.4.0`
|
|
56
|
+
2. **For future releases**: Use the new `build-publish.yml` workflow
|
|
57
|
+
3. **For semantic releases**: Commit messages should follow conventional commits format
|
|
58
|
+
|
|
59
|
+
## Workflow Recommendations
|
|
60
|
+
|
|
61
|
+
### For Hotfixes/Patches
|
|
62
|
+
```bash
|
|
63
|
+
# Commit with conventional format
|
|
64
|
+
git commit -m "fix: resolve critical issue"
|
|
65
|
+
# This will trigger a patch release (1.4.1)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### For Features
|
|
69
|
+
```bash
|
|
70
|
+
# Commit with conventional format
|
|
71
|
+
git commit -m "feat: add new functionality"
|
|
72
|
+
# This will trigger a minor release (1.5.0)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### For Breaking Changes
|
|
76
|
+
```bash
|
|
77
|
+
# Commit with breaking change notation
|
|
78
|
+
git commit -m "feat!: major API changes
|
|
79
|
+
|
|
80
|
+
BREAKING CHANGE: This changes the API structure"
|
|
81
|
+
# This will trigger a major release (2.0.0)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Files Modified
|
|
85
|
+
- ✅ `package.json` - Updated version to 1.4.0
|
|
86
|
+
- ✅ `.releaserc.json` - Added semantic-release configuration
|
|
87
|
+
- ✅ `.github/workflows/ci.yml` - Removed direct publishing
|
|
88
|
+
- ✅ `.github/workflows/release.yml` - Enhanced with semantic-release
|
|
89
|
+
- ✅ `.github/workflows/build-publish.yml` - New intelligent publishing workflow
|
|
90
|
+
- ✅ `package.json` - Added semantic-release dependencies
|
|
91
|
+
|
|
92
|
+
The publishing issue is now resolved! 🎉
|