55 branches :
66 - dev
77 - release
8+ pull_request :
9+ branches :
10+ - dev
11+ - release
812
913permissions :
1014 contents : write
1115
1216jobs :
1317
18+ validate-pr :
19+ if : github.event_name == 'pull_request'
20+ runs-on : ubuntu-latest
21+ steps :
22+ - name : Validate PR rules
23+ run : |
24+ base="${{ github.event.pull_request.base.ref }}"
25+ head="${{ github.event.pull_request.head.ref }}"
26+
27+ echo "Checking PR: $head → $base"
28+
29+ # ✅ У release можна тільки з dev
30+ if [[ "$base" == "release" && "$head" != "dev" ]]; then
31+ echo "❌ Only 'dev' can be merged into 'release'."
32+ exit 1
33+ fi
34+
35+ # ✅ У dev можна з будь-якої гілки
36+ if [[ "$base" == "dev" ]]; then
37+ echo "✅ Allowed: any → dev"
38+ exit 0
39+ fi
40+
41+ # ❌ Все інше заборонено
42+ echo "❌ Pull requests allowed only into 'dev' (or dev → release)."
43+ exit 1
44+
1445 build :
46+ if : github.event_name == 'push'
1547 runs-on : ubuntu-latest
1648 outputs :
1749 new_version : ${{ steps.bump_version.outputs.new }}
1850 steps :
1951 - uses : actions/checkout@v4
2052 with :
2153 fetch-depth : 0
54+
55+ # 🚫 Перевірка пушів у release (дозволяється тільки merge з dev)
56+ - name : Validate push rules
57+ run : |
58+ BRANCH="${GITHUB_REF##*/}"
59+ if [ "$BRANCH" == "release" ]; then
60+ COMMIT_MSG=$(git log -1 --pretty=%B)
61+ if [[ ! "$COMMIT_MSG" =~ "Merge pull request" ]]; then
62+ echo "❌ Direct pushes to release are not allowed. Only PR merges from dev."
63+ exit 1
64+ fi
65+ fi
66+ echo "✅ Push validation passed."
67+
2268 - name : Set up JDK
2369 uses : actions/setup-java@v4
2470 with :
2571 distribution : temurin
2672 java-version : 17
73+
2774 - name : Determine Version
2875 id : bump_version
2976 run : |
4794 MAJOR=0; MINOR=0; PATCH=0
4895 fi
4996 echo "Parsed version: $MAJOR.$MINOR.$PATCH"
50- # Беремо коміти після тегу, якщо тег є
97+ # Беремо коміти після тегу
5198 if [ -n "$LAST_TAG" ]; then
5299 COMMITS=$(git log "$LAST_TAG"..HEAD --pretty=format:"%s")
53100 else
@@ -64,21 +111,15 @@ jobs:
64111 # Збільшуємо версію
65112 case $BUMP in
66113 major)
67- MAJOR=$((MAJOR+1))
68- MINOR=0
69- PATCH=0
70- ;;
114+ MAJOR=$((MAJOR+1)); MINOR=0; PATCH=0 ;;
71115 minor)
72- MINOR=$((MINOR+1))
73- PATCH=0
74- ;;
116+ MINOR=$((MINOR+1)); PATCH=0 ;;
75117 patch)
76- PATCH=$((PATCH+1))
77- ;;
118+ PATCH=$((PATCH+1)) ;;
78119 esac
79120
80121 NEW_VERSION="$MAJOR.$MINOR.$PATCH"
81- # Для dev додаємо pre-release лічильник
122+ # Для dev додаємо pre-release
82123 if [ "$BRANCH_NAME" == "dev" ]; then
83124 COUNT=$(git tag --list "v${NEW_VERSION}-dev.*" | wc -l | xargs)
84125 COUNT=${COUNT:-0}
@@ -90,8 +131,10 @@ jobs:
90131
91132 - name : Grant execute permission for gradlew
92133 run : chmod +x gradlew
134+
93135 - name : Build with Gradle
94136 run : ./gradlew build
137+
95138 - name : Rename JAR with repo name and version
96139 run : |
97140 VERSION="${{ steps.bump_version.outputs.new }}"
@@ -104,6 +147,7 @@ jobs:
104147 NEW_JAR_NAME="${REPO_NAME}_v${VERSION}.jar"
105148 echo "Renaming $JAR_PATH -> $NEW_JAR_NAME"
106149 mv "$JAR_PATH" "build/libs/$NEW_JAR_NAME"
150+
107151 - name : Upload artifact
108152 uses : actions/upload-artifact@v4
109153 with :
0 commit comments