mirror of
https://github.com/xtr-dev/payload-mailing.git
synced 2025-12-10 00:03:23 +00:00
fix: resolve Node.js version mismatch and hardcoded dependencies
🔧 **Configuration & Validation Fixes:** ### 📦 Node.js Version Alignment - Updated workflow from Node 18 → Node 20 - Matches package.json engines requirement (^18.20.2 || >=20.9.0) - Ensures consistent runtime environment ### 🏷️ Dynamic Package Name Resolution - Removed hardcoded @xtr-dev/payload-mailing references - Reads package name dynamically from package.json - Updates NPM URLs, GitHub releases, and installation commands - Uses ${{ github.repository }} for dynamic repo references ### ✅ Prerequisites Validation - Validates all required version branches exist before processing - Checks Node.js version compatibility with package.json engines - Provides clear error messages for missing branches with fix instructions - Extracts and exposes package metadata for downstream steps **New Validation Steps:** - 🔍 Version branches validation (version/major, version/minor, version/patch) - 📌 Package name and version extraction - ⚡ Node.js version compatibility check - 🛡️ Early failure with actionable error messages **Benefits:** - ✅ Prevents cryptic workflow failures - ✅ Repository-agnostic workflow (works for any fork) - ✅ Consistent Node.js environment - ✅ Self-documenting error messages
This commit is contained in:
56
.github/workflows/version-and-publish.yml
vendored
56
.github/workflows/version-and-publish.yml
vendored
@@ -17,6 +17,7 @@ jobs:
|
|||||||
new-version: ${{ steps.version-bump.outputs.new-version }}
|
new-version: ${{ steps.version-bump.outputs.new-version }}
|
||||||
current-version: ${{ steps.version-bump.outputs.current-version }}
|
current-version: ${{ steps.version-bump.outputs.current-version }}
|
||||||
version-type: ${{ steps.version-type.outputs.type }}
|
version-type: ${{ steps.version-type.outputs.type }}
|
||||||
|
package-name: ${{ steps.prerequisites.outputs.package-name }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -28,7 +29,7 @@ jobs:
|
|||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '20'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
@@ -48,6 +49,51 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-pnpm-store-
|
${{ runner.os }}-pnpm-store-
|
||||||
|
|
||||||
|
- name: Validate prerequisites and setup
|
||||||
|
id: prerequisites
|
||||||
|
run: |
|
||||||
|
# Extract package info
|
||||||
|
PACKAGE_NAME=$(node -p "require('./package.json').name")
|
||||||
|
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
||||||
|
|
||||||
|
echo "package-name=$PACKAGE_NAME" >> $GITHUB_OUTPUT
|
||||||
|
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "📦 Package: $PACKAGE_NAME"
|
||||||
|
echo "📌 Current Version: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
# Validate version branches exist
|
||||||
|
echo "🔍 Validating version branches..."
|
||||||
|
MISSING_BRANCHES=""
|
||||||
|
|
||||||
|
for branch in "version/major" "version/minor" "version/patch"; do
|
||||||
|
if ! git ls-remote --heads origin "$branch" | grep -q "$branch"; then
|
||||||
|
MISSING_BRANCHES="$MISSING_BRANCHES $branch"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$MISSING_BRANCHES" ]; then
|
||||||
|
echo "❌ ERROR: Missing required version branches:$MISSING_BRANCHES"
|
||||||
|
echo "Please create these branches first:"
|
||||||
|
for branch in $MISSING_BRANCHES; do
|
||||||
|
echo " git checkout -b $branch && git push origin $branch"
|
||||||
|
done
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ All version branches exist"
|
||||||
|
|
||||||
|
# Validate Node.js version matches package.json engines
|
||||||
|
NODE_VERSION=$(node --version)
|
||||||
|
echo "🔍 Validating Node.js version: $NODE_VERSION"
|
||||||
|
|
||||||
|
# Basic validation - check if we're on Node 20+
|
||||||
|
if ! echo "$NODE_VERSION" | grep -qE "^v(20|21|22)\."; then
|
||||||
|
echo "⚠️ WARNING: Node.js version $NODE_VERSION may not match package.json engines requirements"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Prerequisites validation complete"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
@@ -317,12 +363,12 @@ CLAUDE_EOF
|
|||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
\`\`\`bash
|
\`\`\`bash
|
||||||
npm install @xtr-dev/payload-mailing@${{ steps.version-bump.outputs.new-version }}
|
npm install ${{ steps.prerequisites.outputs.package-name }}@${{ steps.version-bump.outputs.new-version }}
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
See the [README](https://github.com/xtr-dev/payload-mailing#readme) for usage instructions and full documentation."
|
See the [README](https://github.com/${{ github.repository }}#readme) for usage instructions and full documentation."
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@@ -335,7 +381,7 @@ CLAUDE_EOF
|
|||||||
if: needs.version-and-publish.outputs.new-version != ''
|
if: needs.version-and-publish.outputs.new-version != ''
|
||||||
run: |
|
run: |
|
||||||
echo "🎉 Successfully published version ${{ needs.version-and-publish.outputs.new-version }} to NPM!"
|
echo "🎉 Successfully published version ${{ needs.version-and-publish.outputs.new-version }} to NPM!"
|
||||||
echo "📦 Package: https://www.npmjs.com/package/@xtr-dev/payload-mailing"
|
echo "📦 Package: https://www.npmjs.com/package/${{ needs.version-and-publish.outputs.package-name }}"
|
||||||
echo "🏷️ GitHub Release: https://github.com/xtr-dev/payload-mailing/releases/tag/v${{ needs.version-and-publish.outputs.new-version }}"
|
echo "🏷️ GitHub Release: https://github.com/${{ github.repository }}/releases/tag/v${{ needs.version-and-publish.outputs.new-version }}"
|
||||||
echo "🔄 Version Type: ${{ needs.version-and-publish.outputs.version-type }}"
|
echo "🔄 Version Type: ${{ needs.version-and-publish.outputs.version-type }}"
|
||||||
echo "📈 Version Change: v${{ needs.version-and-publish.outputs.current-version }} → v${{ needs.version-and-publish.outputs.new-version }}"
|
echo "📈 Version Change: v${{ needs.version-and-publish.outputs.current-version }} → v${{ needs.version-and-publish.outputs.new-version }}"
|
||||||
Reference in New Issue
Block a user