From 4e4ccff05e8a2176d6bbf9fa430ad541c239fce6 Mon Sep 17 00:00:00 2001 From: madhur310 Date: Mon, 20 Jul 2026 13:47:52 -0700 Subject: [PATCH 1/3] feat: add prerelease VSIX validation step Addresses PR review high priority item #4: - Validates VSIXs are marked as prerelease when pre-release: true - Extracts package.json from VSIX and checks version has -pre suffix - Fails build if any VSIX is not properly marked - Only runs validation when pre-release input is true This ensures the --pre-release flag was properly passed to vsce. --- .github/workflows/vscode-package.yml | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.github/workflows/vscode-package.yml b/.github/workflows/vscode-package.yml index 9842155..de07a87 100644 --- a/.github/workflows/vscode-package.yml +++ b/.github/workflows/vscode-package.yml @@ -172,6 +172,53 @@ jobs: echo "checksums_generated=true" >> $GITHUB_OUTPUT echo "checksums_file=$EXTENSIONS_ROOT/checksums.json" >> $GITHUB_OUTPUT + - name: Validate prerelease VSIXs + if: inputs.pre-release == 'true' + env: + EXTENSIONS_ROOT: ${{ inputs.extensions-root || 'packages' }} + run: | + echo "Validating that VSIXs are marked as prerelease..." + + VSIX_FILES=$(find "$EXTENSIONS_ROOT" -name "*.vsix" -type f) + + if [ -z "$VSIX_FILES" ]; then + echo "⚠️ No VSIX files found to validate" + exit 0 + fi + + VALIDATION_FAILED=false + + while IFS= read -r vsix_file; do + # Extract package.json from VSIX (it's a zip file) + TEMP_DIR=$(mktemp -d) + unzip -q "$vsix_file" "extension/package.json" -d "$TEMP_DIR" 2>/dev/null || { + echo "⚠️ Could not extract package.json from $(basename "$vsix_file")" + rm -rf "$TEMP_DIR" + continue + } + + # Check if preRelease flag is true in the manifest + IS_PRERELEASE=$(jq -r '.version as $v | if $v | test("-pre") then true else false end' "$TEMP_DIR/extension/package.json") + + if [ "$IS_PRERELEASE" = "true" ]; then + echo "✅ $(basename "$vsix_file") - correctly marked as prerelease" + else + echo "❌ $(basename "$vsix_file") - NOT marked as prerelease (missing -pre suffix or flag)" + VALIDATION_FAILED=true + fi + + rm -rf "$TEMP_DIR" + done <<< "$VSIX_FILES" + + if [ "$VALIDATION_FAILED" = "true" ]; then + echo "" + echo "❌ Validation failed: Some VSIXs are not properly marked as prerelease" + echo " Ensure --pre-release flag is passed to vsce package command" + exit 1 + fi + + echo "✅ All VSIXs validated as prerelease" + - name: Calculate artifact name id: calc-artifact-name run: | From acbebcb68b69e9bd8fde717ab56f3c01071e24c5 Mon Sep 17 00:00:00 2001 From: madhur310 Date: Mon, 20 Jul 2026 16:13:13 -0700 Subject: [PATCH 2/3] fix: update the check --- .github/workflows/vscode-package.yml | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/.github/workflows/vscode-package.yml b/.github/workflows/vscode-package.yml index de07a87..439baca 100644 --- a/.github/workflows/vscode-package.yml +++ b/.github/workflows/vscode-package.yml @@ -171,16 +171,18 @@ jobs: echo "checksums_generated=true" >> $GITHUB_OUTPUT echo "checksums_file=$EXTENSIONS_ROOT/checksums.json" >> $GITHUB_OUTPUT + # Cache VSIX file list for reuse in validation step + echo "vsix_files<> $GITHUB_OUTPUT + echo "$VSIX_FILES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - name: Validate prerelease VSIXs if: inputs.pre-release == 'true' env: - EXTENSIONS_ROOT: ${{ inputs.extensions-root || 'packages' }} + VSIX_FILES: ${{ steps.md5-checksums.outputs.vsix_files }} run: | echo "Validating that VSIXs are marked as prerelease..." - VSIX_FILES=$(find "$EXTENSIONS_ROOT" -name "*.vsix" -type f) - if [ -z "$VSIX_FILES" ]; then echo "⚠️ No VSIX files found to validate" exit 0 @@ -189,25 +191,17 @@ jobs: VALIDATION_FAILED=false while IFS= read -r vsix_file; do - # Extract package.json from VSIX (it's a zip file) - TEMP_DIR=$(mktemp -d) - unzip -q "$vsix_file" "extension/package.json" -d "$TEMP_DIR" 2>/dev/null || { - echo "⚠️ Could not extract package.json from $(basename "$vsix_file")" - rm -rf "$TEMP_DIR" - continue - } - - # Check if preRelease flag is true in the manifest - IS_PRERELEASE=$(jq -r '.version as $v | if $v | test("-pre") then true else false end' "$TEMP_DIR/extension/package.json") + # Check if preRelease flag is set in the VSIX manifest + # Using unzip -p to pipe directly to grep (no temp directory needed) + IS_PRERELEASE=$(unzip -p "$vsix_file" extension.vsixmanifest 2>/dev/null | \ + { grep -q 'Microsoft.VisualStudio.Code.PreRelease" Value="true"' && echo true || echo false; }) if [ "$IS_PRERELEASE" = "true" ]; then echo "✅ $(basename "$vsix_file") - correctly marked as prerelease" else - echo "❌ $(basename "$vsix_file") - NOT marked as prerelease (missing -pre suffix or flag)" + echo "❌ $(basename "$vsix_file") - NOT marked as prerelease (missing PreRelease flag in manifest)" VALIDATION_FAILED=true fi - - rm -rf "$TEMP_DIR" done <<< "$VSIX_FILES" if [ "$VALIDATION_FAILED" = "true" ]; then From 80ddae0cc61eb46f8a27bb06b24490520c779d04 Mon Sep 17 00:00:00 2001 From: madhur310 Date: Tue, 21 Jul 2026 10:18:03 -0700 Subject: [PATCH 3/3] fix: prfb --- .github/workflows/vscode-package.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/workflows/vscode-package.yml b/.github/workflows/vscode-package.yml index 439baca..b2adf57 100644 --- a/.github/workflows/vscode-package.yml +++ b/.github/workflows/vscode-package.yml @@ -184,7 +184,7 @@ jobs: echo "Validating that VSIXs are marked as prerelease..." if [ -z "$VSIX_FILES" ]; then - echo "⚠️ No VSIX files found to validate" + echo "No VSIX files found to validate" exit 0 fi @@ -193,25 +193,22 @@ jobs: while IFS= read -r vsix_file; do # Check if preRelease flag is set in the VSIX manifest # Using unzip -p to pipe directly to grep (no temp directory needed) - IS_PRERELEASE=$(unzip -p "$vsix_file" extension.vsixmanifest 2>/dev/null | \ - { grep -q 'Microsoft.VisualStudio.Code.PreRelease" Value="true"' && echo true || echo false; }) - - if [ "$IS_PRERELEASE" = "true" ]; then - echo "✅ $(basename "$vsix_file") - correctly marked as prerelease" + if unzip -p "$vsix_file" extension.vsixmanifest 2>/dev/null | grep -q 'Microsoft.VisualStudio.Code.PreRelease" Value="true"'; then + echo "PASS: $(basename "$vsix_file") - correctly marked as prerelease" else - echo "❌ $(basename "$vsix_file") - NOT marked as prerelease (missing PreRelease flag in manifest)" + echo "FAIL: $(basename "$vsix_file") - NOT marked as prerelease (missing PreRelease flag in manifest)" VALIDATION_FAILED=true fi done <<< "$VSIX_FILES" if [ "$VALIDATION_FAILED" = "true" ]; then echo "" - echo "❌ Validation failed: Some VSIXs are not properly marked as prerelease" - echo " Ensure --pre-release flag is passed to vsce package command" + echo "Validation failed: Some VSIXs are not properly marked as prerelease" + echo "Ensure --pre-release flag is passed to vsce package command" exit 1 fi - echo "✅ All VSIXs validated as prerelease" + echo "All VSIXs validated as prerelease" - name: Calculate artifact name id: calc-artifact-name