@reallavo/clonecheck 0.1.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/.env.example +2 -0
- package/.gitattributes +1 -0
- package/.github/workflows/ci.yml +24 -0
- package/CONTRIBUTING.md +22 -0
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/action/README.md +34 -0
- package/action/action.yml +50 -0
- package/clonecheck.config.json +5 -0
- package/docs/checks.md +44 -0
- package/docs/config.md +36 -0
- package/docs/scoring.md +20 -0
- package/eslint.config.js +29 -0
- package/examples/docker-compose-missing-env/.env.example +1 -0
- package/examples/docker-compose-missing-env/README.md +5 -0
- package/examples/docker-compose-missing-env/docker-compose.yml +12 -0
- package/examples/node-basic/.env.example +1 -0
- package/examples/node-basic/README.md +8 -0
- package/examples/node-basic/package.json +15 -0
- package/examples/node-basic/pnpm-lock.yaml +5 -0
- package/examples/node-basic/src-index.ts +1 -0
- package/examples/node-missing-env/.env.example +1 -0
- package/examples/node-missing-env/README.md +8 -0
- package/examples/node-missing-env/package.json +11 -0
- package/examples/node-missing-env/pnpm-lock.yaml +5 -0
- package/examples/node-missing-env/src/app.ts +14 -0
- package/examples/python-basic/.env.example +1 -0
- package/examples/python-basic/README.md +8 -0
- package/examples/python-basic/app.py +6 -0
- package/examples/python-basic/requirements.txt +1 -0
- package/package.json +40 -0
- package/packages/cli/LICENSE +21 -0
- package/packages/cli/README.md +15 -0
- package/packages/cli/package.json +55 -0
- package/packages/cli/src/index.ts +186 -0
- package/packages/cli/tsconfig.json +11 -0
- package/packages/core/LICENSE +21 -0
- package/packages/core/README.md +11 -0
- package/packages/core/package.json +51 -0
- package/packages/core/src/checks/ciPresence.ts +35 -0
- package/packages/core/src/checks/dockerComposeEnv.ts +61 -0
- package/packages/core/src/checks/envExample.ts +31 -0
- package/packages/core/src/checks/helpers.ts +54 -0
- package/packages/core/src/checks/index.ts +24 -0
- package/packages/core/src/checks/packageManagerConsistency.ts +65 -0
- package/packages/core/src/checks/portDocumentation.ts +62 -0
- package/packages/core/src/checks/projectFiles.ts +77 -0
- package/packages/core/src/checks/readmeCommands.ts +87 -0
- package/packages/core/src/checks/scriptsAvailability.ts +69 -0
- package/packages/core/src/config.ts +96 -0
- package/packages/core/src/detectors/dockerCompose.ts +62 -0
- package/packages/core/src/detectors/env.ts +189 -0
- package/packages/core/src/detectors/packageManager.ts +54 -0
- package/packages/core/src/detectors/ports.ts +99 -0
- package/packages/core/src/detectors/project.ts +50 -0
- package/packages/core/src/detectors/readme.ts +131 -0
- package/packages/core/src/index.ts +31 -0
- package/packages/core/src/reporters/index.ts +3 -0
- package/packages/core/src/reporters/json.ts +5 -0
- package/packages/core/src/reporters/labels.ts +40 -0
- package/packages/core/src/reporters/markdown.ts +63 -0
- package/packages/core/src/reporters/text.ts +108 -0
- package/packages/core/src/run.ts +111 -0
- package/packages/core/src/scoring.ts +60 -0
- package/packages/core/src/types.ts +85 -0
- package/packages/core/src/utils/files.ts +109 -0
- package/packages/core/tests/config.test.ts +53 -0
- package/packages/core/tests/detectors.test.ts +127 -0
- package/packages/core/tests/fixtures/docker-compose-missing-env/.env.example +1 -0
- package/packages/core/tests/fixtures/docker-compose-missing-env/README.md +5 -0
- package/packages/core/tests/fixtures/docker-compose-missing-env/docker-compose.yml +6 -0
- package/packages/core/tests/fixtures/env-missing/.env.example +1 -0
- package/packages/core/tests/fixtures/env-missing/README.md +6 -0
- package/packages/core/tests/fixtures/env-missing/package-lock.json +4 -0
- package/packages/core/tests/fixtures/env-missing/package.json +8 -0
- package/packages/core/tests/fixtures/env-missing/src.py +4 -0
- package/packages/core/tests/fixtures/node-pnpm-readme-npm/.env.example +1 -0
- package/packages/core/tests/fixtures/node-pnpm-readme-npm/README.md +8 -0
- package/packages/core/tests/fixtures/node-pnpm-readme-npm/package.json +8 -0
- package/packages/core/tests/fixtures/node-pnpm-readme-npm/pnpm-lock.yaml +1 -0
- package/packages/core/tests/fixtures/node-pnpm-readme-npm/src.ts +3 -0
- package/packages/core/tests/reporters.test.ts +43 -0
- package/packages/core/tests/run.test.ts +37 -0
- package/packages/core/tests/scoring.test.ts +33 -0
- package/packages/core/tsconfig.json +8 -0
- package/packages/npm/LICENSE +21 -0
- package/packages/npm/README.md +17 -0
- package/packages/npm/package.json +54 -0
- package/packages/npm/src/index.ts +2 -0
- package/packages/npm/tsconfig.json +12 -0
- package/pnpm-workspace.yaml +4 -0
- package/prettier.config.js +5 -0
- package/scripts/build-package.mjs +30 -0
- package/tsconfig.base.json +17 -0
package/.env.example
ADDED
package/.gitattributes
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
ci:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: pnpm/action-setup@v4
|
|
15
|
+
with:
|
|
16
|
+
version: 10.23.0
|
|
17
|
+
- uses: actions/setup-node@v4
|
|
18
|
+
with:
|
|
19
|
+
node-version: 20
|
|
20
|
+
cache: pnpm
|
|
21
|
+
- run: pnpm install
|
|
22
|
+
- run: pnpm lint
|
|
23
|
+
- run: pnpm test
|
|
24
|
+
- run: pnpm build
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping improve clonecheck.
|
|
4
|
+
|
|
5
|
+
## Local Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm install
|
|
9
|
+
pnpm build
|
|
10
|
+
pnpm test
|
|
11
|
+
pnpm lint
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Run the CLI against an example fixture:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pnpm --filter @clonecheck/cli dev -- scan ./examples/node-missing-env
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Pull Requests
|
|
21
|
+
|
|
22
|
+
Keep changes focused, add or update tests for scanner behavior, and document new checks in `docs/checks.md`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 clonecheck contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# clonecheck
|
|
2
|
+
|
|
3
|
+
Know if your repo is actually cloneable.
|
|
4
|
+
|
|
5
|
+
Most tools tell you whether your code is secure or formatted.
|
|
6
|
+
clonecheck tells you whether your repo is actually usable by a new contributor.
|
|
7
|
+
|
|
8
|
+
clonecheck is a CLI and GitHub Action that checks whether a repository is cloneable, runnable, and contributor-friendly. It answers one concrete question:
|
|
9
|
+
|
|
10
|
+
> Can a new developer clone this repo and understand how to run it within 10 minutes?
|
|
11
|
+
|
|
12
|
+
It does not run installs, execute Docker, or call external APIs. The MVP is static analysis for repository usability.
|
|
13
|
+
|
|
14
|
+
## Example Output
|
|
15
|
+
|
|
16
|
+
```txt
|
|
17
|
+
clonecheck v0.1.0
|
|
18
|
+
|
|
19
|
+
Repository: my-app
|
|
20
|
+
Path: /Users/me/my-app
|
|
21
|
+
|
|
22
|
+
Score: 72/100
|
|
23
|
+
Status: Needs work
|
|
24
|
+
|
|
25
|
+
Checks:
|
|
26
|
+
✅ package-manager-consistency
|
|
27
|
+
package manager is consistent: pnpm
|
|
28
|
+
|
|
29
|
+
✅ scripts-availability
|
|
30
|
+
package scripts include an obvious local workflow
|
|
31
|
+
|
|
32
|
+
⚠️ env-example
|
|
33
|
+
Environment variable DATABASE_URL is used but missing from .env.example or another env template.
|
|
34
|
+
Environment variable JWT_SECRET is used but missing from .env.example or another env template.
|
|
35
|
+
|
|
36
|
+
⚠️ readme-commands
|
|
37
|
+
README uses npm commands, but the detected package manager is pnpm.
|
|
38
|
+
|
|
39
|
+
Suggestions:
|
|
40
|
+
1. Add DATABASE_URL= to .env.example.
|
|
41
|
+
2. Add JWT_SECRET= to .env.example.
|
|
42
|
+
3. Update README commands to use pnpm.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install --save-dev clonecheck
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Run without installing:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npx clonecheck scan
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Scoped package users can also run:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx @clonecheck/cli scan
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
pnpm users:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pnpm add -D clonecheck
|
|
67
|
+
pnpm dlx clonecheck scan
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
From this repository:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pnpm install
|
|
74
|
+
pnpm build
|
|
75
|
+
pnpm --filter clonecheck scan
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## CLI Usage
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
clonecheck scan
|
|
82
|
+
clonecheck scan .
|
|
83
|
+
clonecheck scan ./some-repo
|
|
84
|
+
clonecheck scan --format text
|
|
85
|
+
clonecheck scan --format json
|
|
86
|
+
clonecheck scan --format markdown
|
|
87
|
+
clonecheck scan --output clonecheck-report.md
|
|
88
|
+
clonecheck scan --strict
|
|
89
|
+
clonecheck generate-env-example
|
|
90
|
+
clonecheck generate-env-example --write
|
|
91
|
+
clonecheck init
|
|
92
|
+
clonecheck --version
|
|
93
|
+
clonecheck --help
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
During local development:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
pnpm --filter @clonecheck/cli dev -- scan ./examples/node-missing-env
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## GitHub Action
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
name: Clonecheck
|
|
106
|
+
|
|
107
|
+
on:
|
|
108
|
+
pull_request:
|
|
109
|
+
push:
|
|
110
|
+
branches: [main]
|
|
111
|
+
|
|
112
|
+
jobs:
|
|
113
|
+
clonecheck:
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
steps:
|
|
116
|
+
- uses: actions/checkout@v4
|
|
117
|
+
- uses: reallav0/clonecheck@v1
|
|
118
|
+
with:
|
|
119
|
+
format: markdown
|
|
120
|
+
output: clonecheck-report.md
|
|
121
|
+
strict: false
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Checks
|
|
125
|
+
|
|
126
|
+
| Check | What it finds |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `package-manager-consistency` | README commands that do not match the detected lockfile. |
|
|
129
|
+
| `scripts-availability` | Missing `dev`, `start`, `test`, or `build` scripts in Node projects. |
|
|
130
|
+
| `env-example` | Environment variables used in code but missing from env example files. |
|
|
131
|
+
| `readme-commands` | Missing setup commands or README commands that conflict with the package manager. |
|
|
132
|
+
| `port-documentation` | README localhost ports that do not match likely app ports. |
|
|
133
|
+
| `docker-compose-env` | Compose `${VARIABLE}` references missing from env examples. |
|
|
134
|
+
| `project-files` | Missing README, `.gitignore`, contributing guide, or license. |
|
|
135
|
+
| `ci-presence` | Missing GitHub Actions workflow. |
|
|
136
|
+
|
|
137
|
+
See [docs/checks.md](docs/checks.md) for details.
|
|
138
|
+
|
|
139
|
+
## Configuration
|
|
140
|
+
|
|
141
|
+
Create a config file:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
clonecheck init
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Example:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"ignore": ["examples/**", "fixtures/**"],
|
|
152
|
+
"ignoreEnvVars": ["NODE_ENV", "CUSTOM_IGNORE"],
|
|
153
|
+
"checks": {
|
|
154
|
+
"ci-presence": false,
|
|
155
|
+
"license": false
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Supported filenames:
|
|
161
|
+
|
|
162
|
+
- `clonecheck.config.json`
|
|
163
|
+
- `.clonecheckrc`
|
|
164
|
+
- `.clonecheckrc.json`
|
|
165
|
+
|
|
166
|
+
See [docs/config.md](docs/config.md).
|
|
167
|
+
|
|
168
|
+
## Environment Examples
|
|
169
|
+
|
|
170
|
+
Generate a suggested env example:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
clonecheck generate-env-example
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Write missing variables to `.env.example`:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
clonecheck generate-env-example --write
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Existing variables and comments are preserved.
|
|
183
|
+
|
|
184
|
+
## Roadmap
|
|
185
|
+
|
|
186
|
+
- More language-specific detectors for Rails, Laravel, Django, and Phoenix.
|
|
187
|
+
- Package-manager-aware README command suggestions.
|
|
188
|
+
- Optional PR comments for the GitHub Action.
|
|
189
|
+
- Repository templates for common project types.
|
|
190
|
+
- Future opt-in command execution mode for smoke tests.
|
|
191
|
+
|
|
192
|
+
## Contributing
|
|
193
|
+
|
|
194
|
+
Issues and pull requests are welcome. Before opening a PR, run:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
pnpm install
|
|
198
|
+
pnpm lint
|
|
199
|
+
pnpm test
|
|
200
|
+
pnpm build
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## License
|
|
204
|
+
|
|
205
|
+
MIT
|
package/action/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Clonecheck GitHub Action
|
|
2
|
+
|
|
3
|
+
Run clonecheck in CI to catch repository usability problems before contributors hit them.
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
name: Clonecheck
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
pull_request:
|
|
10
|
+
push:
|
|
11
|
+
branches: [main]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
clonecheck:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: reallav0/clonecheck@v1
|
|
19
|
+
with:
|
|
20
|
+
format: markdown
|
|
21
|
+
output: clonecheck-report.md
|
|
22
|
+
strict: false
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Inputs
|
|
26
|
+
|
|
27
|
+
| Input | Default | Description |
|
|
28
|
+
|---|---:|---|
|
|
29
|
+
| `path` | `.` | Repository path to scan. |
|
|
30
|
+
| `format` | `markdown` | Report format: `text`, `json`, or `markdown`. |
|
|
31
|
+
| `output` | empty | Optional file path for the generated report. |
|
|
32
|
+
| `strict` | `false` | Exit with code `1` when the score is below `75`. |
|
|
33
|
+
|
|
34
|
+
The MVP action installs dependencies and builds the local CLI before running it with Node.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Clonecheck
|
|
2
|
+
description: Know if your repo is actually cloneable.
|
|
3
|
+
author: clonecheck contributors
|
|
4
|
+
|
|
5
|
+
inputs:
|
|
6
|
+
path:
|
|
7
|
+
description: Repository path to scan.
|
|
8
|
+
required: false
|
|
9
|
+
default: "."
|
|
10
|
+
format:
|
|
11
|
+
description: Report format. One of text, json, or markdown.
|
|
12
|
+
required: false
|
|
13
|
+
default: markdown
|
|
14
|
+
output:
|
|
15
|
+
description: Optional output file path.
|
|
16
|
+
required: false
|
|
17
|
+
default: ""
|
|
18
|
+
strict:
|
|
19
|
+
description: Exit with code 1 when the clonecheck score is below 75.
|
|
20
|
+
required: false
|
|
21
|
+
default: "false"
|
|
22
|
+
|
|
23
|
+
runs:
|
|
24
|
+
using: composite
|
|
25
|
+
steps:
|
|
26
|
+
- name: Enable pnpm
|
|
27
|
+
shell: bash
|
|
28
|
+
run: corepack enable
|
|
29
|
+
|
|
30
|
+
- name: Install clonecheck dependencies
|
|
31
|
+
shell: bash
|
|
32
|
+
run: pnpm install --frozen-lockfile
|
|
33
|
+
working-directory: ${{ github.action_path }}/..
|
|
34
|
+
|
|
35
|
+
- name: Build clonecheck
|
|
36
|
+
shell: bash
|
|
37
|
+
run: pnpm build
|
|
38
|
+
working-directory: ${{ github.action_path }}/..
|
|
39
|
+
|
|
40
|
+
- name: Run clonecheck
|
|
41
|
+
shell: bash
|
|
42
|
+
run: |
|
|
43
|
+
args=(scan "${{ inputs.path }}" --format "${{ inputs.format }}")
|
|
44
|
+
if [ -n "${{ inputs.output }}" ]; then
|
|
45
|
+
args+=(--output "${{ inputs.output }}")
|
|
46
|
+
fi
|
|
47
|
+
if [ "${{ inputs.strict }}" = "true" ]; then
|
|
48
|
+
args+=(--strict)
|
|
49
|
+
fi
|
|
50
|
+
node "${{ github.action_path }}/../packages/cli/dist/index.js" "${args[@]}"
|
package/docs/checks.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Checks
|
|
2
|
+
|
|
3
|
+
clonecheck ships with practical static checks focused on whether a new contributor can clone, configure, and run a repository quickly.
|
|
4
|
+
|
|
5
|
+
## package-manager-consistency
|
|
6
|
+
|
|
7
|
+
Detects the package manager from lockfiles and compares it with package-manager commands in README shell blocks.
|
|
8
|
+
|
|
9
|
+
- `pnpm-lock.yaml` means `pnpm`
|
|
10
|
+
- `yarn.lock` means `yarn`
|
|
11
|
+
- `package-lock.json` means `npm`
|
|
12
|
+
- `bun.lockb` or `bun.lock` means `bun`
|
|
13
|
+
|
|
14
|
+
## scripts-availability
|
|
15
|
+
|
|
16
|
+
For Node projects, checks `package.json` for `dev`, `start`, `test`, and `build` scripts.
|
|
17
|
+
|
|
18
|
+
- Missing all run scripts is an error.
|
|
19
|
+
- Missing `test` is a warning.
|
|
20
|
+
- Having `dev` or `start` is enough for a basic local run path.
|
|
21
|
+
|
|
22
|
+
## env-example
|
|
23
|
+
|
|
24
|
+
Scans JavaScript, TypeScript, Python, Go, and Rust files for environment variable usage and compares detected variables against `.env.example`, `.env.sample`, `.env.template`, and `example.env`.
|
|
25
|
+
|
|
26
|
+
## readme-commands
|
|
27
|
+
|
|
28
|
+
Extracts shell code blocks from README files and checks for setup and run commands. It warns when README commands conflict with the detected package manager.
|
|
29
|
+
|
|
30
|
+
## port-documentation
|
|
31
|
+
|
|
32
|
+
Detects likely app ports from source files and common config files, then compares them with README localhost URLs.
|
|
33
|
+
|
|
34
|
+
## docker-compose-env
|
|
35
|
+
|
|
36
|
+
Scans Compose files for `${VARIABLE}` references and verifies that each variable is documented in an env example file.
|
|
37
|
+
|
|
38
|
+
## project-files
|
|
39
|
+
|
|
40
|
+
Checks for `README.md`, `CONTRIBUTING.md`, `LICENSE`, and `.gitignore`.
|
|
41
|
+
|
|
42
|
+
## ci-presence
|
|
43
|
+
|
|
44
|
+
Checks for at least one `.github/workflows/*.yml` or `.github/workflows/*.yaml` file.
|
package/docs/config.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
clonecheck looks for config files in this order:
|
|
4
|
+
|
|
5
|
+
1. `clonecheck.config.json`
|
|
6
|
+
2. `.clonecheckrc`
|
|
7
|
+
3. `.clonecheckrc.json`
|
|
8
|
+
|
|
9
|
+
You can also pass a specific file:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
clonecheck scan --config ./clonecheck.config.json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Example
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"ignore": ["examples/**", "fixtures/**"],
|
|
20
|
+
"ignoreEnvVars": ["NODE_ENV", "CUSTOM_IGNORE"],
|
|
21
|
+
"checks": {
|
|
22
|
+
"ci-presence": false,
|
|
23
|
+
"license": false
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Fields
|
|
29
|
+
|
|
30
|
+
| Field | Description |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `ignore` | Additional glob patterns to exclude from file discovery. |
|
|
33
|
+
| `ignoreEnvVars` | Environment variable names that should not require documentation. |
|
|
34
|
+
| `checks` | Map of check IDs to booleans. `false` disables a check. |
|
|
35
|
+
|
|
36
|
+
`license` and `contributing` can be disabled as sub-checks of `project-files`.
|
package/docs/scoring.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Scoring
|
|
2
|
+
|
|
3
|
+
clonecheck starts every repository at `100` and subtracts points for issues.
|
|
4
|
+
|
|
5
|
+
| Severity | Default | Strict |
|
|
6
|
+
|---|---:|---:|
|
|
7
|
+
| `error` | 15 | 15 |
|
|
8
|
+
| `warning` | 7 | 10 |
|
|
9
|
+
| `info` | 2 | 3 |
|
|
10
|
+
|
|
11
|
+
Scores never go below `0`.
|
|
12
|
+
|
|
13
|
+
| Score | Status |
|
|
14
|
+
|---:|---|
|
|
15
|
+
| 90-100 | Excellent |
|
|
16
|
+
| 75-89 | Good |
|
|
17
|
+
| 50-74 | Needs work |
|
|
18
|
+
| 0-49 | Poor |
|
|
19
|
+
|
|
20
|
+
`--strict` does not make the scanner run commands. It only makes warnings and info issues cost more and exits with code `1` when the score is below `75`.
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import eslint from "@eslint/js";
|
|
2
|
+
import tseslint from "typescript-eslint";
|
|
3
|
+
|
|
4
|
+
export default tseslint.config(
|
|
5
|
+
{
|
|
6
|
+
ignores: ["**/dist/**", "**/coverage/**", "**/tests/fixtures/**", "node_modules/**"]
|
|
7
|
+
},
|
|
8
|
+
eslint.configs.recommended,
|
|
9
|
+
...tseslint.configs.recommended,
|
|
10
|
+
{
|
|
11
|
+
files: ["**/*.ts"],
|
|
12
|
+
languageOptions: {
|
|
13
|
+
parserOptions: {
|
|
14
|
+
projectService: true,
|
|
15
|
+
tsconfigRootDir: import.meta.dirname
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
rules: {
|
|
19
|
+
"@typescript-eslint/no-explicit-any": "error",
|
|
20
|
+
"@typescript-eslint/no-unused-vars": [
|
|
21
|
+
"error",
|
|
22
|
+
{
|
|
23
|
+
"argsIgnorePattern": "^_",
|
|
24
|
+
"varsIgnorePattern": "^_"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
DATABASE_URL=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VITE_API_URL=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "node-basic",
|
|
3
|
+
"private": true,
|
|
4
|
+
"scripts": {
|
|
5
|
+
"dev": "vite --host 0.0.0.0 --port 5173",
|
|
6
|
+
"build": "vite build",
|
|
7
|
+
"test": "vitest run"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"vite": "^6.0.0"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"vitest": "^2.1.8"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
console.log(import.meta.env.VITE_API_URL);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
DATABASE_URL=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const databaseUrl = process.env.DATABASE_URL;
|
|
2
|
+
const jwtSecret = process.env["JWT_SECRET"];
|
|
3
|
+
const stripeSecretKey = process.env['STRIPE_SECRET_KEY'];
|
|
4
|
+
const apiUrl = import.meta.env.NEXT_PUBLIC_API_URL;
|
|
5
|
+
|
|
6
|
+
export function config() {
|
|
7
|
+
return {
|
|
8
|
+
databaseUrl,
|
|
9
|
+
jwtSecret,
|
|
10
|
+
stripeSecretKey,
|
|
11
|
+
apiUrl,
|
|
12
|
+
port: 5173
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
DATABASE_URL=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
flask==3.1.0
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@reallavo/clonecheck",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Know if your repo is actually cloneable.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"packageManager": "pnpm@10.23.0",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "pnpm -r build",
|
|
12
|
+
"dev": "pnpm --filter @clonecheck/cli dev",
|
|
13
|
+
"lint": "pnpm -r lint",
|
|
14
|
+
"scan": "pnpm --filter clonecheck scan",
|
|
15
|
+
"test": "pnpm -r test",
|
|
16
|
+
"typecheck": "pnpm -r typecheck",
|
|
17
|
+
"format": "prettier --check .",
|
|
18
|
+
"format:write": "prettier --write ."
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"cli",
|
|
22
|
+
"developer-experience",
|
|
23
|
+
"repository",
|
|
24
|
+
"readme",
|
|
25
|
+
"github-action"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@eslint/js": "^9.18.0",
|
|
30
|
+
"@types/js-yaml": "^4.0.9",
|
|
31
|
+
"@types/node": "^22.10.7",
|
|
32
|
+
"eslint": "^9.18.0",
|
|
33
|
+
"prettier": "^3.4.2",
|
|
34
|
+
"tsup": "^8.3.5",
|
|
35
|
+
"tsx": "^4.19.2",
|
|
36
|
+
"typescript": "^5.7.3",
|
|
37
|
+
"typescript-eslint": "^8.20.0",
|
|
38
|
+
"vitest": "^2.1.8"
|
|
39
|
+
}
|
|
40
|
+
}
|