Skip to content

Commit 2a55d08

Browse files
authored
SDK-374 Automate Docs validation on SDKs releases (#1015)
1 parent 77d143d commit 2a55d08

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Validate Release PR
2+
3+
on:
4+
pull_request:
5+
types: [labeled, opened, synchronize, edited]
6+
7+
permissions:
8+
contents: read
9+
pull-requests: read
10+
11+
jobs:
12+
validate:
13+
if: >-
14+
(github.event.action == 'labeled' && github.event.label.name == 'release') ||
15+
(github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'release'))
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: actions/checkout@v4
19+
20+
- name: Validate Release PR
21+
env:
22+
PR_BODY: ${{ github.event.pull_request.body }}
23+
run: |
24+
errors=()
25+
26+
# --- Extract version from source of truth ---
27+
version=$(grep -oP 's\.version\s*=\s*"\K[^"]+' Iterable-iOS-SDK.podspec)
28+
if [ -z "$version" ]; then
29+
echo "::error::Could not extract version from Iterable-iOS-SDK.podspec"
30+
exit 1
31+
fi
32+
echo "Detected version: $version"
33+
34+
# --- Check: Docs PR linked ---
35+
if ! echo "$PR_BODY" | grep -qiP "github\.com/Iterable/iterable-docs/pull/\d+"; then
36+
errors+=("No docs PR link found in the PR description. Add a link to the iterable-docs PR (e.g. https://github.com/Iterable/iterable-docs/pull/123).")
37+
fi
38+
39+
# --- Check: CHANGELOG entry ---
40+
if ! grep -qF "## [$version]" CHANGELOG.md; then
41+
errors+=("CHANGELOG.md is missing an entry for version [$version].")
42+
fi
43+
44+
# --- Check: Version consistency ---
45+
podspec_sdk=$(grep -oP "s\.version\s*=\s*\"\K[^\"]+" Iterable-iOS-SDK.podspec)
46+
podspec_ext=$(grep -oP "s\.version\s*=\s*\"\K[^\"]+" Iterable-iOS-AppExtensions.podspec)
47+
swift_ver=$(grep -oP 'static let sdkVersion\s*=\s*"\K[^"]+' swift-sdk/SDK/IterableAPI.swift)
48+
49+
if [ "$podspec_sdk" != "$version" ]; then
50+
errors+=("Iterable-iOS-SDK.podspec s.version is '$podspec_sdk', expected '$version'.")
51+
fi
52+
if [ "$podspec_ext" != "$version" ]; then
53+
errors+=("Iterable-iOS-AppExtensions.podspec s.version is '$podspec_ext', expected '$version'.")
54+
fi
55+
if [ "$swift_ver" != "$version" ]; then
56+
errors+=("IterableAPI.swift sdkVersion is '$swift_ver', expected '$version'.")
57+
fi
58+
59+
# --- Report ---
60+
if [ ${#errors[@]} -gt 0 ]; then
61+
echo "::error::Release validation failed with ${#errors[@]} issue(s):"
62+
for err in "${errors[@]}"; do
63+
echo "::error:: - $err"
64+
done
65+
exit 1
66+
fi
67+
68+
echo "All release validations passed for version $version."

0 commit comments

Comments
 (0)