diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 553dc8d7..eb6032cf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,6 +38,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_CONFIG_PROVENANCE: true + - name: Wait for npm packages to be available + if: steps.changesets.outputs.publishedPackages != '[]' + run: ./scripts/wait-for-npm-packages.sh '${{ steps.changesets.outputs.publishedPackages }}' - run: npx @vscode/vsce publish --no-git-tag-version --skip-duplicate if: steps.changesets.outputs.hasChangesets == 'false' working-directory: packages/vscode diff --git a/scripts/wait-for-npm-packages.sh b/scripts/wait-for-npm-packages.sh new file mode 100755 index 00000000..647d63f1 --- /dev/null +++ b/scripts/wait-for-npm-packages.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -euo pipefail + +# Wait for published npm packages to be available on the registry +# Usage: ./wait-for-npm-packages.sh '' +# Example: ./wait-for-npm-packages.sh '[{"name":"@css-modules-kit/core","version":"0.8.1"}]' + +published_packages="$1" + +# Parse published packages and wait for each to be available on npm registry +echo "$published_packages" | jq -r '.[] | "\(.name)@\(.version)"' | while read -r package; do + echo "Waiting for $package to be available on npm registry..." + max_attempts=10 + attempt=1 + + while [ $attempt -le $max_attempts ]; do + if npm view "$package" version &> /dev/null; then + echo "✓ $package is now available on npm registry" + echo "" + break + fi + + if [ $attempt -eq $max_attempts ]; then + echo "✗ Timeout waiting for $package to be available" + exit 1 + fi + + echo " Attempt $attempt/$max_attempts: not yet available, waiting 10 seconds..." + sleep 10 + attempt=$((attempt + 1)) + done +done + +echo "All packages are now available on npm registry"