mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
ci: add lint check to prevent single quotes in bootstrap scripts (#22664)
## Problem
Bootstrap scripts under `provisionersdk/scripts/` are inlined into
templates via `sh -c '${init_script}'`. Any single quote (apostrophe) in
these `.sh` files silently breaks the shell quoting, causing the agent
to never start — with near-invisible error output.
## Changes
- **`scripts/check_bootstrap_quotes.sh`** — new lint script that scans
all `.sh` files under `provisionersdk/scripts/` for single quotes and
fails with a clear error if any are found. Only checks shell scripts
(not `.ps1`, which legitimately uses single quotes).
- **`Makefile`** — added `lint/bootstrap` target wired into the `lint`
dependency list.
Fixes #22062
This commit is contained in:
@@ -606,7 +606,7 @@ endif
|
|||||||
# GitHub Actions linters are run in a separate CI job (lint-actions) that only
|
# GitHub Actions linters are run in a separate CI job (lint-actions) that only
|
||||||
# triggers when workflow files change, so we skip them here when CI=true.
|
# triggers when workflow files change, so we skip them here when CI=true.
|
||||||
LINT_ACTIONS_TARGETS := $(if $(CI),,lint/actions/actionlint)
|
LINT_ACTIONS_TARGETS := $(if $(CI),,lint/actions/actionlint)
|
||||||
lint: lint/shellcheck lint/go lint/ts lint/examples lint/helm lint/site-icons lint/markdown lint/check-scopes lint/migrations $(LINT_ACTIONS_TARGETS)
|
lint: lint/shellcheck lint/go lint/ts lint/examples lint/helm lint/site-icons lint/markdown lint/check-scopes lint/migrations lint/bootstrap $(LINT_ACTIONS_TARGETS)
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
|
|
||||||
lint/site-icons:
|
lint/site-icons:
|
||||||
@@ -636,6 +636,11 @@ lint/shellcheck: $(SHELL_SRC_FILES)
|
|||||||
shellcheck --external-sources $(SHELL_SRC_FILES)
|
shellcheck --external-sources $(SHELL_SRC_FILES)
|
||||||
.PHONY: lint/shellcheck
|
.PHONY: lint/shellcheck
|
||||||
|
|
||||||
|
lint/bootstrap:
|
||||||
|
bash scripts/check_bootstrap_quotes.sh
|
||||||
|
.PHONY: lint/bootstrap
|
||||||
|
|
||||||
|
|
||||||
lint/helm:
|
lint/helm:
|
||||||
cd helm/
|
cd helm/
|
||||||
make lint
|
make lint
|
||||||
|
|||||||
Executable
+24
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
# shellcheck source=scripts/lib.sh
|
||||||
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
||||||
|
cdroot
|
||||||
|
|
||||||
|
echo "--- check bootstrap scripts for single quotes"
|
||||||
|
|
||||||
|
files=$(find provisionersdk/scripts -type f -name '*.sh')
|
||||||
|
found=0
|
||||||
|
for f in $files; do
|
||||||
|
if grep -n "'" "$f"; then
|
||||||
|
echo "ERROR: $f contains single quotes (apostrophes)."
|
||||||
|
echo " Bootstrap scripts are inlined via sh -c '...' in templates."
|
||||||
|
echo " Single quotes break this quoting. Use alternative phrasing."
|
||||||
|
found=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$found" -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "OK: no single quotes found in bootstrap scripts."
|
||||||
Reference in New Issue
Block a user