66 - main
77 - develop
88 types : [opened, synchronize, reopened, edited]
9+ workflow_dispatch :
10+ inputs :
11+ version :
12+ description : ' Specific PostgreSQL version to test (e.g., 16.9, 17.5) - leave empty to test latest 5'
13+ required : false
14+ type : string
915
1016jobs :
1117 detect-versions :
4248
4349 - name : Get PostgreSQL Versions
4450 id : get-versions
51+ env :
52+ GH_TOKEN : ${{ github.token }}
4553 run : |
4654 if [ "${{ github.event.inputs.version }}" != "" ]; then
4755 # Manual workflow with specific version
@@ -50,41 +58,55 @@ jobs:
5058 VERSIONS="[\"$VERSION\"]"
5159 elif [ "${{ github.event_name }}" == "pull_request" ]; then
5260 # For PRs, detect which versions were added or modified
53- echo "Detecting versions changed in this PR..."
54- echo "Base ref: ${{ github.base_ref }}"
55- echo "Head ref: ${{ github.head_ref }}"
61+ echo "Detecting versions changed in PR #${{ github.event.pull_request.number }}"
5662
57- # Get changed lines in releases.properties using GitHub's merge base
58- CHANGED_VERSIONS=$(git diff ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} -- releases.properties 2>/dev/null | \
59- grep "^+" | \
60- grep -v "^+++" | \
61- grep -E "^\\+[0-9]+\\.[0-9]+" | \
62- sed 's/^+//' | \
63- cut -d'=' -f1 | \
64- tr -d ' ' | \
65- grep -v -E "(RC|beta|alpha)" || true)
63+ # Get the diff from GitHub API
64+ DIFF=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files \
65+ --jq '.[] | select(.filename == "releases.properties") | .patch' 2>/dev/null || echo "")
6666
67- if [ -z "$CHANGED_VERSIONS " ]; then
68- echo "No version changes detected in releases.properties"
67+ if [ -z "$DIFF " ]; then
68+ echo "No changes to releases.properties detected "
6969 echo "Testing latest 5 stable versions as fallback"
7070 VERSIONS=$(grep -E "^[0-9]+\.[0-9]+" releases.properties | \
7171 grep -v -E "(RC|beta|alpha)" | \
7272 cut -d'=' -f1 | \
7373 tr -d ' ' | \
7474 jq -R -s -c 'split("\n") | map(select(length > 0)) | unique | sort_by(split(".") | map(tonumber)) | reverse | .[0:5]')
7575 else
76- echo "Changed versions detected:"
77- echo "$CHANGED_VERSIONS"
78- VERSIONS=$(echo "$CHANGED_VERSIONS" | jq -R -s -c 'split("\n") | map(select(length > 0)) | unique')
76+ echo "Analyzing diff for added/modified versions..."
77+
78+ # Extract added lines (lines starting with +) that contain version numbers
79+ CHANGED_VERSIONS=$(echo "$DIFF" | \
80+ grep "^+" | \
81+ grep -v "^+++" | \
82+ grep -E "^\+[0-9]+\.[0-9]+" | \
83+ sed 's/^+//' | \
84+ cut -d'=' -f1 | \
85+ tr -d ' ' | \
86+ grep -v -E "(RC|beta|alpha)" || echo "")
87+
88+ if [ -z "$CHANGED_VERSIONS" ]; then
89+ echo "No new stable versions found in PR"
90+ echo "Testing latest 5 stable versions as fallback"
91+ VERSIONS=$(grep -E "^[0-9]+\.[0-9]+" releases.properties | \
92+ grep -v -E "(RC|beta|alpha)" | \
93+ cut -d'=' -f1 | \
94+ tr -d ' ' | \
95+ jq -R -s -c 'split("\n") | map(select(length > 0)) | unique | sort_by(split(".") | map(tonumber)) | reverse | .[0:5]')
96+ else
97+ echo "Changed versions detected:"
98+ echo "$CHANGED_VERSIONS"
99+ VERSIONS=$(echo "$CHANGED_VERSIONS" | jq -R -s -c 'split("\n") | map(select(length > 0)) | unique')
100+ fi
79101 fi
80102 else
81103 # For other events, test latest 5 stable versions
104+ echo "Testing latest 5 stable versions (excluding RC/beta/alpha)"
82105 VERSIONS=$(grep -E "^[0-9]+\.[0-9]+" releases.properties | \
83106 grep -v -E "(RC|beta|alpha)" | \
84107 cut -d'=' -f1 | \
85108 tr -d ' ' | \
86109 jq -R -s -c 'split("\n") | map(select(length > 0)) | unique | sort_by(split(".") | map(tonumber)) | reverse | .[0:5]')
87- echo "Testing latest 5 stable versions (excluding RC/beta/alpha)"
88110 fi
89111
90112 echo "versions=$VERSIONS" >> $GITHUB_OUTPUT
0 commit comments