0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Chi Tiết: Cách Sử Dụng Maven Publish và GitHub Actions Để Đưa Thư Viện Kotlin Multiplatform Lên GitHub Packages

Đăng vào 1 tuần trước

• 6 phút đọc

Giới Thiệu

Chào mừng bạn đến với hướng dẫn chi tiết về việc đưa thư viện Kotlin Multiplatform lên GitHub Packages. Nếu bạn đã từng cảm thấy bối rối với quá trình này, đừng lo lắng! Chúng ta sẽ cùng nhau khám phá từng bước trong hướng dẫn này để bạn có thể thực hiện một cách dễ dàng.

Bước 1: Thêm Plugin maven-publish

Để bắt đầu, trước tiên bạn cần thêm plugin maven-publish vào file build.gradle.kts của module mà bạn muốn publish. Việc này giống như việc thêm một chút gia vị vào món ăn, giúp nó trở nên hoàn hảo hơn:

kotlin Copy
plugins {
    // Các plugin khác
    id("maven-publish")
}

Bước 2: Cấu Hình Publishing Trong build.gradle.kts

Sau khi thêm plugin, chúng ta sẽ cấu hình phần publishing trong file build.gradle.kts. Đoạn code này sẽ đảm bảo rằng mọi thứ đã sẵn sàng để xuất bản thư viện:

kotlin Copy
publishing {
    repositories {
        maven {
            url = uri("<package-url>")
            credentials {
                username = findProperty("gpr.user") as String?
                    ?: System.getenv("USERNAME_GITHUB")
                password = findProperty("gpr.token") as String?
                    ?: System.getenv("TOKEN_GITHUB")
            }
        }
    }
    publications.withType<MavenPublication>().forEach { publication ->
        val targetName = publication.name.substringAfterLast(":")
        val artifactId = if (targetName == "kotlinMultiplatform") {
            "<artifact-id>"
        } else {
            "<artifact-id>-$targetName".lowercase()
        }
        publication.groupId = "<group-id>"
        publication.artifactId = artifactId
        publication.pom {
            name.set(rootProject.name)
            description.set(findProperty("publicationDescriptionLibrary") as String)
            url.set(findProperty("publicationUrl") as String)

            licenses {
                license {
                    name.set(findProperty("publicationLicenseName") as String)
                    url.set(findProperty("publicationLicenseUrl") as String)
                }
            }

            scm {
                url.set(findProperty("publicationScmUrl") as String)
                connection.set(findProperty("publicationScmConnection") as String)
                developerConnection.set(findProperty("publicationScmDeveloperConnection") as String)
            }

            developers {
                developer {
                    id.set(findProperty("publicationDeveloperId") as String)
                    name.set(findProperty("publicationDeveloperName") as String)
                }
            }
        }
    }
}

Giải Thích Chi Tiết

  • Repositories: Đây là nơi bạn định nghĩa repository mà bạn sẽ publish thư viện. Thông tin đăng nhập được lấy từ biến môi trường hoặc các thuộc tính được chỉ định trong project.
  • Publications: Chúng ta sẽ duyệt qua tất cả các publication và cấu hình chúng theo từng target mà bạn đã định nghĩa.
  • Publication POM: Nơi bạn cấu hình các thông tin như tên, mô tả, và thông tin về license cũng như thông tin về phát triển.

Bước 3: Thiết Lập File publish.yml Để Publish Lên GitHub Packages

Cuối cùng, chúng ta sẽ thiết lập file publish.yml để sử dụng GitHub Actions và publish thư viện của bạn lên GitHub Packages:

yaml Copy
name: Publish Package

on:
  push:
    tags: [ 'v*' ]

env:
  JAVA_VERSION: '17'
  GRADLE_CACHE_PATH: |
    ~/.gradle/caches
    ~/.gradle/wrapper
  USERNAME_GITHUB: ${{ github.actor }}
  TOKEN_GITHUB: ${{ secrets.GITHUB_TOKEN }}

jobs:
  publish:
    name: Publish Package
    runs-on: macos-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4

      - name: Cache Gradle packages
        uses: actions/cache@v3
        with:
          path: ${{ env.GRADLE_CACHE_PATH }}
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: ${{ runner.os }}-gradle-

      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          java-version: ${{ env.JAVA_VERSION }}
          distribution: 'temurin'
          cache: gradle

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew

      - name: Publish package
        run: ./gradlew publish

Giải Thích Chi Tiết

  • Kích hoạt Workflow: Khi có tag mới bắt đầu bằng v, workflow sẽ được kích hoạt để thực hiện publish.
  • Biến môi trường: Định nghĩa các biến cần thiết cho tiến trình publish như phiên bản Java và thông tin đăng nhập GitHub.
  • Jobs: Định nghĩa quy trình các bước thực hiện publish thư viện lên GitHub Packages.

Quy Trình Phát Hành Phiên Bản Mới

Để phát hành phiên bản mới cho dự án của bạn, hãy thực hiện các bước sau:

Các Bước Phát Hành

  1. Tạo Nhánh Phát Hành: Tạo một nhánh mới từ main (hoặc nhánh mặc định) có tên releases/vX.X.X.

    bash Copy

git checkout main
git pull origin main
git checkout -b releases/vX.X.X

Copy
2. **Cập Nhật Phiên Bản** và **Changelog**: Đảm bảo cập nhật số phiên bản trong thư viện cũng như file `CHANGELOG.md` để phản ánh các thay đổi.

3. **Push Nhánh Phát Hành**: Đẩy nhánh phát hành mới lên repository từ xa.

    ```bash
git push origin releases/vX.X.X
  1. Tạo Tag Phát Hành: Khi nhánh đã được push và CI đã thành công, tạo tag cho phiên bản mới.

    bash Copy

git tag vX.X.X

Copy
5. **Push Tag**: Đẩy tag mới lên repository từ xa.

    ```bash
git push origin vX.X.X
  1. Kích Hoạt CI: Nếu pipeline CI/CD không tự động kích hoạt, hãy kích hoạt thủ công để build, test, và deploy.

Kết Luận

Chúc mừng bạn đã hoàn thành hướng dẫn này! Giờ đây, bạn có thể tự tin publish thư viện Kotlin Multiplatform của mình lên GitHub Packages. Hãy trải nghiệm và chia sẻ kết quả với cộng đồng. Nếu có bất cứ câu hỏi nào, đừng ngần ngại để lại ý kiến của bạn. Tôi luôn sẵn sàng hỗ trợ bạn!

Chúc bạn lập trình vui vẻ! 🚀
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào