opsscript-gate 0.9.4__tar.gz → 0.9.6__tar.gz
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.
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflow-templates/opsscript-gate.yml +1 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflows/deploy-pages.yml +2 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/CHANGELOG.md +18 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/PKG-INFO +15 -11
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/README.md +13 -10
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/README.zh-CN.md +6 -4
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/action.yml +32 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/command-not-found.html +2 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6/docs}/index.html +49 -164
- opsscript_gate-0.9.6/docs/installer-smoke-test.html +73 -0
- opsscript_gate-0.9.6/docs/installer-smoke-test.md +55 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6/docs}/llms.txt +1 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/sitemap.xml +1 -0
- opsscript_gate-0.9.6/examples/github-actions/README.md +11 -0
- opsscript_gate-0.9.6/examples/github-actions/installer-smoke.yml +54 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/github-actions/workflow.yml +1 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/pyproject.toml +2 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/__init__.py +1 -1
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/cli.py +69 -4
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/config.py +39 -2
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/models.py +24 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/remediation.py +55 -24
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/reporter.py +20 -4
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/runner.py +217 -61
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/test_action_contract.py +5 -2
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/test_audit_coverage.py +352 -0
- opsscript_gate-0.9.6/tests/test_installer_example.py +76 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/test_onboarding.py +3 -1
- opsscript_gate-0.9.4/examples/github-actions/README.md +0 -5
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.gitattributes +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/ISSUE_TEMPLATE/distro_request.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/assets/social-preview.png +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/pull_request_template.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflow-templates/opsscript-gate.properties.json +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflows/demo.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflows/release.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.github/workflows/test.yml +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/.gitignore +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/CITATION.cff +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/CONTRIBUTING.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/LICENSE +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/ROADMAP.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/SECURITY.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/demo.html +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/command-not-found.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/configuration.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/gpt-oss.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/robots.txt +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/docs/troubleshooting.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/alpine-incompatibility/README.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/alpine-incompatibility/apt_dependency.sh +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/basic/README.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/basic/clean_setup.sh +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/interactive-hang/README.md +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/examples/interactive-hang/prompt_confirm.sh +0 -0
- {opsscript_gate-0.9.4/docs → opsscript_gate-0.9.6}/index.html +0 -0
- {opsscript_gate-0.9.4/docs → opsscript_gate-0.9.6}/llms.txt +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/src/opsscript_gate/discovery.py +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/conftest.py +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/fixtures/fail_deps.sh +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/fixtures/fail_hang.sh +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/fixtures/pass_basic.sh +0 -0
- {opsscript_gate-0.9.4 → opsscript_gate-0.9.6}/tests/test_runner.py +0 -0
|
@@ -25,6 +25,8 @@ jobs:
|
|
|
25
25
|
uses: actions/checkout@v4
|
|
26
26
|
- name: Setup Pages
|
|
27
27
|
uses: actions/configure-pages@v5
|
|
28
|
+
- name: Stage downloadable installer workflow
|
|
29
|
+
run: cp examples/github-actions/installer-smoke.yml docs/installer-smoke.yml
|
|
28
30
|
- name: Upload artifact
|
|
29
31
|
uses: actions/upload-pages-artifact@v3
|
|
30
32
|
with:
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.6] - 2026-11-08
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Added safe container environment variable injection via CLI `--env` and configuration `"env": {...}`, with strict POSIX variable name validation (`^[A-Za-z_][A-Za-z0-9_]*$`).
|
|
7
|
+
- Added host workspace context read-only mounting via CLI `--workdir` and configuration `"workdir": "..."`, automatically setting `/workspace` as the container working directory while strictly preserving host immutability (`mode: "ro"`).
|
|
8
|
+
- Added `env` and `workdir` inputs to the GitHub Composite Action with transparent argument forwarding.
|
|
9
|
+
- Expanded `COMMON_COMMAND_PACKAGES` to provide cross-distro package remediation for standard operations tools (`find`, `xargs`, `grep`, `sed`, `awk`, `diff`, `patch`, `ssh`, `rsync`, `htop`).
|
|
10
|
+
- Added Windows case-insensitive path collision protection in `_output_overwrites_protected` to prevent accidental overwrites of critical project files (e.g. `README.md`).
|
|
11
|
+
|
|
12
|
+
## [0.9.5] - 2026-11-08
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Extended structured failure diagnostics to handle exit code 126 (`permission_denied` and `exec_format_error`) and exit code 137 (`oom_killed`) with targeted remediation suggestions.
|
|
16
|
+
- Added native distribution family detection for Amazon Linux (`amazonlinux`, `amzn`) and Oracle Linux (`oracle`, `ol:`) to support RHEL-family package recommendations.
|
|
17
|
+
- Added GitHub Composite Action `outputs` for `all-passed` and `report-file`, exporting execution status via `$GITHUB_OUTPUT`.
|
|
18
|
+
- Surfaced package installation recommendations and package names directly in Markdown compatibility tables, failure diagnostic log drawers, and terminal detail outputs.
|
|
19
|
+
- Added convenient counting properties (`passed_count`, `failed_count`, `total_count`) on `RunReport` and `MultiScriptReport`.
|
|
20
|
+
|
|
3
21
|
## [0.9.4] - 2026-10-11
|
|
4
22
|
|
|
5
23
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: opsscript-gate
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.6
|
|
4
4
|
Summary: Cross-distro shell script compatibility and portability checker for Debian, Ubuntu, and Alpine. Runs real containers to diagnose command not found.
|
|
5
5
|
Project-URL: Homepage, https://mresyzz.github.io/opsscript-gate/
|
|
6
6
|
Project-URL: Demo, https://mresyzz.github.io/opsscript-gate/
|
|
@@ -28,6 +28,7 @@ Requires-Dist: docker>=7.0.0
|
|
|
28
28
|
Provides-Extra: test
|
|
29
29
|
Requires-Dist: markdown-it-py>=3.0.0; extra == 'test'
|
|
30
30
|
Requires-Dist: pytest>=8.0.0; extra == 'test'
|
|
31
|
+
Requires-Dist: pyyaml>=6.0.0; extra == 'test'
|
|
31
32
|
Description-Content-Type: text/markdown
|
|
32
33
|
|
|
33
34
|
# OpsScript Gate — cross-distro shell script runtime compatibility checker
|
|
@@ -80,7 +81,7 @@ apt-get --version
|
|
|
80
81
|
Run it locally with `opsscript-gate run ./install.sh`, or add the following step to CI:
|
|
81
82
|
|
|
82
83
|
```yaml
|
|
83
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
84
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
84
85
|
with:
|
|
85
86
|
script-path: install.sh
|
|
86
87
|
```
|
|
@@ -89,12 +90,9 @@ The result identifies the failing distribution, exit code, line, missing command
|
|
|
89
90
|
|
|
90
91
|
---
|
|
91
92
|
|
|
92
|
-
## Current
|
|
93
|
+
## Current release: v0.9.6
|
|
93
94
|
|
|
94
|
-
The current release includes
|
|
95
|
-
saved reports, changed-script selection for pull requests, and repeat runs for detecting
|
|
96
|
-
flaky runtime behavior. The project controls
|
|
97
|
-
were introduced in v0.5.0; projects on v0.4.1 and earlier do not include them.
|
|
95
|
+
The current release includes safe environment variable passing (`--env`), host workspace context read-only mounting (`--workdir`), expanded package recommendations for standard Linux tools, structured diagnostic properties in SARIF, and composite action outputs.
|
|
98
96
|
|
|
99
97
|
```bash
|
|
100
98
|
opsscript-gate init
|
|
@@ -103,6 +101,8 @@ opsscript-gate run --dry-run
|
|
|
103
101
|
opsscript-gate run --format json --output reports/compatibility.json
|
|
104
102
|
# Repeat each distro three times when diagnosing intermittent failures
|
|
105
103
|
opsscript-gate run ./install.sh --repeat 3
|
|
104
|
+
# Pass environment variables and mount repository workspace read-only
|
|
105
|
+
opsscript-gate run ./install.sh --env APP_ENV=staging --workdir .
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
`init` creates `.opsscript-gate.json` and a GitHub Actions workflow without replacing
|
|
@@ -119,6 +119,10 @@ image's native package manager before testing. Package setup is opt-in and
|
|
|
119
119
|
requires bridge networking. See [configuration and migration](docs/configuration.md) and
|
|
120
120
|
[why a shell script works on Ubuntu but fails on Alpine](docs/troubleshooting.md).
|
|
121
121
|
|
|
122
|
+
Testing an installer? Use the [installation smoke test workflow](docs/installer-smoke-test.md)
|
|
123
|
+
to check the installed binary inside each container. A script's zero exit status
|
|
124
|
+
alone does not prove it installed successfully.
|
|
125
|
+
|
|
122
126
|
## Quickstart
|
|
123
127
|
|
|
124
128
|
### In GitHub Actions
|
|
@@ -143,7 +147,7 @@ jobs:
|
|
|
143
147
|
- uses: actions/checkout@v7
|
|
144
148
|
with:
|
|
145
149
|
persist-credentials: false
|
|
146
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
150
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
147
151
|
```
|
|
148
152
|
|
|
149
153
|
This zero-configuration form discovers shell scripts in the repository. Use
|
|
@@ -154,7 +158,7 @@ repository has a single installer. For self-hosted model installers, see the
|
|
|
154
158
|
Or test a specific script with custom execution modes:
|
|
155
159
|
|
|
156
160
|
```yaml
|
|
157
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
161
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
158
162
|
with:
|
|
159
163
|
script-path: scripts/install.sh
|
|
160
164
|
shell: auto
|
|
@@ -188,7 +192,7 @@ unrelated scripts:
|
|
|
188
192
|
with:
|
|
189
193
|
persist-credentials: false
|
|
190
194
|
fetch-depth: 0
|
|
191
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
195
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
192
196
|
with:
|
|
193
197
|
changed-since: ${{ github.event.pull_request.base.sha }}
|
|
194
198
|
preset: minimal
|
|
@@ -279,7 +283,7 @@ Use `sarif` when the result should appear in GitHub Code Scanning or another
|
|
|
279
283
|
SARIF-compatible viewer. Upload it explicitly with the official upload action:
|
|
280
284
|
|
|
281
285
|
```yaml
|
|
282
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
286
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
283
287
|
with:
|
|
284
288
|
script-path: scripts/install.sh
|
|
285
289
|
format: sarif
|
|
@@ -48,7 +48,7 @@ apt-get --version
|
|
|
48
48
|
Run it locally with `opsscript-gate run ./install.sh`, or add the following step to CI:
|
|
49
49
|
|
|
50
50
|
```yaml
|
|
51
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
51
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
52
52
|
with:
|
|
53
53
|
script-path: install.sh
|
|
54
54
|
```
|
|
@@ -57,12 +57,9 @@ The result identifies the failing distribution, exit code, line, missing command
|
|
|
57
57
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
|
-
## Current
|
|
60
|
+
## Current release: v0.9.6
|
|
61
61
|
|
|
62
|
-
The current release includes
|
|
63
|
-
saved reports, changed-script selection for pull requests, and repeat runs for detecting
|
|
64
|
-
flaky runtime behavior. The project controls
|
|
65
|
-
were introduced in v0.5.0; projects on v0.4.1 and earlier do not include them.
|
|
62
|
+
The current release includes safe environment variable passing (`--env`), host workspace context read-only mounting (`--workdir`), expanded package recommendations for standard Linux tools, structured diagnostic properties in SARIF, and composite action outputs.
|
|
66
63
|
|
|
67
64
|
```bash
|
|
68
65
|
opsscript-gate init
|
|
@@ -71,6 +68,8 @@ opsscript-gate run --dry-run
|
|
|
71
68
|
opsscript-gate run --format json --output reports/compatibility.json
|
|
72
69
|
# Repeat each distro three times when diagnosing intermittent failures
|
|
73
70
|
opsscript-gate run ./install.sh --repeat 3
|
|
71
|
+
# Pass environment variables and mount repository workspace read-only
|
|
72
|
+
opsscript-gate run ./install.sh --env APP_ENV=staging --workdir .
|
|
74
73
|
```
|
|
75
74
|
|
|
76
75
|
`init` creates `.opsscript-gate.json` and a GitHub Actions workflow without replacing
|
|
@@ -87,6 +86,10 @@ image's native package manager before testing. Package setup is opt-in and
|
|
|
87
86
|
requires bridge networking. See [configuration and migration](docs/configuration.md) and
|
|
88
87
|
[why a shell script works on Ubuntu but fails on Alpine](docs/troubleshooting.md).
|
|
89
88
|
|
|
89
|
+
Testing an installer? Use the [installation smoke test workflow](docs/installer-smoke-test.md)
|
|
90
|
+
to check the installed binary inside each container. A script's zero exit status
|
|
91
|
+
alone does not prove it installed successfully.
|
|
92
|
+
|
|
90
93
|
## Quickstart
|
|
91
94
|
|
|
92
95
|
### In GitHub Actions
|
|
@@ -111,7 +114,7 @@ jobs:
|
|
|
111
114
|
- uses: actions/checkout@v7
|
|
112
115
|
with:
|
|
113
116
|
persist-credentials: false
|
|
114
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
117
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
115
118
|
```
|
|
116
119
|
|
|
117
120
|
This zero-configuration form discovers shell scripts in the repository. Use
|
|
@@ -122,7 +125,7 @@ repository has a single installer. For self-hosted model installers, see the
|
|
|
122
125
|
Or test a specific script with custom execution modes:
|
|
123
126
|
|
|
124
127
|
```yaml
|
|
125
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
128
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
126
129
|
with:
|
|
127
130
|
script-path: scripts/install.sh
|
|
128
131
|
shell: auto
|
|
@@ -156,7 +159,7 @@ unrelated scripts:
|
|
|
156
159
|
with:
|
|
157
160
|
persist-credentials: false
|
|
158
161
|
fetch-depth: 0
|
|
159
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
162
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
160
163
|
with:
|
|
161
164
|
changed-since: ${{ github.event.pull_request.base.sha }}
|
|
162
165
|
preset: minimal
|
|
@@ -247,7 +250,7 @@ Use `sarif` when the result should appear in GitHub Code Scanning or another
|
|
|
247
250
|
SARIF-compatible viewer. Upload it explicitly with the official upload action:
|
|
248
251
|
|
|
249
252
|
```yaml
|
|
250
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
253
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
251
254
|
with:
|
|
252
255
|
script-path: scripts/install.sh
|
|
253
256
|
format: sarif
|
|
@@ -17,9 +17,9 @@ Bash 依赖、包管理器假设和交互式阻塞。它与 ShellCheck 互补。
|
|
|
17
17
|
|
|
18
18
|
也可以直接打开 [OpsScript Gate 在线演示](https://mresyzz.github.io/opsscript-gate/),先查看 ShellCheck 与运行时验证的差异,再复制 workflow 到自己的仓库。
|
|
19
19
|
|
|
20
|
-
## 当前版本 v0.9.
|
|
20
|
+
## 当前版本 v0.9.6
|
|
21
21
|
|
|
22
|
-
v0.9.
|
|
22
|
+
v0.9.6 是当前已发布版本;如果你要从源码验证当前分支,也可以执行:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
pip install -e .
|
|
@@ -33,9 +33,11 @@ opsscript-gate init
|
|
|
33
33
|
opsscript-gate doctor
|
|
34
34
|
opsscript-gate run --dry-run
|
|
35
35
|
opsscript-gate run --format json --output reports/compatibility.json
|
|
36
|
+
# 传递环境变量并以只读方式挂载本地工作空间
|
|
37
|
+
opsscript-gate run ./install.sh --env APP_ENV=staging --workdir .
|
|
36
38
|
```
|
|
37
39
|
|
|
38
|
-
`init` 生成配置和 GitHub 工作流,不覆盖已有文件。工作流引用 `v0.9.
|
|
40
|
+
`init` 生成配置和 GitHub 工作流,不覆盖已有文件。工作流引用 `v0.9.6`。
|
|
39
41
|
预览不需要 Docker;真实运行需要 Python 3.10+
|
|
40
42
|
和可访问的 Linux Docker 引擎。
|
|
41
43
|
`opsscript-gate doctor` 可以在真实运行前检查 Python 和 Docker。
|
|
@@ -74,7 +76,7 @@ Docker daemon 和可选的项目配置。
|
|
|
74
76
|
- uses: actions/checkout@v7
|
|
75
77
|
with:
|
|
76
78
|
fetch-depth: 0
|
|
77
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
79
|
+
- uses: Mresyzz/opsscript-gate@v0.9.6
|
|
78
80
|
with:
|
|
79
81
|
changed-since: ${{ github.event.pull_request.base.sha }}
|
|
80
82
|
preset: minimal
|
|
@@ -50,6 +50,14 @@ inputs:
|
|
|
50
50
|
description: 'Optional comma- or newline-separated packages to install before running (requires network=bridge)'
|
|
51
51
|
required: false
|
|
52
52
|
default: ''
|
|
53
|
+
env:
|
|
54
|
+
description: 'Newline-separated list of environment variables to pass into containers (e.g. KEY=VALUE or KEY)'
|
|
55
|
+
required: false
|
|
56
|
+
default: ''
|
|
57
|
+
workdir:
|
|
58
|
+
description: 'Host directory to mount read-only into /workspace as the container working directory'
|
|
59
|
+
required: false
|
|
60
|
+
default: ''
|
|
53
61
|
|
|
54
62
|
config:
|
|
55
63
|
description: 'Path to project JSON configuration'
|
|
@@ -80,6 +88,14 @@ inputs:
|
|
|
80
88
|
required: false
|
|
81
89
|
default: ''
|
|
82
90
|
|
|
91
|
+
outputs:
|
|
92
|
+
all-passed:
|
|
93
|
+
description: 'Whether all script compatibility checks passed (true or false)'
|
|
94
|
+
value: ${{ steps.gate.outputs.all-passed }}
|
|
95
|
+
report-file:
|
|
96
|
+
description: 'Path to saved report file if output input was set'
|
|
97
|
+
value: ${{ inputs.output }}
|
|
98
|
+
|
|
83
99
|
runs:
|
|
84
100
|
using: 'composite'
|
|
85
101
|
steps:
|
|
@@ -94,6 +110,7 @@ runs:
|
|
|
94
110
|
pip install "${{ github.action_path }}"
|
|
95
111
|
|
|
96
112
|
- name: Run compatibility gate
|
|
113
|
+
id: gate
|
|
97
114
|
shell: bash
|
|
98
115
|
env:
|
|
99
116
|
INPUT_SCRIPT_PATH: ${{ inputs.script-path }}
|
|
@@ -107,6 +124,8 @@ runs:
|
|
|
107
124
|
INPUT_PIDS_LIMIT: ${{ inputs.pids-limit }}
|
|
108
125
|
INPUT_NETWORK: ${{ inputs.network }}
|
|
109
126
|
INPUT_PACKAGES: ${{ inputs.packages }}
|
|
127
|
+
INPUT_ENV: ${{ inputs.env }}
|
|
128
|
+
INPUT_WORKDIR: ${{ inputs.workdir }}
|
|
110
129
|
INPUT_CONFIG: ${{ inputs.config }}
|
|
111
130
|
INPUT_PRESET: ${{ inputs.preset }}
|
|
112
131
|
INPUT_EXCLUDE: ${{ inputs.exclude }}
|
|
@@ -128,6 +147,7 @@ runs:
|
|
|
128
147
|
[ -z "$INPUT_PIDS_LIMIT" ] || ARGS+=(--pids-limit "$INPUT_PIDS_LIMIT")
|
|
129
148
|
[ -z "$INPUT_NETWORK" ] || ARGS+=(--network "$INPUT_NETWORK")
|
|
130
149
|
[ -z "$INPUT_PACKAGES" ] || ARGS+=(--packages "$INPUT_PACKAGES")
|
|
150
|
+
[ -z "$INPUT_WORKDIR" ] || ARGS+=(--workdir "$INPUT_WORKDIR")
|
|
131
151
|
[ -z "$INPUT_MATRIX" ] || ARGS+=(--matrix "$INPUT_MATRIX")
|
|
132
152
|
[ -z "$INPUT_JOBS" ] || ARGS+=(--jobs "$INPUT_JOBS")
|
|
133
153
|
[ -z "$INPUT_CONFIG" ] || ARGS+=(--config "$INPUT_CONFIG")
|
|
@@ -135,6 +155,10 @@ runs:
|
|
|
135
155
|
[ -z "$INPUT_MAX_SCRIPTS" ] || ARGS+=(--max-scripts "$INPUT_MAX_SCRIPTS")
|
|
136
156
|
[ -z "$INPUT_OUTPUT" ] || ARGS+=(--output "$INPUT_OUTPUT")
|
|
137
157
|
[ -z "$INPUT_CHANGED_SINCE" ] || ARGS+=(--changed-since "$INPUT_CHANGED_SINCE")
|
|
158
|
+
while IFS= read -r env_var; do
|
|
159
|
+
env_var="${env_var%$'\r'}"
|
|
160
|
+
[ -z "$env_var" ] || ARGS+=("--env" "$env_var")
|
|
161
|
+
done <<< "$INPUT_ENV"
|
|
138
162
|
while IFS= read -r pattern; do
|
|
139
163
|
pattern="${pattern%$'\r'}"
|
|
140
164
|
[ -z "$pattern" ] || ARGS+=("--exclude" "$pattern")
|
|
@@ -146,4 +170,11 @@ runs:
|
|
|
146
170
|
echo "dry-run must be true or false" >&2
|
|
147
171
|
exit 1
|
|
148
172
|
fi
|
|
149
|
-
|
|
173
|
+
GATE_STATUS=0
|
|
174
|
+
python -m opsscript_gate.cli "${ARGS[@]}" || GATE_STATUS=$?
|
|
175
|
+
if [ "$GATE_STATUS" -eq 0 ]; then
|
|
176
|
+
echo "all-passed=true" >> "$GITHUB_OUTPUT"
|
|
177
|
+
else
|
|
178
|
+
echo "all-passed=false" >> "$GITHUB_OUTPUT"
|
|
179
|
+
fi
|
|
180
|
+
exit "$GATE_STATUS"
|
|
@@ -134,7 +134,7 @@ jobs:
|
|
|
134
134
|
- uses: actions/checkout@v7
|
|
135
135
|
with:
|
|
136
136
|
persist-credentials: false
|
|
137
|
-
- uses: Mresyzz/opsscript-gate@v0.9.
|
|
137
|
+
- uses: Mresyzz/opsscript-gate@v0.9.4
|
|
138
138
|
with:
|
|
139
139
|
script-path: install.sh
|
|
140
140
|
shell: auto
|
|
@@ -186,6 +186,7 @@ opsscript-gate run ./install.sh</code></pre>
|
|
|
186
186
|
<a href="https://github.com/Mresyzz/opsscript-gate/blob/main/docs/troubleshooting.md">troubleshooting</a>,
|
|
187
187
|
or <a href="https://github.com/Mresyzz/opsscript-gate/blob/main/SECURITY.md">security boundaries</a>.
|
|
188
188
|
<a href="./">Open the interactive demo</a>.</footer>
|
|
189
|
+
<p>Installer returns zero but the program is missing? <a href="installer-smoke-test.html">Verify the installed binary in the same container.</a></p>
|
|
189
190
|
</main>
|
|
190
191
|
</body>
|
|
191
192
|
</html>
|