@@ -128,7 +128,55 @@ jobs:
128128 PRE_RELEASE : ' true'
129129 SELECTED_EXTENSIONS : ${{ needs.determine-changes.outputs.selected-extensions }}
130130 run : |
131- node node_modules/github-workflows/packages/vscode-extension-ci/dist/cli.js ext-release-plan
131+ echo "=== EXTENSION RELEASE PLAN ==="
132+ echo "Branch: $BRANCH"
133+ echo "Build type: $BUILD_TYPE"
134+ echo "Is nightly: $IS_NIGHTLY"
135+ echo "Version bump type: $VERSION_BUMP"
136+ echo "Registries: $REGISTRIES"
137+ echo "Pre-release: $PRE_RELEASE"
138+ echo "Dry run mode: ENABLED"
139+ echo ""
140+ echo "Extensions to release: $SELECTED_EXTENSIONS"
141+ echo ""
142+
143+ IFS=',' read -ra extensions <<< "$SELECTED_EXTENSIONS"
144+ for ext in "${extensions[@]}"; do
145+ [ -z "$ext" ] && continue
146+
147+ package_json="packages/$ext/package.json"
148+ if [ ! -f "$package_json" ]; then
149+ echo "Extension: $ext (package.json not found)"
150+ continue
151+ fi
152+
153+ current_version=$(jq -r '.version' "$package_json")
154+ publisher=$(jq -r '.publisher // "N/A"' "$package_json")
155+
156+ echo "Extension: $ext"
157+ echo " Current version: $current_version"
158+ echo " Publisher: $publisher"
159+
160+ if [ "$IS_NIGHTLY" = "true" ]; then
161+ echo " Version strategy: Nightly build (odd minor + nightly timestamp)"
162+ elif [ "$PRE_RELEASE" = "true" ]; then
163+ echo " Version strategy: Pre-release (odd minor version)"
164+ else
165+ echo " Version strategy: Stable release (even minor version)"
166+ fi
167+
168+ echo " Would create GitHub release"
169+ echo " Would package VSIX"
170+
171+ case "$REGISTRIES" in
172+ marketplace) echo " Would publish to: VS Code Marketplace only" ;;
173+ openvsx) echo " Would publish to: Open VSX only" ;;
174+ all) echo " Would publish to: VS Code Marketplace and Open VSX" ;;
175+ esac
176+ echo ""
177+ done
178+
179+ echo "=== END OF RELEASE PLAN ==="
132180
133181 bump-versions :
134182 needs : [determine-changes]
@@ -297,7 +345,55 @@ jobs:
297345 echo "Nightly build detected - skipping marketplace publishing"
298346 echo 'matrix=[]' >> $GITHUB_OUTPUT
299347 else
300- node node_modules/github-workflows/packages/vscode-extension-ci/dist/cli.js ext-publish-matrix
348+ # Parse extensions
349+ IFS=',' read -ra extensions <<< "$SELECTED_EXTENSIONS"
350+
351+ # Determine registries
352+ if [ "$REGISTRIES" = "all" ]; then
353+ registries=("vsce" "ovsx")
354+ else
355+ IFS=',' read -ra registries <<< "$REGISTRIES"
356+ fi
357+
358+ # Build matrix JSON
359+ matrix_entries=()
360+ for ext in "${extensions[@]}"; do
361+ [ -z "$ext" ] && continue
362+
363+ # Map extension names to VSIX patterns
364+ if [ "$ext" = "apex-lsp-vscode-extension" ]; then
365+ vsix_pattern="*apex-language-server-extension*-[0-9]*.vsix"
366+ else
367+ vsix_pattern="*${ext}*.vsix"
368+ fi
369+
370+ for registry in "${registries[@]}"; do
371+ [ -z "$registry" ] && continue
372+
373+ case "$registry" in
374+ vsce) marketplace="VS Code Marketplace" ;;
375+ ovsx) marketplace="Open VSX Registry" ;;
376+ *) marketplace="$registry" ;;
377+ esac
378+
379+ entry=$(jq -n \
380+ --arg reg "$registry" \
381+ --arg pattern "$vsix_pattern" \
382+ --arg market "$marketplace" \
383+ '{registry: $reg, vsix_pattern: $pattern, marketplace: $market}')
384+
385+ matrix_entries+=("$entry")
386+ done
387+ done
388+
389+ # Combine into matrix JSON
390+ if [ ${#matrix_entries[@]} -eq 0 ]; then
391+ matrix_json='{"include":[]}'
392+ else
393+ matrix_json=$(printf '%s\n' "${matrix_entries[@]}" | jq -s '{include: .}')
394+ fi
395+
396+ echo "matrix=$matrix_json" >> $GITHUB_OUTPUT
301397 fi
302398
303399 publish :
@@ -467,7 +563,90 @@ jobs:
467563 BRANCH : ${{ inputs.branch || github.ref_name }}
468564 VSIX_ARTIFACTS_PATH : ./vsix-artifacts
469565 run : |
470- node node_modules/github-workflows/packages/vscode-extension-ci/dist/cli.js ext-github-releases
566+ echo "Mode: $([ "$DRY_RUN" = "true" ] && echo "DRY RUN" || echo "LIVE")"
567+ echo "Creating GitHub releases..."
568+
569+ IFS=',' read -ra extensions <<< "$SELECTED_EXTENSIONS"
570+
571+ for ext in "${extensions[@]}"; do
572+ [ -z "$ext" ] && continue
573+
574+ package_json="packages/$ext/package.json"
575+ if [ ! -f "$package_json" ]; then
576+ echo "⚠️ Skipping $ext: package.json not found"
577+ continue
578+ fi
579+
580+ current_version=$(jq -r '.version' "$package_json")
581+ echo "Processing extension: $ext (version: $current_version)"
582+
583+ # Find VSIX files
584+ if [ "$ext" = "apex-lsp-vscode-extension" ]; then
585+ vsix_pattern="*apex-language-server-extension-*.vsix"
586+ else
587+ vsix_pattern="*${ext}*.vsix"
588+ fi
589+
590+ vsix_files=("$VSIX_ARTIFACTS_PATH"/$ext/$vsix_pattern)
591+ if [ ! -f "${vsix_files[0]}" ]; then
592+ echo "⚠️ No VSIX files found for $ext"
593+ continue
594+ fi
595+
596+ # Filter out *-web-* builds
597+ filtered_files=()
598+ for file in "${vsix_files[@]}"; do
599+ if [[ ! "$(basename "$file")" =~ -web- ]]; then
600+ filtered_files+=("$file")
601+ fi
602+ done
603+
604+ # Create release tag
605+ release_tag="v$current_version"
606+ release_title="$ext v$current_version"
607+
608+ if [ "$IS_NIGHTLY" = "true" ]; then
609+ nightly_date=$(date -u +%Y%m%d)
610+ branch_suffix=""
611+ [ "$BRANCH" != "main" ] && branch_suffix=".${BRANCH//\//-}"
612+ release_tag="v${current_version}-nightly${branch_suffix}.${nightly_date}"
613+ release_title="$ext v$current_version (Nightly $BRANCH $nightly_date)"
614+ fi
615+
616+ if [ "$DRY_RUN" = "true" ]; then
617+ echo "✅ DRY RUN: Would create release $release_tag with ${#filtered_files[@]} VSIX files"
618+ else
619+ # Check if release exists
620+ if gh release view "$release_tag" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
621+ echo "⏭️ Release $release_tag already exists - skipping"
622+ else
623+ # Generate release notes
624+ notes_file=".release-notes-$(date +%s).tmp"
625+ cat > "$notes_file" << EOF
626+ ## $ext v$current_version
627+
628+ ### Installation
629+ Download the VSIX file and install via VS Code.
630+
631+ $([ "$PRE_RELEASE" = "true" ] && echo "⚠️ **This is a pre-release version**")
632+ $([ "$IS_NIGHTLY" = "true" ] && echo "🌙 **Nightly build from $(date -u +%Y%m%d)**")
633+ EOF
634+
635+ # Create release
636+ gh release create "$release_tag" \
637+ --title "$release_title" \
638+ --notes-file "$notes_file" \
639+ --prerelease="$PRE_RELEASE" \
640+ --repo "$GITHUB_REPOSITORY" \
641+ "${filtered_files[@]}"
642+
643+ rm -f "$notes_file"
644+ echo "✅ Release created for $ext"
645+ fi
646+ fi
647+ done
648+
649+ echo "$([ "$DRY_RUN" = "true" ] && echo "✅ DRY RUN complete" || echo "✅ Releases created")"
471650
472651 publish-to-cbweb-marketplace :
473652 name : Publish to CBWeb Internal Marketplace
0 commit comments