1212 description : " IDF Targets" 
1313 default : " esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32c6,esp32h2,esp32p4" 
1414 type : " string" 
15-  required : true 
15+  required : false 
1616 push :
1717 branches :
1818 - master 
6666 runs-on : ubuntu-latest 
6767 if : ${{ !(github.event_name == 'pull_request' && startsWith(github.head_ref, 'release/')) }} 
6868 outputs :
69-  idf_ver : ${{ steps.set-matrix.outputs.idf_ver }} 
70-  idf_target : ${{ steps.set-matrix.outputs.idf_target }} 
69+  matrix : ${{ steps.set-matrix.outputs.matrix }} 
7170 should_build : ${{ steps.affected-examples.outputs.should_build }} 
7271 steps :
7372 - name : Install universal-ctags 
@@ -113,32 +112,78 @@ jobs:
113112 dependencies_reverse.json 
114113  if-no-files-found : warn 
115114
116-  - name : Get IDF Version and Targets  
115+  - name : Get Matrix Combinations  
117116 id : set-matrix 
118117 run : | 
119-  # Default values 
120-  idf_ver="release-v5.3,release-v5.4,release-v5.5" 
121-  idf_targets="esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32c6,esp32h2,esp32p4" 
122- 
123-  # Override with inputs if provided 
118+  # Define version-specific target configurations 
119+  get_targets_for_version() { 
120+  case "$1" in 
121+  "release-v5.3") 
122+  echo "esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32c6,esp32h2,esp32p4" 
123+  ;; 
124+  "release-v5.4") 
125+  echo "esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32c6,esp32h2,esp32p4" 
126+  ;; 
127+  "release-v5.5") 
128+  echo "esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32c5,esp32c6,esp32h2,esp32p4" 
129+  ;; 
130+  *) 
131+  echo "" 
132+  ;; 
133+  esac 
134+  } 
135+ 
136+  # Default versions if not provided via inputs 
137+  DEFAULT_VERSIONS="release-v5.3,release-v5.4,release-v5.5" 
138+ 
139+  # Use inputs if provided, otherwise use defaults 
124140 if [[ -n "${{ inputs.idf_ver }}" ]]; then 
125-  idf_ver="${{ inputs.idf_ver }}" 
126-  fi 
127-  if [[ -n "${{ inputs.idf_targets }}" ]]; then 
128-  idf_targets="${{ inputs.idf_targets }}" 
141+  VERSIONS="${{ inputs.idf_ver }}" 
142+  else 
143+  VERSIONS="$DEFAULT_VERSIONS" 
129144 fi 
130145
131-  # Convert comma-separated strings to JSON arrays using a more robust method 
132-  idf_ver_json=$(printf '%s\n' "$idf_ver" | tr ',' '\n' | jq -R . | jq -s . | jq -c .) 
133-  idf_targets_json=$(printf '%s\n' "$idf_targets" | tr ',' '\n' | jq -R . | jq -s . | jq -c .) 
134- 
135-  # Debug: Print the JSON for verification 
136-  echo "Debug - idf_ver_json: $idf_ver_json" 
137-  echo "Debug - idf_targets_json: $idf_targets_json" 
138- 
139-  # Set outputs - ensure no extra whitespace 
140-  printf "idf_ver=%s\n" "$idf_ver_json" >> $GITHUB_OUTPUT 
141-  printf "idf_target=%s\n" "$idf_targets_json" >> $GITHUB_OUTPUT 
146+  # Generate matrix combinations 
147+  echo '{"include": [' > matrix.json 
148+  first=true 
149+  IFS=',' read -ra VERSION_ARRAY <<< "$VERSIONS" 
150+ 
151+  for version in "${VERSION_ARRAY[@]}"; do 
152+  # Trim whitespace 
153+  version=$(echo "$version" | xargs) 
154+ 
155+  # Get targets for this version 
156+  if [[ -n "${{ inputs.idf_targets }}" ]]; then 
157+  # Use provided targets for all versions 
158+  targets="${{ inputs.idf_targets }}" 
159+  else 
160+  # Use version-specific targets 
161+  targets=$(get_targets_for_version "$version") 
162+  fi 
163+ 
164+  if [[ -n "$targets" ]]; then 
165+  IFS=',' read -ra TARGET_ARRAY <<< "$targets" 
166+  for target in "${TARGET_ARRAY[@]}"; do 
167+  # Trim whitespace 
168+  target=$(echo "$target" | xargs) 
169+ 
170+  if [ "$first" = true ]; then 
171+  first=false 
172+  else 
173+  echo ',' >> matrix.json 
174+  fi 
175+  echo "{\"idf_ver\": \"$version\", \"idf_target\": \"$target\"}" >> matrix.json 
176+  done 
177+  fi 
178+  done 
179+  echo ']}' >> matrix.json 
180+ 
181+  # Debug: Print the matrix for verification 
182+  echo "Debug - Generated matrix:" 
183+  cat matrix.json | jq . 
184+ 
185+  # Set output 
186+  printf "matrix=%s\n" "$(cat matrix.json | jq -c .)" >> $GITHUB_OUTPUT 
142187
143188  build-esp-idf-component :
144189 name : Build IDF ${{ matrix.idf_ver }} for ${{ matrix.idf_target }} 
@@ -147,13 +192,7 @@ jobs:
147192 if : ${{ needs.set-matrix.outputs.should_build == '1' }} 
148193 strategy :
149194 fail-fast : false 
150-  matrix :
151-  #  The version names here correspond to the versions of espressif/idf Docker image.
152-  #  See https://hub.docker.com/r/espressif/idf/tags and
153-  #  https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
154-  #  for details.
155-  idf_ver : ${{ fromJson(needs.set-matrix.outputs.idf_ver) }} 
156-  idf_target : ${{ fromJson(needs.set-matrix.outputs.idf_target) }} 
195+  matrix : ${{ fromJson(needs.set-matrix.outputs.matrix) }} 
157196 container : espressif/idf:${{ matrix.idf_ver }} 
158197 steps :
159198 - name : Check out arduino-esp32 as a component 
0 commit comments