Skip to content

chore(@tutur3u/types): bump version to 0.1.6 #2240

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 9 commits into from
Closed
205 changes: 135 additions & 70 deletions .github/workflows/check-and-bump-versions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -261,21 +261,44 @@ jobs:
echo "β€’ New checksum (${#NEW_CHECKSUM} chars): $NEW_CHECKSUM"
echo "β€’ Match status: $([ "$OLD_CHECKSUM" = "$NEW_CHECKSUM" ] && echo "identical" || echo "different")"

# Add function to check if only version changed in package.json
# Enhanced function to check if only version changed in package.json
check_package_json_changes() {
if [ "${{ github.event_name }}" = "pull_request" ]; then
DIFF=$(git diff "${{ github.event.pull_request.base.sha }}" "${{ github.event.pull_request.head.sha }}" -- package.json)
else
DIFF=$(git diff HEAD~1 HEAD -- package.json)
fi

# If no diff found, return false (changes exist)
if [ -z "$DIFF" ]; then
return 1
fi

# First, capture all non-whitespace changes
CHANGES=$(echo "$DIFF" | grep '^[+-]' | grep -v '^[+-]\s*$' | grep -v '^[+-]\s*{*}*$')

# Count number of changed lines that aren't the version field
NON_VERSION_CHANGES=$(echo "$DIFF" | grep -v '"version":' | grep '^[+-]' | wc -l)
# Remove any line with just braces, commas, or whitespace
CHANGES=$(echo "$CHANGES" | grep -v '^[+-]\s*[{},]*\s*$')

# If there are no non-version changes, return true (1)
if [ "$NON_VERSION_CHANGES" -eq 0 ]; then
return 0
# Get all lines except version changes
NON_VERSION_LINES=$(echo "$CHANGES" | grep -v '"version":\s*"[0-9][0-9.]*"' || true)

# If we have no non-version changes
if [ -z "$NON_VERSION_LINES" ]; then
# Verify we have exactly one version removal and one addition
VERSION_LINES=$(echo "$CHANGES" | grep '"version":\s*"[0-9][0-9.]*"' || true)
if [ -n "$VERSION_LINES" ]; then
VERSION_REMOVED=$(echo "$VERSION_LINES" | grep '^-' | wc -l | tr -d ' ')
VERSION_ADDED=$(echo "$VERSION_LINES" | grep '^+' | wc -l | tr -d ' ')

if [ "$VERSION_REMOVED" -eq 1 ] && [ "$VERSION_ADDED" -eq 1 ]; then
echo "βœ“ Verified: Only version field was changed"
return 0
fi
fi
fi

echo "βœ— Other changes detected besides version"
return 1
}

Expand All @@ -286,7 +309,7 @@ jobs:
echo "New package detected, will create initial version"
SHOULD_BUMP=true
else
# Improved source file detection
# Enhanced source file detection with better filtering
if [ "${{ github.event_name }}" = "pull_request" ]; then
SOURCE_FILES_CHANGED=$(git diff --name-only "${{ github.event.pull_request.base.sha }}" "${{ github.event.pull_request.head.sha }}" | grep "^packages/$package/" | grep -E "\.(ts|tsx|js|jsx|json|css|scss|md)$" || true)
else
Expand All @@ -296,21 +319,32 @@ jobs:
if [ -n "$SOURCE_FILES_CHANGED" ]; then
# If only package.json changed, check if it's only version changes
if [ "$(echo "$SOURCE_FILES_CHANGED" | wc -l)" -eq 1 ] && [ "$(echo "$SOURCE_FILES_CHANGED" | grep "package.json$")" ]; then
echo "Only package.json changed. Checking if changes are version-only..."
if check_package_json_changes; then
echo "Only version field changed in package.json, skipping version bump"
echo "βœ… Confirmed: Only version field changed in package.json"
echo "⏭️ Skipping version bump, updating checksum only"
SHOULD_BUMP=false

