Update package metadata reading method in GitHub Actions workflow#14
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR refactors the GitHub Actions workflow to read package metadata using a single Node.js command instead of multiple echo statements, aiming to improve efficiency and reduce redundant file operations.
- Consolidates three separate Node.js commands into one comprehensive script
- Uses
fs.appendFileSync()to write directly toGITHUB_OUTPUTinstead of shell redirection - Maintains the same output variables (version, name, vsix) for downstream workflow steps
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| echo "version=$(node -p \"require('./package.json').version\")" >> "$GITHUB_OUTPUT" | ||
| echo "name=$(node -p \"require('./package.json').name\")" >> "$GITHUB_OUTPUT" | ||
| echo "vsix=$(node -p \"const p=require('./package.json'); p.name + '-' + p.version + '.vsix'\")" >> "$GITHUB_OUTPUT" | ||
| node -e "const fs=require('fs'); const p=require('./package.json'); const out=process.env.GITHUB_OUTPUT; fs.appendFileSync(out, `version=${p.version}\n`); fs.appendFileSync(out, `name=${p.name}\n`); fs.appendFileSync(out, `vsix=${p.name}-${p.version}.vsix\n`);" |
There was a problem hiding this comment.
[nitpick] This single-line command is difficult to read and maintain. Consider breaking it into multiple lines or using a here document for better readability.
| node -e "const fs=require('fs'); const p=require('./package.json'); const out=process.env.GITHUB_OUTPUT; fs.appendFileSync(out, `version=${p.version}\n`); fs.appendFileSync(out, `name=${p.name}\n`); fs.appendFileSync(out, `vsix=${p.name}-${p.version}.vsix\n`);" | |
| node <<'EOF' | |
| const fs = require('fs'); | |
| const p = require('./package.json'); | |
| const out = process.env.GITHUB_OUTPUT; | |
| fs.appendFileSync(out, `version=${p.version}\n`); | |
| fs.appendFileSync(out, `name=${p.name}\n`); | |
| fs.appendFileSync(out, `vsix=${p.name}-${p.version}.vsix\n`); | |
| EOF |
| echo "version=$(node -p \"require('./package.json').version\")" >> "$GITHUB_OUTPUT" | ||
| echo "name=$(node -p \"require('./package.json').name\")" >> "$GITHUB_OUTPUT" | ||
| echo "vsix=$(node -p \"const p=require('./package.json'); p.name + '-' + p.version + '.vsix'\")" >> "$GITHUB_OUTPUT" | ||
| node -e "const fs=require('fs'); const p=require('./package.json'); const out=process.env.GITHUB_OUTPUT; fs.appendFileSync(out, `version=${p.version}\n`); fs.appendFileSync(out, `name=${p.name}\n`); fs.appendFileSync(out, `vsix=${p.name}-${p.version}.vsix\n`);" |
There was a problem hiding this comment.
Missing input validation for package.json properties. If p.version or p.name contain special characters or newlines, they could corrupt the GITHUB_OUTPUT format.
| node -e "const fs=require('fs'); const p=require('./package.json'); const out=process.env.GITHUB_OUTPUT; fs.appendFileSync(out, `version=${p.version}\n`); fs.appendFileSync(out, `name=${p.name}\n`); fs.appendFileSync(out, `vsix=${p.name}-${p.version}.vsix\n`);" | |
| node -e "const fs=require('fs'); const p=require('./package.json'); const out=process.env.GITHUB_OUTPUT; const esc=s=>s.replace(/%/g,'%25').replace(/\\n/g,'%0A').replace(/\\r/g,'%0D'); fs.appendFileSync(out, `version=${esc(p.version)}\n`); fs.appendFileSync(out, `name=${esc(p.name)}\n`); fs.appendFileSync(out, `vsix=${esc(p.name)}-${esc(p.version)}.vsix\n`);" |
Refactor the method for reading package metadata in the GitHub Actions workflow to improve efficiency and clarity.