oss-signal 0.2.0 → 0.3.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/CHANGELOG.md +5 -0
- package/README.md +12 -3
- package/action.yml +4 -0
- package/docs/adoption-evidence.md +14 -11
- package/docs/assets/github-step-summary.svg +24 -0
- package/docs/codex-for-oss-application.md +76 -0
- package/docs/examples/github-action-workflow.yml +2 -1
- package/docs/examples/github-url-report.md +1 -1
- package/docs/outreach/README.md +5 -5
- package/docs/self-audit.md +1 -1
- package/package.json +1 -1
- package/src/action.js +52 -1
- package/src/index.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
- Added GitHub Actions step summary output for readable workflow reports.
|
|
6
|
+
- Added a `summary` Action input for turning step summary output on or off.
|
|
7
|
+
|
|
3
8
|
## 0.2.0
|
|
4
9
|
|
|
5
10
|
- Added direct GitHub repository audits for public repositories.
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# oss-signal
|
|
2
2
|
|
|
3
3
|
[](https://github.com/SalmonPlays/oss-signal/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/SalmonPlays/oss-signal/actions/workflows/repository-health.yml)
|
|
4
5
|
[](https://www.npmjs.com/package/oss-signal)
|
|
5
6
|
[](https://www.npmjs.com/package/oss-signal)
|
|
6
7
|
[](LICENSE)
|
|
@@ -21,7 +22,7 @@ Open-source projects often fail quietly because the maintainer workflow is undoc
|
|
|
21
22
|
- Contributors can attach a report to a cleanup issue or pull request.
|
|
22
23
|
- Teams can gate release readiness with `--fail-under`.
|
|
23
24
|
- Foundations and working groups can compare repository hygiene across many projects.
|
|
24
|
-
- CI maintainers can add it as a GitHub Action and publish the report as an artifact.
|
|
25
|
+
- CI maintainers can add it as a GitHub Action, show the score in the workflow summary, and publish the report as an artifact.
|
|
25
26
|
|
|
26
27
|
## Install
|
|
27
28
|
|
|
@@ -137,14 +138,19 @@ oss-signal . --fail-under 80
|
|
|
137
138
|
Add `oss-signal` directly to a GitHub Actions workflow:
|
|
138
139
|
|
|
139
140
|
```yaml
|
|
140
|
-
- uses: SalmonPlays/oss-signal@v0.
|
|
141
|
+
- uses: SalmonPlays/oss-signal@v0.3.0
|
|
141
142
|
id: oss-signal
|
|
142
143
|
with:
|
|
143
144
|
fail-under: "80"
|
|
144
145
|
output: oss-signal-report.md
|
|
146
|
+
summary: "true"
|
|
145
147
|
- run: echo "score ${{ steps.oss-signal.outputs.score }} (${{ steps.oss-signal.outputs.grade }})"
|
|
146
148
|
```
|
|
147
149
|
|
|
150
|
+
The Action writes a concise GitHub Actions step summary by default, so reviewers can see the score and recommended next steps without downloading an artifact. Set `summary: "false"` to disable it.
|
|
151
|
+
|
|
152
|
+

|
|
153
|
+
|
|
148
154
|
Full workflow example:
|
|
149
155
|
|
|
150
156
|
```yaml
|
|
@@ -160,11 +166,12 @@ jobs:
|
|
|
160
166
|
runs-on: ubuntu-latest
|
|
161
167
|
steps:
|
|
162
168
|
- uses: actions/checkout@v4
|
|
163
|
-
- uses: SalmonPlays/oss-signal@v0.
|
|
169
|
+
- uses: SalmonPlays/oss-signal@v0.3.0
|
|
164
170
|
id: oss-signal
|
|
165
171
|
with:
|
|
166
172
|
fail-under: "80"
|
|
167
173
|
output: oss-signal-report.md
|
|
174
|
+
summary: "true"
|
|
168
175
|
- uses: actions/upload-artifact@v4
|
|
169
176
|
with:
|
|
170
177
|
name: oss-signal-report
|
|
@@ -173,6 +180,8 @@ jobs:
|
|
|
173
180
|
|
|
174
181
|
See [docs/examples/github-action-workflow.yml](docs/examples/github-action-workflow.yml) for a copyable workflow.
|
|
175
182
|
|
|
183
|
+
This repository dogfoods the public Action tag in [Repository health](.github/workflows/repository-health.yml), which runs `SalmonPlays/oss-signal@v0.3.0` against the repository and uploads the Markdown report artifact.
|
|
184
|
+
|
|
176
185
|
You can also run the CLI directly in CI:
|
|
177
186
|
|
|
178
187
|
```yaml
|
package/action.yml
CHANGED
|
@@ -17,6 +17,10 @@ inputs:
|
|
|
17
17
|
description: Report file path.
|
|
18
18
|
required: false
|
|
19
19
|
default: oss-signal-report.md
|
|
20
|
+
summary:
|
|
21
|
+
description: Write a concise report to the GitHub Actions step summary.
|
|
22
|
+
required: false
|
|
23
|
+
default: "true"
|
|
20
24
|
fail-under:
|
|
21
25
|
description: Fail the action when the score is below this number.
|
|
22
26
|
required: false
|
|
@@ -6,11 +6,13 @@ This page collects the public evidence that `oss-signal` is built for real open-
|
|
|
6
6
|
|
|
7
7
|
- Repository: https://github.com/SalmonPlays/oss-signal
|
|
8
8
|
- npm package: https://www.npmjs.com/package/oss-signal
|
|
9
|
-
- GitHub Action tag: https://github.com/SalmonPlays/oss-signal/tree/v0.
|
|
9
|
+
- GitHub Action tag: https://github.com/SalmonPlays/oss-signal/tree/v0.3.0
|
|
10
10
|
- GitHub Action metadata: [action.yml](../action.yml)
|
|
11
|
+
- Public dogfood workflow: [.github/workflows/repository-health.yml](../.github/workflows/repository-health.yml)
|
|
11
12
|
- Self-audit report: [docs/self-audit.md](self-audit.md)
|
|
12
13
|
- GitHub URL audit report: [docs/examples/github-url-report.md](examples/github-url-report.md)
|
|
13
14
|
- GitHub Action workflow example: [docs/examples/github-action-workflow.yml](examples/github-action-workflow.yml)
|
|
15
|
+
- Codex for Open Source application brief: [docs/codex-for-oss-application.md](codex-for-oss-application.md)
|
|
14
16
|
- Rule reference: [docs/rules.md](rules.md)
|
|
15
17
|
|
|
16
18
|
## Maintainer Use Case
|
|
@@ -22,19 +24,19 @@ The CLI supports two practical modes:
|
|
|
22
24
|
- Local repository audit for maintainers working in a clone.
|
|
23
25
|
- Public GitHub repository audit for quick triage without cloning.
|
|
24
26
|
|
|
25
|
-
It also ships as a GitHub Action, so maintainers can gate repository hygiene in CI and upload a Markdown report as a workflow artifact.
|
|
27
|
+
It also ships as a GitHub Action, so maintainers can gate repository hygiene in CI, show the result in the GitHub Actions step summary, and upload a Markdown report as a workflow artifact. This repository dogfoods the public Action tag through the Repository health workflow.
|
|
26
28
|
|
|
27
|
-
## Public Field Audits
|
|
29
|
+
## Public Field Audits And PRs
|
|
28
30
|
|
|
29
31
|
The tool has been used to generate maintainer-readiness reports for public repositories and convert them into respectful cleanup issues:
|
|
30
32
|
|
|
31
|
-
| Repository | Report | Posted issue |
|
|
32
|
-
| --- | --- | --- |
|
|
33
|
-
| `platformatic/massimo` | [report](outreach/platformatic-massimo-report.md) | https://github.com/platformatic/massimo/issues/159 |
|
|
34
|
-
| `supermarkt/checkjebon` | [report](outreach/supermarkt-checkjebon-report.md) | https://github.com/supermarkt/checkjebon/issues/22 |
|
|
35
|
-
| `sammorrisdesign/interactive-feed` | [report](outreach/sammorrisdesign-interactive-feed-report.md) | https://github.com/sammorrisdesign/interactive-feed/issues/14 |
|
|
33
|
+
| Repository | Report | Posted issue | Follow-up PR |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| `platformatic/massimo` | [report](outreach/platformatic-massimo-report.md) | https://github.com/platformatic/massimo/issues/159 | https://github.com/platformatic/massimo/pull/160 |
|
|
36
|
+
| `supermarkt/checkjebon` | [report](outreach/supermarkt-checkjebon-report.md) | https://github.com/supermarkt/checkjebon/issues/22 | https://github.com/supermarkt/checkjebon/pull/23 |
|
|
37
|
+
| `sammorrisdesign/interactive-feed` | [report](outreach/sammorrisdesign-interactive-feed-report.md) | https://github.com/sammorrisdesign/interactive-feed/issues/14 | https://github.com/sammorrisdesign/interactive-feed/pull/15 |
|
|
36
38
|
|
|
37
|
-
These issues are evidence of the intended maintainer workflow: run a deterministic audit, explain the missing signals, and give maintainers a small set of actionable improvements.
|
|
39
|
+
These issues and pull requests are evidence of the intended maintainer workflow: run a deterministic audit, explain the missing signals, and give maintainers a small set of actionable improvements. Each PR is intentionally limited to documentation or GitHub templates.
|
|
38
40
|
|
|
39
41
|
## Verification Commands
|
|
40
42
|
|
|
@@ -50,8 +52,9 @@ The current repository self-audit score is 100/100, the GitHub community profile
|
|
|
50
52
|
|
|
51
53
|
Public CI evidence:
|
|
52
54
|
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
+
- CI workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/ci.yml
|
|
56
|
+
- Repository health workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/repository-health.yml
|
|
57
|
+
- CodeQL workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/codeql.yml
|
|
55
58
|
|
|
56
59
|
## Boundaries
|
|
57
60
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="920" height="470" viewBox="0 0 920 470" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">oss-signal GitHub Actions step summary</title>
|
|
3
|
+
<desc id="desc">Example GitHub Actions step summary showing an oss-signal score of 100 out of 100.</desc>
|
|
4
|
+
<rect width="920" height="470" rx="18" fill="#ffffff"/>
|
|
5
|
+
<rect x="1" y="1" width="918" height="468" rx="18" fill="none" stroke="#d0d7de" stroke-width="2"/>
|
|
6
|
+
<rect x="0" y="0" width="920" height="58" rx="18" fill="#f6f8fa"/>
|
|
7
|
+
<text x="32" y="37" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="18" font-weight="700">GitHub Actions step summary</text>
|
|
8
|
+
<text x="32" y="106" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="30" font-weight="700">oss-signal</text>
|
|
9
|
+
<text x="32" y="154" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="20">Score: </text>
|
|
10
|
+
<text x="94" y="154" fill="#1a7f37" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="20" font-weight="700">100/100 (A)</text>
|
|
11
|
+
<rect x="32" y="190" width="520" height="152" rx="8" fill="#ffffff" stroke="#d0d7de"/>
|
|
12
|
+
<line x1="32" y1="238" x2="552" y2="238" stroke="#d0d7de"/>
|
|
13
|
+
<line x1="32" y1="286" x2="552" y2="286" stroke="#d0d7de"/>
|
|
14
|
+
<line x1="32" y1="342" x2="552" y2="342" stroke="#d0d7de"/>
|
|
15
|
+
<line x1="388" y1="190" x2="388" y2="342" stroke="#d0d7de"/>
|
|
16
|
+
<text x="54" y="222" fill="#57606a" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16" font-weight="700">Result</text>
|
|
17
|
+
<text x="444" y="222" fill="#57606a" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16" font-weight="700">Count</text>
|
|
18
|
+
<text x="54" y="270" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16">Passed</text>
|
|
19
|
+
<text x="478" y="270" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16">15</text>
|
|
20
|
+
<text x="54" y="318" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16">Failed</text>
|
|
21
|
+
<text x="486" y="318" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="16">0</text>
|
|
22
|
+
<text x="32" y="390" fill="#24292f" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="21" font-weight="700">Recommended next steps</text>
|
|
23
|
+
<text x="32" y="428" fill="#57606a" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif" font-size="17">No missing maintainer-readiness checks found.</text>
|
|
24
|
+
</svg>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Codex for Open Source Application Brief
|
|
2
|
+
|
|
3
|
+
Snapshot: 2026-06-02T11:20:40Z
|
|
4
|
+
|
|
5
|
+
This document summarizes why `oss-signal` is a fit for OpenAI's Codex for Open Source program. The official program page says open-source maintainers can apply, with emphasis on core maintainers, widely used public projects, and projects that play an important ecosystem role: https://developers.openai.com/community/codex-for-oss
|
|
6
|
+
|
|
7
|
+
## Project
|
|
8
|
+
|
|
9
|
+
- Repository: https://github.com/SalmonPlays/oss-signal
|
|
10
|
+
- npm package: https://www.npmjs.com/package/oss-signal
|
|
11
|
+
- GitHub Action tag: https://github.com/SalmonPlays/oss-signal/tree/v0.3.0
|
|
12
|
+
- CI workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/ci.yml
|
|
13
|
+
- Repository health workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/repository-health.yml
|
|
14
|
+
- CodeQL workflow: https://github.com/SalmonPlays/oss-signal/actions/workflows/codeql.yml
|
|
15
|
+
- Maintainer evidence: [adoption-evidence.md](adoption-evidence.md)
|
|
16
|
+
|
|
17
|
+
## What `oss-signal` Does
|
|
18
|
+
|
|
19
|
+
`oss-signal` is a dependency-light CLI and GitHub Action for OSS maintainers. It audits maintainer-readiness signals that lower recurring maintainer load:
|
|
20
|
+
|
|
21
|
+
- README, license, contribution, support, security, code of conduct, and changelog files.
|
|
22
|
+
- CI, tests, issue templates, pull request templates, Dependabot, and CodeQL-style security workflow.
|
|
23
|
+
- Package metadata and lockfile hygiene.
|
|
24
|
+
|
|
25
|
+
The output is a deterministic score plus actionable next steps in Markdown or JSON. The GitHub Action also writes a workflow step summary so maintainers and reviewers can see the result without downloading an artifact.
|
|
26
|
+
|
|
27
|
+
## Why Codex Helps
|
|
28
|
+
|
|
29
|
+
This project is designed around repeatable maintainer workflows where Codex is useful:
|
|
30
|
+
|
|
31
|
+
- Run audits against public repositories without cloning.
|
|
32
|
+
- Convert findings into focused cleanup issues or pull requests.
|
|
33
|
+
- Keep repository hygiene visible in CI.
|
|
34
|
+
- Generate small contributor-facing files that maintainers can review quickly.
|
|
35
|
+
- Use Codex to turn audit findings into scoped documentation and workflow improvements.
|
|
36
|
+
|
|
37
|
+
## Public Evidence
|
|
38
|
+
|
|
39
|
+
The repository currently has:
|
|
40
|
+
|
|
41
|
+
- A published npm package.
|
|
42
|
+
- A reusable GitHub Action with `score`, `grade`, `failed`, and `report-path` outputs.
|
|
43
|
+
- A v0.3.0 GitHub Action tag with step summary support.
|
|
44
|
+
- A public dogfood workflow that runs `SalmonPlays/oss-signal@v0.3.0` against the repository.
|
|
45
|
+
- CI and CodeQL workflows passing on `main`.
|
|
46
|
+
- A local self-audit score of 100/100.
|
|
47
|
+
- Public reports, issues, and PRs created from real repository audits.
|
|
48
|
+
|
|
49
|
+
## Field Audits And Follow-Up PRs
|
|
50
|
+
|
|
51
|
+
| Repository | Report | Issue | PR | Status |
|
|
52
|
+
| --- | --- | --- | --- | --- |
|
|
53
|
+
| `platformatic/massimo` | [report](outreach/platformatic-massimo-report.md) | https://github.com/platformatic/massimo/issues/159 | https://github.com/platformatic/massimo/pull/160 | open, mergeable |
|
|
54
|
+
| `supermarkt/checkjebon` | [report](outreach/supermarkt-checkjebon-report.md) | https://github.com/supermarkt/checkjebon/issues/22 | https://github.com/supermarkt/checkjebon/pull/23 | open, mergeable |
|
|
55
|
+
| `sammorrisdesign/interactive-feed` | [report](outreach/sammorrisdesign-interactive-feed-report.md) | https://github.com/sammorrisdesign/interactive-feed/issues/14 | https://github.com/sammorrisdesign/interactive-feed/pull/15 | open, mergeable |
|
|
56
|
+
|
|
57
|
+
These PRs are intentionally small and maintainer-friendly. They add documentation or GitHub templates rather than changing product code.
|
|
58
|
+
|
|
59
|
+
## Application Positioning
|
|
60
|
+
|
|
61
|
+
Recommended application angle:
|
|
62
|
+
|
|
63
|
+
`oss-signal` is not yet a widely adopted project, but it is a public OSS maintainer tool built specifically for repeatable Codex-assisted maintenance. The project already has a working CLI, npm distribution, GitHub Action, passing CI/CodeQL, self-audit evidence, and three public field-audit PRs. Codex support would be used to continue auditing repositories, prepare focused maintainer PRs, improve Action automation, and document repeatable OSS maintenance workflows.
|
|
64
|
+
|
|
65
|
+
## Current Gaps
|
|
66
|
+
|
|
67
|
+
- External PRs are open but not yet merged.
|
|
68
|
+
- npm download metrics are still early because the package is newly published.
|
|
69
|
+
- The project needs more real maintainers using the Action in their own repositories.
|
|
70
|
+
|
|
71
|
+
## Next Evidence To Collect
|
|
72
|
+
|
|
73
|
+
- One or more merged external PRs.
|
|
74
|
+
- A GitHub Release for v0.3.0 with release notes.
|
|
75
|
+
- A public workflow run in another repository using `SalmonPlays/oss-signal@v0.3.0`.
|
|
76
|
+
- npm download data once the registry starts reporting weekly/monthly counts.
|
|
@@ -10,11 +10,12 @@ jobs:
|
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@v4
|
|
13
|
-
- uses: SalmonPlays/oss-signal@v0.
|
|
13
|
+
- uses: SalmonPlays/oss-signal@v0.3.0
|
|
14
14
|
id: oss-signal
|
|
15
15
|
with:
|
|
16
16
|
fail-under: "80"
|
|
17
17
|
output: oss-signal-report.md
|
|
18
|
+
summary: "true"
|
|
18
19
|
- uses: actions/upload-artifact@v4
|
|
19
20
|
with:
|
|
20
21
|
name: oss-signal-report
|
package/docs/outreach/README.md
CHANGED
|
@@ -13,8 +13,8 @@ Important notes:
|
|
|
13
13
|
|
|
14
14
|
## Audited Repositories
|
|
15
15
|
|
|
16
|
-
| Repository | Local score | Draft | Posted issue |
|
|
17
|
-
| --- | ---: | --- | --- |
|
|
18
|
-
| `platformatic/massimo` | 58/100 | [issue draft](platformatic-massimo-issue-draft.md) | [#159](https://github.com/platformatic/massimo/issues/159) |
|
|
19
|
-
| `supermarkt/checkjebon` | 21/100 | [issue draft](supermarkt-checkjebon-issue-draft.md) | [#22](https://github.com/supermarkt/checkjebon/issues/22) |
|
|
20
|
-
| `sammorrisdesign/interactive-feed` | 31/100 | [issue draft](sammorrisdesign-interactive-feed-issue-draft.md) | [#14](https://github.com/sammorrisdesign/interactive-feed/issues/14) |
|
|
16
|
+
| Repository | Local score | Draft | Posted issue | Follow-up PR |
|
|
17
|
+
| --- | ---: | --- | --- | --- |
|
|
18
|
+
| `platformatic/massimo` | 58/100 | [issue draft](platformatic-massimo-issue-draft.md) | [#159](https://github.com/platformatic/massimo/issues/159) | [#160](https://github.com/platformatic/massimo/pull/160) |
|
|
19
|
+
| `supermarkt/checkjebon` | 21/100 | [issue draft](supermarkt-checkjebon-issue-draft.md) | [#22](https://github.com/supermarkt/checkjebon/issues/22) | [#23](https://github.com/supermarkt/checkjebon/pull/23) |
|
|
20
|
+
| `sammorrisdesign/interactive-feed` | 31/100 | [issue draft](sammorrisdesign-interactive-feed-issue-draft.md) | [#14](https://github.com/sammorrisdesign/interactive-feed/issues/14) | [#15](https://github.com/sammorrisdesign/interactive-feed/pull/15) |
|
package/docs/self-audit.md
CHANGED
package/package.json
CHANGED
package/src/action.js
CHANGED
|
@@ -28,6 +28,10 @@ export async function runAction(env = process.env, stdout = process.stdout, stde
|
|
|
28
28
|
"report-path": options.output ?? ""
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
+
if (options.summary) {
|
|
32
|
+
await writeGitHubStepSummary(env.GITHUB_STEP_SUMMARY, report);
|
|
33
|
+
}
|
|
34
|
+
|
|
31
35
|
if (typeof options.failUnder === "number" && report.score < options.failUnder) {
|
|
32
36
|
stderr.write(`oss-signal: score ${report.score} is below fail-under ${options.failUnder}\n`);
|
|
33
37
|
process.exitCode = 1;
|
|
@@ -48,7 +52,8 @@ export function parseActionInputs(env = process.env) {
|
|
|
48
52
|
output: emptyToUndefined(getInput(env, "output")) ?? "oss-signal-report.md",
|
|
49
53
|
failUnder: parseOptionalNumber(getInput(env, "fail-under"), "fail-under"),
|
|
50
54
|
maxFiles: parseOptionalNumber(getInput(env, "max-files"), "max-files") ?? 20000,
|
|
51
|
-
ref: emptyToUndefined(getInput(env, "ref"))
|
|
55
|
+
ref: emptyToUndefined(getInput(env, "ref")),
|
|
56
|
+
summary: parseOptionalBoolean(getInput(env, "summary"), "summary") ?? true
|
|
52
57
|
};
|
|
53
58
|
}
|
|
54
59
|
|
|
@@ -63,6 +68,36 @@ export async function writeGitHubOutput(outputFile, values) {
|
|
|
63
68
|
await fs.appendFile(outputFile, `${body}\n`, "utf8");
|
|
64
69
|
}
|
|
65
70
|
|
|
71
|
+
export async function writeGitHubStepSummary(summaryFile, report) {
|
|
72
|
+
if (!summaryFile) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const failedChecks = report.checks.filter((check) => !check.passed);
|
|
77
|
+
const nextSteps = failedChecks.length > 0
|
|
78
|
+
? failedChecks.map((check) => `- **${check.label}:** ${check.fix}`).join("\n")
|
|
79
|
+
: "- No missing maintainer-readiness checks found.";
|
|
80
|
+
|
|
81
|
+
const body = [
|
|
82
|
+
"# oss-signal",
|
|
83
|
+
"",
|
|
84
|
+
`Score: **${report.score}/100 (${report.grade})**`,
|
|
85
|
+
"",
|
|
86
|
+
"| Result | Count |",
|
|
87
|
+
"| --- | ---: |",
|
|
88
|
+
`| Passed | ${report.summary.passed} |`,
|
|
89
|
+
`| Failed | ${report.summary.failed} |`,
|
|
90
|
+
`| Total checks | ${report.summary.total} |`,
|
|
91
|
+
"",
|
|
92
|
+
"## Recommended next steps",
|
|
93
|
+
"",
|
|
94
|
+
nextSteps,
|
|
95
|
+
""
|
|
96
|
+
].join("\n");
|
|
97
|
+
|
|
98
|
+
await fs.appendFile(summaryFile, body, "utf8");
|
|
99
|
+
}
|
|
100
|
+
|
|
66
101
|
function getInput(env, name) {
|
|
67
102
|
const directKey = `INPUT_${name.toUpperCase()}`;
|
|
68
103
|
const normalizedKey = `INPUT_${name.toUpperCase().replaceAll("-", "_")}`;
|
|
@@ -82,6 +117,22 @@ function parseOptionalNumber(value, name) {
|
|
|
82
117
|
return parsed;
|
|
83
118
|
}
|
|
84
119
|
|
|
120
|
+
function parseOptionalBoolean(value, name) {
|
|
121
|
+
const normalized = emptyToUndefined(value)?.toLowerCase();
|
|
122
|
+
if (normalized === undefined) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (["1", "true", "yes", "on"].includes(normalized)) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
if (["0", "false", "no", "off"].includes(normalized)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
throw new Error(`${name} must be a boolean`);
|
|
134
|
+
}
|
|
135
|
+
|
|
85
136
|
function emptyToUndefined(value) {
|
|
86
137
|
return value === undefined || value === "" ? undefined : value;
|
|
87
138
|
}
|