Build and Release with Semantic Version #37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release with Semantic Version | |
| on: | |
| push: | |
| branches: | |
| - dev | |
| - main | |
| jobs: | |
| build-and-release: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # ------------------------------------------------ | |
| # 1. Клонуємо репозиторій | |
| # ------------------------------------------------ | |
| - name: Checkout | |
| uses: actions/checkout@v3 | |
| # ------------------------------------------------ | |
| # 2. Встановлюємо Java (для Gradle) | |
| # ------------------------------------------------ | |
| - name: Set up JDK | |
| uses: actions/setup-java@v3 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| # ------------------------------------------------ | |
| # 3. Semantic Versioning (PaulHatch/semantic-version) | |
| # ------------------------------------------------ | |
| - name: Determine Version | |
| id: version | |
| uses: PaulHatch/[email protected] | |
| with: | |
| tag_prefix: v | |
| major_pattern: /BREAKING CHANGE|feat!/ | |
| minor_pattern: /feat:/ | |
| default_version: '0.1.0' | |
| search_commit_body: false | |
| bump_version: true # Автоматичне збільшення версії | |
| # ------------------------------------------------ | |
| # 4. Формуємо тег і назву JAR (BirthDay-%version%) | |
| # залежно від гілки (dev => -dev) | |
| # ------------------------------------------------ | |
| - name: Prepare Tag Variables | |
| id: prepare_tag | |
| run: | | |
| BRANCH_NAME="${GITHUB_REF_NAME}" # "dev" або "main" | |
| RAW_VERSION="${{ steps.version.outputs.version }}" # Напр.: "1.2.3" | |
| TAG_PREFIX="v" # Префікс для тегу, який визначили вище. | |
| if [ "$BRANCH_NAME" = "dev" ]; then | |
| # Пререліз для dev | |
| NEW_TAG="${TAG_PREFIX}${RAW_VERSION}-dev" | |
| IS_PRERELEASE="true" | |
| # Наприклад, BirthDay-1.2.3-dev.jar | |
| JAR_NAME="BirthDay-${RAW_VERSION}-dev.jar" | |
| RELEASE_NAME="Dev Release BirthDay ${RAW_VERSION}" | |
| else | |
| # Стабільна версія (main) | |
| NEW_TAG="${TAG_PREFIX}${RAW_VERSION}" | |
| IS_PRERELEASE="false" | |
| # Наприклад, BirthDay-1.2.3.jar | |
| JAR_NAME="BirthDay-${RAW_VERSION}.jar" | |
| RELEASE_NAME="Release BirthDay ${RAW_VERSION}" | |
| fi | |
| echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT | |
| echo "is_prerelease=$IS_PRERELEASE" >> $GITHUB_OUTPUT | |
| echo "jar_name=$JAR_NAME" >> $GITHUB_OUTPUT | |
| echo "release_name=$RELEASE_NAME" >> $GITHUB_OUTPUT | |
| # ------------------------------------------------ | |
| # 5. Збираємо проєкт (Gradle) | |
| # ------------------------------------------------ | |
| - name: Build with Gradle | |
| run: ./gradlew shadowJar | |
| # ------------------------------------------------ | |
| # 6. Перейменовуємо JAR (замість my-plugin => BirthDay) | |
| # ------------------------------------------------ | |
| - name: Rename JAR | |
| run: | | |
| FILE=$(find build/libs -name '*.jar' | head -n 1) | |
| if [ -z "$FILE" ]; then | |
| echo "No JAR file found!" | |
| exit 1 | |
| fi | |
| mv "$FILE" "build/libs/${{ steps.prepare_tag.outputs.jar_name }}" | |
| echo "Renamed to ${{ steps.prepare_tag.outputs.jar_name }}" | |
| # ------------------------------------------------ | |
| # 7. (Необов'язково) Створюємо та пушимо новий тег | |
| # ------------------------------------------------ | |
| - name: Create and Push Tag | |
| run: | | |
| NEW_TAG="${{ steps.prepare_tag.outputs.new_tag }}" | |
| echo "Creating and pushing tag: $NEW_TAG" | |
| git config user.name "github-actions" | |
| git config user.email "[email protected]" | |
| git tag "$NEW_TAG" -m "Auto-bumped to $NEW_TAG" | |
| git push origin "$NEW_TAG" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # ------------------------------------------------ | |
| # 8. Створюємо GitHub Release | |
| # ------------------------------------------------ | |
| - name: Create GitHub Release | |
| id: create_release | |
| uses: actions/create-release@v1 | |
| with: | |
| tag_name: ${{ steps.prepare_tag.outputs.new_tag }} | |
| release_name: ${{ steps.prepare_tag.outputs.release_name }} | |
| body: | | |
| **Автоматичний реліз** з гілки `${{ github.ref_name }}` | |
| Версія: `${{ steps.version.outputs.version }}` | |
| (за версією semantic-version): `${{ steps.version.outputs.version_type }}` | |
| JAR: `${{ steps.prepare_tag.outputs.jar_name }}` | |
| draft: false | |
| prerelease: ${{ steps.prepare_tag.outputs.is_prerelease }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # ------------------------------------------------ | |
| # 9. Завантажуємо JAR у реліз | |
| # ------------------------------------------------ | |
| - name: Upload Plugin JAR | |
| uses: actions/upload-release-asset@v1 | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: build/libs/${{ steps.prepare_tag.outputs.jar_name }} | |
| asset_name: ${{ steps.prepare_tag.outputs.jar_name }} | |
| asset_content_type: application/java-archive | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |