|
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