diff --git a/.github/workflows/publish_npm.yml b/.github/workflows/publish_npm.yml index 8f5403f..c23c51c 100644 --- a/.github/workflows/publish_npm.yml +++ b/.github/workflows/publish_npm.yml @@ -72,9 +72,23 @@ jobs: - name: Pre upload validation id: pack run: | - npm pack --dry-run >> output 2>&1 - echo PRE_UPLOAD_HASH=$(cat output| grep shasum | cut -f4 -d" ") >> $GITHUB_OUTPUT + npm pack --dry-run > output 2>&1 + PRE_UPLOAD_HASH=$(grep 'shasum' output | awk '{print $2}') + echo "PRE_UPLOAD_HASH=$PRE_UPLOAD_HASH" >> $GITHUB_OUTPUT + echo "PRE_UPLOAD_HASH: $PRE_UPLOAD_HASH" + - name: Check if version is already published + run: | + PACKAGE_NAME=$(cat package.json | jq -r .name) + PACKAGE_VERSION=$(cat package.json | jq -r .version) + + if npm view $PACKAGE_NAME@$PACKAGE_VERSION > /dev/null 2>&1; then + echo "Version $PACKAGE_VERSION of $PACKAGE_NAME is already published." + exit 0 + fi + + echo "Version $PACKAGE_VERSION of $PACKAGE_NAME is not published. Proceeding with publishing..." + - name: Upload package run: npm publish --access public env: @@ -83,10 +97,24 @@ jobs: - name: Post upload validation id: unpack run: | - PACKAGE_NAME=$(cat package.json | jq .name | cut -f2 -d"\"")@$(cat package.json | jq .version | cut -f2 -d"\"") - echo POST_UPLOAD_HASH=$(npm view $PACKAGE_NAME) >> $GITHUB_OUTPUT + # Get the package name and version + PACKAGE_NAME=$(cat package.json | jq -r .name) + PACKAGE_VERSION=$(cat package.json | jq -r .version) + FULL_PACKAGE_NAME="${PACKAGE_NAME}@${PACKAGE_VERSION}" + + # Fetch the shasum from npm + POST_UPLOAD_HASH=$(npm view $FULL_PACKAGE_NAME dist.shasum) + echo "POST_UPLOAD_HASH=$POST_UPLOAD_HASH" >> $GITHUB_OUTPUT + echo "POST_UPLOAD_HASH: $POST_UPLOAD_HASH" - name: Pre and Post Upload validation - if: steps.pack.outputs.PRE_UPLOAD_HASH != steps.unpack.outputs.POST_UPLOAD_HASH - # Fail if package hashes doesn't match - run: exit 1 \ No newline at end of file + run: | + echo "Comparing hashes..." + echo "PRE_UPLOAD_HASH: '${{ steps.pack.outputs.PRE_UPLOAD_HASH }}'" + echo "POST_UPLOAD_HASH: '${{ steps.unpack.outputs.POST_UPLOAD_HASH }}'" + + if [ "${{ steps.pack.outputs.PRE_UPLOAD_HASH }}" != "${{ steps.unpack.outputs.POST_UPLOAD_HASH }}" ]; then + echo "Hash mismatch detected!" + exit 1 + fi + echo "Hashes match successfully!" \ No newline at end of file