(enhancement) add conditional workflow execution based on version changes
All checks were successful
Build and Push Docker Image / build (push) Has been skipped
All checks were successful
Build and Push Docker Image / build (push) Has been skipped
The workflow now skips the build job when the version in package.json hasn't changed compared to the previous commit. This prevents unnecessary Docker builds when only non-version changes are pushed. Key changes: - Added version-check step to compare current and previous package.json versions - Added job-level conditional to skip build when version is unchanged - Pull requests always run to validate version bumps before merge - Handles edge cases: first commit, missing package.json in history Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,12 +12,47 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
if: github.event_name == 'pull_request' || steps.version-check.outputs.version_changed == 'true'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Check if version changed
|
||||||
|
id: version-check
|
||||||
|
run: |
|
||||||
|
# Get current version
|
||||||
|
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
||||||
|
echo "Current version: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
# Check if HEAD~1 exists (handle first commit)
|
||||||
|
if ! git rev-parse HEAD~1 &>/dev/null; then
|
||||||
|
echo "First commit detected, running workflow"
|
||||||
|
echo "version_changed=true" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if package.json exists in previous commit
|
||||||
|
if ! git show HEAD~1:package.json &>/dev/null; then
|
||||||
|
echo "package.json doesn't exist in previous commit"
|
||||||
|
echo "version_changed=true" >> $GITHUB_OUTPUT
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract previous version using grep/sed (safer than node for old file)
|
||||||
|
PREVIOUS_VERSION=$(git show HEAD~1:package.json | grep '"version"' | head -1 | sed -E 's/.*"version"\s*:\s*"([^"]+)".*/\1/')
|
||||||
|
echo "Previous version: $PREVIOUS_VERSION"
|
||||||
|
|
||||||
|
# Compare versions
|
||||||
|
if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
||||||
|
echo "Version changed: $PREVIOUS_VERSION -> $CURRENT_VERSION"
|
||||||
|
echo "version_changed=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "Version unchanged: $CURRENT_VERSION"
|
||||||
|
echo "version_changed=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Read package.json version
|
- name: Read package.json version
|
||||||
id: package-version
|
id: package-version
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Reference in New Issue
Block a user