11#! /bin/bash
22
3- # Script to check API diffs using openapi-diff
4- # Usage: ./scripts/api-diff/api-diff.sh [--fail-on-breaking] [filename.yaml]
3+ # Script to check API diffs using openapi-changes
4+ # Usage: ./scripts/api-diff/api-diff.sh [--fail-on-breaking] [--html-report] [ filename.yaml]
55# Assumes you have Docker installed and the repo is checked out with master branch available
66
77set -e # Exit on error
@@ -11,19 +11,22 @@ set -o pipefail # Catch errors in pipes
1111cd " $( dirname " $0 " ) /../.."
1212
1313# Configuration
14- DOCKER_IMAGE=" ${OPENAPI_DIFF_DOCKER_IMAGE :- openapitools / openapi-diff : latest} "
14+ DOCKER_IMAGE=" ${OPENAPI_CHANGES_DOCKER_IMAGE :- pb33f / openapi-changes : latest} "
1515BASE_BRANCH=" ${BASE_BRANCH:- origin/ master} "
1616
1717FAIL_ON_BREAKING=false
1818TARGET_FILE=" "
1919DRY_RUN=false
20+ HTML_REPORT=false
2021
2122# Parse arguments
2223for arg in " $@ " ; do
2324 if [ " $arg " = " --fail-on-breaking" ]; then
2425 FAIL_ON_BREAKING=true
2526 elif [ " $arg " = " --dry-run" ]; then
2627 DRY_RUN=true
28+ elif [ " $arg " = " --html-report" ]; then
29+ HTML_REPORT=true
2730 elif [[ " $arg " == * .yaml ]]; then
2831 TARGET_FILE=" $arg "
2932 fi
@@ -112,21 +115,30 @@ for file in $files; do
112115 continue
113116 fi
114117
115- # Run openapi-diff to check for changes and breaking changes
116- echo " --- API Diff ---"
117- set +e
118- DIFF_OUTPUT=$( docker run --rm -v " $( pwd) " :/current -v " $TEMP_DIR " :/base " $DOCKER_IMAGE " /base/" $file " /current/" $file " --fail-on-incompatible 2>&1 )
119- DIFF_EXIT=$?
120- set -e
121-
122- echo " $DIFF_OUTPUT "
123-
124- if [ $DIFF_EXIT -eq 0 ]; then
125- echo " ✓ No breaking changes detected"
118+ # Run openapi-changes
119+ if [ " $HTML_REPORT " = true ]; then
120+ echo " --- Generating HTML Report ---"
121+ # Create reports directory if it doesn't exist
122+ mkdir -p reports
123+ REPORT_FILE=" reports/${file% .yaml} -diff.html"
124+ docker run --rm -v " $( pwd) " :/current -v " $TEMP_DIR " :/base " $DOCKER_IMAGE " html-report /base/" $file " /current/" $file " > " $REPORT_FILE "
125+ echo " ✓ HTML report generated: $REPORT_FILE "
126126 else
127- echo " ⚠ Breaking changes detected (exit code: $DIFF_EXIT )"
128- BREAKING_CHANGES_FOUND=true
129- FILES_WITH_BREAKING_CHANGES+=(" $file " )
127+ echo " --- API Diff ---"
128+ set +e
129+ DIFF_OUTPUT=$( docker run --rm -v " $( pwd) " :/current -v " $TEMP_DIR " :/base " $DOCKER_IMAGE " summary --no-logo --no-color /base/" $file " /current/" $file " 2>&1 )
130+ DIFF_EXIT=$?
131+ set -e
132+
133+ echo " $DIFF_OUTPUT "
134+
135+ if [ $DIFF_EXIT -eq 0 ]; then
136+ echo " ✓ No breaking changes detected"
137+ else
138+ echo " ⚠ Breaking changes detected (exit code: $DIFF_EXIT )"
139+ BREAKING_CHANGES_FOUND=true
140+ FILES_WITH_BREAKING_CHANGES+=(" $file " )
141+ fi
130142 fi
131143
132144 PROCESSED_FILES=$(( PROCESSED_FILES + 1 ))
@@ -139,7 +151,15 @@ echo "Processed: $PROCESSED_FILES/$TOTAL_FILES files"
139151echo " ========================================"
140152
141153# Summary
142- if [ " $BREAKING_CHANGES_FOUND " = true ]; then
154+ if [ " $HTML_REPORT " = true ]; then
155+ echo " "
156+ echo " 📊 HTML reports generated:"
157+ if [ -d " reports" ]; then
158+ ls -la reports/
159+ else
160+ echo " No reports directory found"
161+ fi
162+ elif [ " $BREAKING_CHANGES_FOUND " = true ]; then
143163 echo " "
144164 echo " ❌ Breaking changes detected in the following files:"
145165 for file in " ${FILES_WITH_BREAKING_CHANGES[@]} " ; do
0 commit comments