(enhancement) add conditional workflow execution based on version changes
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:
Nikola Derežić
2026-01-09 13:37:28 +01:00
parent 46781e07a3
commit 87fe823969

View File

@@ -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: |