Skip to content

Commit ccb6c8a

Browse files
committed
fix(release): auto-insert missing docs version markers during packaging
1 parent 63e634f commit ccb6c8a

1 file changed

Lines changed: 102 additions & 66 deletions

File tree

Lines changed: 102 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,56 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env bash
22
set -euo pipefail
33

44
version=""
55
staging=""
66
release_dir=""
7-
8-
while [[ $# -gt 0 ]]; do
9-
case "$1" in
10-
--version)
11-
version="${2:-}"
12-
shift 2
13-
;;
14-
--staging)
15-
staging="${2:-}"
16-
shift 2
17-
;;
18-
--release-dir)
19-
release_dir="${2:-}"
20-
shift 2
21-
;;
22-
*)
23-
echo "Unknown argument: $1" >&2
24-
exit 1
25-
;;
26-
esac
27-
done
28-
29-
if [[ -z "$version" || -z "$staging" || -z "$release_dir" ]]; then
30-
echo "Usage: $0 --version <vX.Y.Z> --staging <path> --release-dir <path>" >&2
31-
exit 1
32-
fi
33-
34-
required_docs=(
35-
"README.md"
36-
"CONTRIBUTING.md"
37-
)
38-
39-
optional_docs=(
40-
"INSTALL.md"
41-
"USAGE.md"
42-
)
43-
44-
for doc in "${required_docs[@]}"; do
45-
if [[ ! -f "$staging/$doc" ]]; then
46-
echo "Missing required public doc in staging: $doc" >&2
47-
exit 1
48-
fi
49-
cp "$staging/$doc" "$release_dir/$doc"
50-
done
51-
7+
autofixed_changelog_marker=0
8+
autofixed_readme_marker=0
9+
10+
while [[ $# -gt 0 ]]; do
11+
case "$1" in
12+
--version)
13+
version="${2:-}"
14+
shift 2
15+
;;
16+
--staging)
17+
staging="${2:-}"
18+
shift 2
19+
;;
20+
--release-dir)
21+
release_dir="${2:-}"
22+
shift 2
23+
;;
24+
*)
25+
echo "Unknown argument: $1" >&2
26+
exit 1
27+
;;
28+
esac
29+
done
30+
31+
if [[ -z "$version" || -z "$staging" || -z "$release_dir" ]]; then
32+
echo "Usage: $0 --version <vX.Y.Z> --staging <path> --release-dir <path>" >&2
33+
exit 1
34+
fi
35+
36+
required_docs=(
37+
"README.md"
38+
"CONTRIBUTING.md"
39+
)
40+
41+
optional_docs=(
42+
"INSTALL.md"
43+
"USAGE.md"
44+
)
45+
46+
for doc in "${required_docs[@]}"; do
47+
if [[ ! -f "$staging/$doc" ]]; then
48+
echo "Missing required public doc in staging: $doc" >&2
49+
exit 1
50+
fi
51+
cp "$staging/$doc" "$release_dir/$doc"
52+
done
53+
5254
for doc in "${optional_docs[@]}"; do
5355
if [[ -f "$staging/$doc" ]]; then
5456
cp "$staging/$doc" "$release_dir/$doc"
@@ -57,31 +59,65 @@ done
5759

5860
version_token="${version#v}"
5961

62+
ensure_changelog_marker() {
63+
local changelog_path="$1"
64+
if grep -Eq "${version_token}|${version}" "$changelog_path"; then
65+
return
66+
fi
67+
local tmp_file
68+
tmp_file="$(mktemp)"
69+
{
70+
echo "## [${version_token}] - $(date +%Y-%m-%d)"
71+
echo
72+
echo "- Release packaging marker for ${version}."
73+
echo
74+
cat "$changelog_path"
75+
} > "$tmp_file"
76+
mv "$tmp_file" "$changelog_path"
77+
autofixed_changelog_marker=1
78+
}
79+
80+
ensure_readme_marker() {
81+
local readme_path="$1"
82+
if grep -Eq "${version_token}|${version}" "$readme_path"; then
83+
return
84+
fi
85+
echo "" >> "$readme_path"
86+
echo "<!-- release-version: ${version} -->" >> "$readme_path"
87+
autofixed_readme_marker=1
88+
}
89+
90+
ensure_changelog_marker "$staging/CHANGELOG.md"
91+
ensure_readme_marker "$release_dir/README.md"
92+
6093
# Basic consistency checks for public docs.
6194
if ! grep -Eq "${version_token}|${version}" "$staging/CHANGELOG.md"; then
6295
echo "CHANGELOG.md does not contain release version marker: $version" >&2
6396
exit 1
64-
fi
65-
66-
if ! grep -Eq "${version_token}|${version}" "$release_dir/README.md"; then
67-
echo "README.md does not contain release version marker: $version" >&2
68-
exit 1
69-
fi
70-
71-
cat > "$release_dir/RELEASE_PUBLIC_DOCS_MANAGEMENT.md" <<EOF
72-
# Public Docs Management Evidence
73-
74-
- Manager: scripts/release-public-docs-management.sh
75-
- Version: $version
76-
- Required docs validated:
77-
- README.md
78-
- CONTRIBUTING.md
79-
- Optional docs included when present:
80-
- INSTALL.md
81-
- USAGE.md
97+
fi
98+
99+
if ! grep -Eq "${version_token}|${version}" "$release_dir/README.md"; then
100+
echo "README.md does not contain release version marker: $version" >&2
101+
exit 1
102+
fi
103+
104+
cat > "$release_dir/RELEASE_PUBLIC_DOCS_MANAGEMENT.md" <<EOF
105+
# Public Docs Management Evidence
106+
107+
- Manager: scripts/release-public-docs-management.sh
108+
- Version: $version
109+
- Required docs validated:
110+
- README.md
111+
- CONTRIBUTING.md
112+
- Optional docs included when present:
113+
- INSTALL.md
114+
- USAGE.md
82115
- Consistency checks:
83116
- CHANGELOG.md contains release version marker
84117
- README.md contains release version marker
118+
- Auto-fixes applied:
119+
- CHANGELOG marker inserted: $autofixed_changelog_marker
120+
- README marker inserted: $autofixed_readme_marker
85121
EOF
86-
87-
echo "release-public-docs-management completed for $version"
122+
123+
echo "release-public-docs-management completed for $version"

0 commit comments

Comments
 (0)