|
9 | 9 | jobs:
|
10 | 10 | release:
|
11 | 11 | if: github.event.pull_request.merged == true
|
12 |
| - runs-on: ubuntu-latest |
| 12 | + runs-on: comcast-ubuntu-latest |
13 | 13 |
|
14 | 14 | steps:
|
15 | 15 | - name: Checkout repository
|
@@ -47,28 +47,37 @@ jobs:
|
47 | 47 | echo "git config completed"
|
48 | 48 | # Extract version from PR description
|
49 | 49 | PR_DESC="${{ github.event.pull_request.body }}"
|
50 |
| - |
51 |
| - VERSION_FROM_PR=$(echo "$PR_DESC" | grep -oiP 'version\s*:\s*\K[0-9]+\.[0-9]+\.[0-9]+(?=)' || true) |
52 |
| - |
53 |
| - echo "Extracted version from PR: $VERSION_FROM_PR" |
54 |
| -
|
55 | 50 | # Get top tag from CHANGELOG.md
|
56 | 51 | TOP_TAG=$(grep -m 1 -oP '^#### \[\K[^\]]+' CHANGELOG.md)
|
57 |
| - if [[ -z "$VERSION_FROM_PR" ]]; then |
58 |
| - echo "Version not found in PR description" |
59 |
| - exit 1 |
60 |
| - fi |
61 | 52 | if [[ -z "$TOP_TAG" ]]; then
|
62 | 53 | echo "No version found in CHANGELOG.md!"
|
63 | 54 | exit 1
|
64 | 55 | fi
|
65 |
| - # Compare PR version and top tag |
66 |
| - if [[ "$VERSION_FROM_PR" == "$TOP_TAG" || $(printf '%s\n%s' "$VERSION_FROM_PR" "$TOP_TAG" | sort -V | head -n1) != "$TOP_TAG" ]]; then |
67 |
| - echo "Invalid version provided" |
| 56 | + # Validate TOP_TAG format (semantic versioning: major.minor.patch) |
| 57 | + if [[ ! "$TOP_TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| 58 | + echo "Invalid version format in CHANGELOG.md: $TOP_TAG. Expected format: major.minor.patch" |
68 | 59 | exit 1
|
69 | 60 | fi
|
70 |
| - RELEASE_VERSION="$VERSION_FROM_PR" |
71 |
| - echo "Using version from PR description: $RELEASE_VERSION" |
| 61 | + IFS='.' read -r major minor patch <<< "$TOP_TAG" |
| 62 | + VERSION_TYPE=$(echo "$PR_DESC" | grep -oiP 'version\s*:\s*\K(major|minor|patch)' | tr '[:upper:]' '[:lower:]') |
| 63 | + if [[ -z "$VERSION_TYPE" ]]; then |
| 64 | + echo "No version type found in PR description, defaulting to PATCH increment." |
| 65 | + patch=$((patch + 1)) |
| 66 | + elif [[ "$VERSION_TYPE" == "major" ]]; then |
| 67 | + major=$((major + 1)) |
| 68 | + minor=0 |
| 69 | + patch=0 |
| 70 | + elif [[ "$VERSION_TYPE" == "minor" ]]; then |
| 71 | + minor=$((minor + 1)) |
| 72 | + patch=0 |
| 73 | + elif [[ "$VERSION_TYPE" == "patch" ]]; then |
| 74 | + patch=$((patch + 1)) |
| 75 | + else |
| 76 | + echo "Invalid version type in PR description: $VERSION_TYPE" |
| 77 | + exit 1 |
| 78 | + fi |
| 79 | + RELEASE_VERSION="$major.$minor.$patch" |
| 80 | + echo "Using calculated version: $RELEASE_VERSION" |
72 | 81 | echo "RELEASE_VERSION=$RELEASE_VERSION"
|
73 | 82 | echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
|
74 | 83 | # Check if tag already exists
|
|
81 | 90 | git add CHANGELOG.md
|
82 | 91 | git commit -m "$RELEASE_VERSION release changelog updates"
|
83 | 92 | git flow release publish
|
| 93 | +
|
84 | 94 | - name: Finish release and push (default git-flow messages)
|
85 | 95 | run: |
|
86 | 96 | set -e
|
|
89 | 99 | git push origin main
|
90 | 100 | git push origin --tags
|
91 | 101 | git push origin develop
|
| 102 | + |
92 | 103 | - name: Cleanup tag if workflow fails
|
93 | 104 | if: failure()
|
94 | 105 | run: |
|
|
0 commit comments