# Update checksum without bumping version
echo "$NEW_CHECKSUM" > .checksum
if [ -n "$(git status --porcelain .checksum)" ]; then
git add .checksum
git commit -m "chore(@tutur3u/${package}): update checksum [skip ci]"
git push origin HEAD
fi
else
echo "Package.json has meaningful changes"
echo "⚠️ Package.json contains meaningful changes beyond version"
SHOULD_BUMP=true
fi
else
echo "Source files changed:"
echo "Multiple source files changed:"
echo "$SOURCE_FILES_CHANGED"
SHOULD_BUMP=true
fi
else
echo "No source files changed"
# Update checksum even if we don't bump version, but only if not on default branch
echo "No relevant source files changed"
SHOULD_BUMP=false
# Update checksum without version bump for PRs
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "$NEW_CHECKSUM" > .checksum
if [ -n "$(git status --porcelain .checksum)" ]; then
Expand All @@ -319,90 +353,121 @@ jobs:
git push origin HEAD
fi
fi
SHOULD_BUMP=false
fi
fi

# If changes detected, bump version and create PR
if [ "$SHOULD_BUMP" = true ]; then
# Version bump logic and PR creation
NEW_VERSION=$(echo "$CURRENT_VERSION" | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g')
echo "Meaningful changes detected, bumping version to: $NEW_VERSION"
# Enhanced version bump logic with validation
if [[ "$CURRENT_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
NEW_VERSION=$(echo "$CURRENT_VERSION" | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g')
echo "πŸ“ˆ Bumping version: $CURRENT_VERSION β†’ $NEW_VERSION"
else
echo "⚠️ Invalid version format: $CURRENT_VERSION"
echo "Using default increment..."
NEW_VERSION="0.0.1"
fi

sed -i "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" package.json
# Safely update package.json
if ! sed -i "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" package.json; then
echo "❌ Failed to update version in package.json"
exit 1
fi

# Update checksum with verification
echo "$NEW_CHECKSUM" > .checksum
if [ "$(cat .checksum)" != "$NEW_CHECKSUM" ]; then
echo "❌ Checksum verification failed"
exit 1
fi

# Create branch with retry mechanism
BRANCH_NAME="bump-${package}-${NEW_VERSION}"
git checkout -b "$BRANCH_NAME"
MAX_RETRIES=3
RETRY_COUNT=0

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
if git checkout -b "$BRANCH_NAME" 2>/dev/null; then
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
echo "⚠️ Branch creation failed, attempt $RETRY_COUNT of $MAX_RETRIES"
sleep 2
else
echo "❌ Failed to create branch after $MAX_RETRIES attempts"
exit 1
fi
done

# Stage and commit changes
git add package.json .checksum
git commit -m "chore(@tutur3u/${package}): bump version to ${NEW_VERSION}"
git push origin "$BRANCH_NAME"

# Create PR with enhanced description
PR_BODY="## πŸ“¦ Automated Version Bump<br /><br />"

if [ -n "$OLD_CHECKSUM" ]; then
if [ "$OLD_CHECKSUM" = "$NEW_CHECKSUM" ]; then
PR_BODY="${PR_BODY}> βœ… **Status:** No changes in package content<br /><br />"
else
PR_BODY="${PR_BODY}> πŸ”„ **Status:** Package content modified<br /><br />"
fi
else
PR_BODY="${PR_BODY}> πŸ†• **Status:** New package<br /><br />"
# Push with error handling
if ! git push origin "$BRANCH_NAME"; then
echo "❌ Failed to push branch"
exit 1
fi

# Add package information summary
SUMMARY="### πŸ“Š Package Information<br />"
SUMMARY="${SUMMARY}<table><tr><th>Detail</th><th>Value</th></tr>"
SUMMARY="${SUMMARY}<tr><td>Package</td><td><code>@tutur3u/${package}</code></tr>"
SUMMARY="${SUMMARY}<tr><td>Current Version</td><td><code>${CURRENT_VERSION}</code></tr>"
SUMMARY="${SUMMARY}<tr><td>New Version</td><td><code>${NEW_VERSION}</code></tr>"
SUMMARY="${SUMMARY}</table><br />"
# Enhanced PR description
PR_BODY="## πŸ“¦ Automated Version Bump

PR_BODY="${PR_BODY}${SUMMARY}"
### Overview
- πŸ“ Package: \`@tutur3u/${package}\`
- πŸ”„ Version: \`${CURRENT_VERSION}\` β†’ \`${NEW_VERSION}\`
- πŸ•’ Updated: $(date -u +"%Y-%m-%d %H:%M UTC")

# Add changed files section
if [ -n "$SOURCE_FILES_CHANGED" ]; then
PR_BODY="${PR_BODY}### πŸ“ Changed Files<br />"
PR_BODY="${PR_BODY}<details open><summary>Modified files in this update</summary><br />"
while IFS= read -r file; do
if [ -n "$file" ]; then
cleaned_path=$(echo "$file" | sed "s|packages/$package/||g")
PR_BODY="${PR_BODY}β€’ \`$cleaned_path\`<br />"
fi
done <<< "$SOURCE_FILES_CHANGED"
PR_BODY="${PR_BODY}</details><br />"
fi
### Changes
<details open>
<summary>Modified Files</summary>

# Add checksum information
PR_BODY="${PR_BODY}### πŸ” Package Integrity<br />"
PR_BODY="${PR_BODY}<details><summary>View checksums</summary><br />"
PR_BODY="${PR_BODY}**New Checksum:**<br />\`\`\`<br />$NEW_CHECKSUM<br />\`\`\`<br /><br />"
\`\`\`diff"

if [ -n "$OLD_CHECKSUM" ]; then
PR_BODY="${PR_BODY}**Previous Checksum:**<br />\`\`\`<br />$OLD_CHECKSUM<br />\`\`\`<br />"
if [ "$OLD_CHECKSUM" = "$NEW_CHECKSUM" ]; then
PR_BODY="${PR_BODY}<br />βœ… Checksums match exactly<br />"
else
PR_BODY="${PR_BODY}<br />⚠️ Checksums differ<br />"
while IFS= read -r file; do
if [ -n "$file" ]; then
PR_BODY="${PR_BODY}
+ ${file}"
fi
else
PR_BODY="${PR_BODY}> πŸ“ No previous checksum available - new package or first tracking<br />"
fi
PR_BODY="${PR_BODY}</details>"
done <<< "$SOURCE_FILES_CHANGED"

PR_BODY="${PR_BODY}
\`\`\`
</details>

### Integrity Check
<details>
<summary>Checksums</summary>

\`\`\`
Previous: ${OLD_CHECKSUM:-N/A}
Current: ${NEW_CHECKSUM}
\`\`\`
</details>

# Create PR
gh pr create \
___
> πŸ€– This PR was automatically generated by the version bump workflow.
> Please review the changes before merging."

# Create PR with enhanced error handling
if ! gh pr create \
--title "chore(@tutur3u/${package}): bump version to ${NEW_VERSION}" \
--body "$PR_BODY" \
--base "${GITHUB_BASE_REF:-main}" \
--head "$BRANCH_NAME" \
--repo "$GITHUB_REPOSITORY" || {
echo "Failed to create PR for $BRANCH_NAME. This may be because a PR already exists."
}
--repo "$GITHUB_REPOSITORY" 2>/dev/null; then

# Check if PR already exists
EXISTING_PR=$(gh pr list --head "$BRANCH_NAME" --json number --jq '.[0].number')
if [ -n "$EXISTING_PR" ]; then
echo "ℹ️ PR already exists (#$EXISTING_PR)"
else
echo "❌ Failed to create PR"
exit 1
fi
fi
else
echo "No meaningful source file changes detected, skipping version bump"
echo "ℹ️ No version bump needed"
fi
fi

Expand Down
2 changes: 1 addition & 1 deletion packages/supabase/.checksum
Original file line number Diff line number Diff line change
@@ -1 +1 @@
bc9ff7c34b97903033b4f7c841fd9dc3535157330f0d799cbb6bc2cc28df7d5d
9cbf3632188207267fbc27ba24f7b07ce9f26f1887aad1871a089f5ea10d9d30
2 changes: 1 addition & 1 deletion packages/supabase/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@tutur3u/supabase",
"license": "MIT",
"version": "0.0.5",
"version": "0.0.8",
"publishConfig": {
"access": "public"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/types/.checksum
Original file line number Diff line number Diff line change
@@ -1 +1 @@
923117d60c2cbfe0f6efd185056f81cf9777e2be4aba7ed82cfb87680db9c2d1
4dd90552007cb4ed77906f9b79c2fe95752782fac6e16b353b63f02edeb60d8f
2 changes: 1 addition & 1 deletion packages/types/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@tutur3u/types",
"license": "MIT",
"version": "0.1.4",
"version": "0.1.6",
"publishConfig": {
"access": "public"
},
Expand Down