name: Check Package Version on: workflow_call: inputs: workspacePath: description: 'Path relative to repo root where package.json is located' required: false type: string default: '.' outputs: version_changed: description: 'Whether the version changed from the previous commit' value: ${{ jobs.check_version.outputs.version_changed }} version: description: 'Current version from package.json' value: ${{ jobs.check_version.outputs.version }} jobs: check_version: runs-on: ubuntu-latest outputs: version_changed: ${{ steps.version-check.outputs.version_changed }} version: ${{ steps.version-check.outputs.version }} steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Check if version changed id: version-check run: | WORKSPACE_PATH="${{ inputs.workspacePath }}" # Clean up path - remove trailing slash if present WORKSPACE_PATH="${WORKSPACE_PATH%/}" # Handle root directory case if [ "$WORKSPACE_PATH" = "." ]; then PACKAGE_JSON_PATH="package.json" else PACKAGE_JSON_PATH="${WORKSPACE_PATH}/package.json" fi # Get current version CURRENT_VERSION=$(node -p "require('./${PACKAGE_JSON_PATH}').version") echo "Current version: $CURRENT_VERSION" echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT # 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_PATH} &>/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_PATH} | grep '"version"' | head -1 | sed -E 's/.*"version"\s*:\s*"([^"]+)".*/\1/') echo "Previous version: $PREVIOUS_VERSION" # Validate extraction if [ -z "$PREVIOUS_VERSION" ]; then echo "Warning: Could not extract previous version, assuming changed" echo "version_changed=true" >> $GITHUB_OUTPUT exit 0 fi # 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