name: Publish npm Package
on:
workflow_run:
workflows: ["Release"]
types: [completed]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
actions: read
environment: npm
steps:
- uses: actions/checkout@v7
- name: Determine version
id: version
run: |
mkdir -p tag-artifact
gh run download "${{ github.event.workflow_run.id }}" \
--name release-tag \
--dir tag-artifact \
--repo "${{ github.repository }}"
TAG=$(cat tag-artifact/RELEASE_TAG)
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ github.token }}
- uses: actions/setup-node@v6
with:
node-version: 24
registry-url: https://registry.npmjs.org
- name: Download all release artifacts
uses: actions/download-artifact@v8
with:
pattern: react-auditor-*
path: artifacts
merge-multiple: true
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
- name: Extract and rename binaries
shell: bash
run: |
declare -A PLATFORM_MAP=(
["x86_64-unknown-linux-gnu"]="linux-x64"
["aarch64-unknown-linux-gnu"]="linux-arm64"
["x86_64-apple-darwin"]="darwin-x64"
["aarch64-apple-darwin"]="darwin-arm64"
["x86_64-pc-windows-msvc"]="win32-x64"
)
for target in "${!PLATFORM_MAP[@]}"; do
plat="${PLATFORM_MAP[$target]}"
extract_dir="/tmp/extract-$target"
mkdir -p "$extract_dir"
archive=$(ls artifacts/react-auditor-${target}-* 2>/dev/null | head -1)
if [ -z "$archive" ]; then
echo "No archive found for $target"
continue
fi
echo "Extracting $archive"
if [[ "$archive" == *.zip ]]; then
unzip -o "$archive" react-auditor.exe -d "$extract_dir"
cp "$extract_dir/react-auditor.exe" "npm/react-auditor-${plat}.exe"
else
tar xzf "$archive" -C "$extract_dir"
cp "$extract_dir/react-auditor" "npm/react-auditor-${plat}"
fi
done
chmod +x npm/react-auditor-* 2>/dev/null || true
ls -la npm/react-auditor-*
- name: Verify at least one binary exists
run: |
count=$(ls -1 npm/react-auditor-* 2>/dev/null | wc -l)
if [ "$count" -eq 0 ]; then
echo "No binaries were extracted!"
ls -la artifacts/
exit 1
fi
echo "Found $count platform binaries"
- name: Publish to npmjs
working-directory: npm
run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}