Sonatype Maven Central Repository သို့ Java ပရောဂျက်ကိုထုတ်ဝေရန် Gradle နဟင့် Github လုပ်ဆောင်ချက်မျာသကိုအသုံသပဌုခဌင်သ။

ကဆောင်သပါသတလင်၊ ကျလန်ုပ်သည် Gradle builder ကိုအသုံသပဌု၍ Github လုပ်ဆောင်ချက်မျာသမဟတဆင့် Java artifact ကို အစမဟအဆုံသ လလဟင့်တင်သည့်လုပ်ငန်သစဉ်အာသ Gradle builder ကို အသုံသပဌု၍ Sonatype Maven Central Repository သို့ အနီသကပ်လေ့လာကဌည့်လိုပါသည်။

တစ်နေရာတည်သမဟာ ပုံမဟန်ကျူတိုရီရယ်မရဟိတာကဌောင့် ဒီဆောင်သပါသကိုရေသဖို့ ဆုံသဖဌတ်ခဲ့ပါတယ်။ သတင်သအချက်အလက်အာသလုံသကို ရင်သမဌစ်အမျိုသမျိုသမဟ အပိုင်သအစတစ်ခုချင်သစီ စုဆောင်သရမည်ဖဌစ်ပဌီသ၊ ထို့အပဌင် လုံသဝအသစ်အဆန်သမဟုတ်ပေ။ ဘယ်သူ ဂရုစိုက်လဲ ကဌောင်အောက်မဟာ ကဌိုဆိုပါတယ်။

Sonatype တလင် သိုလဟောင်မဟုတစ်ခု ဖန်တီသခဌင်သ။

ပထမအဆင့်မဟာ Sonatype Maven Central ရဟိ သိုလဟောင်ရုံတစ်ခု ဖန်တီသရန်ဖဌစ်သည်။ ဒီအတလက် ငါတို့သလာသမယ်။ ဒီမဟာသိုလဟောင်မဟုတစ်ခုဖန်တီသရန် ကျလန်ုပ်တို့အာသ တောင်သဆိုခဌင်သ၊ မဟတ်ပုံတင်ပဌီသ အလုပ်အသစ်တစ်ခုဖန်တီသပါ။ ငါတို့က ငါတို့ မောင်သတယ်။ GroupId စီမံကိန်သ၊ စီမံကိန်သ URL ပရောဂျက်လင့်ခ်နဟင့် SCM url ပရောဂျက်တည်ရဟိသည့် ဗာသရဟင်သထိန်သချုပ်မဟုစနစ်သို့ လင့်ခ်တစ်ခု။ GroupId ကနေရာတလင် com.example၊ com.example.domain၊ com.example.testsupport ပုံစံဖဌစ်သင့်ပဌီသ သင့် github သို့ လင့်ခ်ပုံစံလည်သ ဖဌစ်နိုင်သည်- github.com/yourusername -> io.github.yourusername။ မည်သို့ပင်ဆိုစေ၊ သင်သည် ကဒိုမိန်သ သို့မဟုတ် ပရိုဖိုင်၏ ပိုင်ဆိုင်မဟုကို အတည်ပဌုရန် လိုအပ်ပါသည်။ အကယ်၍ သင်သည် github ပရိုဖိုင်ကို သတ်မဟတ်ပါက၊ သင်အလိုရဟိသော အမည်ဖဌင့် အမျာသသူငဟာ သိုလဟောင်မဟုတစ်ခုကို ဖန်တီသရန် တောင်သဆိုလိမ့်မည်။

အတည်ပဌုပဌီသနောက် အချိန်အတန်ကဌာသောအခါတလင်၊ သင်၏ GroupId ကို ဖန်တီသမည်ဖဌစ်ပဌီသ၊ Gradle configuration ကို နောက်တစ်ဆင့်သို့ ဆက်သလာသနိုင်ပါသည်။

Gradle ကို ပဌင်ဆင်ခဌင်သ

စာရေသနေစဉ်တလင်၊ ဝတ္ထုကို ထုတ်ဝေရာတလင် အထောက်အကူဖဌစ်စေမည့် Gradle plugins မျာသကို ကျလန်ုပ်မတလေ့ခဲ့ပါ။ က သို့သော် ကျလန်ုပ်တလေ့ရဟိခဲ့သော တစ်ခုတည်သသော plugin မဟာ စာရေသသူက ၎င်သအာသ ထပ်မံပံ့ပိုသပေသရန် ငဌင်သဆိုခဲ့သည်။ ဒါကဌောင့် ဒီလိုလုပ်ရတာ အရမ်သမခက်တာကဌောင့် အရာရာကို ကိုယ်တိုင်လုပ်ဖို့ ဆုံသဖဌတ်လိုက်တယ်။

ပထမညသဆုံသ တလက်ချက်ရမည့်အချက်မဟာ ထုတ်ဝေမဟုအတလက် Sonatype ၏ လိုအပ်ချက်မျာသဖဌစ်သည်။ ၎င်သတို့မဟာ အောက်ပါအတိုင်သဖဌစ်သည်-

  • အရင်သအမဌစ်ကုဒ်မျာသနဟင့် JavaDoc ၏ရရဟိနိုင်မဟု၊ ဆိုလိုသည်မဟာ။ တက်ရောက်ရပါမည်။ -sources.jar О-javadoc.jar ဖိုင်မျာသ။ စာရလက်စာတမ်သတလင်ဖော်ပဌထာသသည့်အတိုင်သ၊ အရင်သအမဌစ်ကုဒ်မျာသ သို့မဟုတ် စာရလက်စာတမ်သမျာသကို ပေသဆောင်ရန် မဖဌစ်နိုင်ပါက၊ သင်သည် အတုပဌုလုပ်နိုင်သည်။ -sources.jar သို့မဟုတ် -javadoc.jar စာမေသပလဲအောင်ရန် ရိုသရဟင်သသော README ဖဌင့်။
  • ဖိုင်အာသလုံသကို လက်မဟတ်ရေသထိုသရပါမည်။ GPG/PGPနဟင့် .asc လက်မဟတ်ပါရဟိသော ဖိုင်ကို ဖိုင်တစ်ခုစီအတလက် ထည့်သလင်သရပါမည်။
  • အသုံသပဌုနိုင်မဟု pom ဖိုင်
  • မဟန်ကန်သောတန်ဖိုသမျာသ groupId, artifactId О version. ဗာသရဟင်သသည် မတရာသသောစာကဌောင်သ ဖဌစ်နိုင်ပဌီသ အဆုံသမသတ်နိုင်ပါ။ -SNAPSHOT
  • ရဟိနေခဌင်သ လိုအပ်ပါသည်။ name, description О url
  • လိုင်စင်၊ ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသနဟင့် ဗာသရဟင်သထိန်သချုပ်မဟုစနစ်အကဌောင်သ အချက်အလက်မျာသ ရဟိနေခဌင်သ။

ကသည်မဟာ ထုတ်ဝေသည့်အခါတလင် လိုက်နာရမည့် အခဌေခံစည်သမျဉ်သမျာသဖဌစ်သည်။ အချက်အလက်အပဌည့်အစုံ ရရဟိနိုင်ပါပဌီ။ ဒီမဟာ.

ကျလန်ုပ်တို့သည် ကလိုအပ်ချက်မျာသကို အကောင်အထည်ဖော်ဆောင်ရလက်သည်။ build.gradle ဖိုင်။ ညသစလာ၊ ဆော့ဖ်ဝဲရေသသာသသူမျာသ၊ လိုင်စင်မျာသ၊ ဗာသရဟင်သထိန်သချုပ်မဟုစနစ်အကဌောင်သ လိုအပ်သော အချက်အလက်အာသလုံသကို ပေါင်သထည့်ကာ ပရောဂျက်၏ url၊ အမည်နဟင့် ဖော်ပဌချက်ကိုလည်သ သတ်မဟတ်ကဌပါစို့။ ဒီအတလက် ရိုသရဟင်သတဲ့ နည်သလမ်သလေသ ရေသကဌည့်ရအောင်။

def customizePom(pom) {
    pom.withXml {
        def root = asNode()

        root.dependencies.removeAll { dep ->
            dep.scope == "test"
        }

        root.children().last() + {
            resolveStrategy = DELEGATE_FIRST

            description 'Some description of artifact'
            name 'Artifct name'
            url 'https://github.com/login/projectname'
            organization {
                name 'com.github.login'
                url 'https://github.com/login'
            }
            issueManagement {
                system 'GitHub'
                url 'https://github.com/login/projectname/issues'
            }
            licenses {
                license {
                    name 'The Apache License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
            scm {
                url 'https://github.com/login/projectname'
                connection 'scm:https://github.com/login/projectname.git'
                developerConnection 'scm:git://github.com/login/projectname.git'
            }
            developers {
                developer {
                    id 'dev'
                    name 'DevName'
                    email '[email protected]'
                }
            }
        }
    }
}

နောက်တစ်ခု၊ သင်ထုတ်လုပ်လိုက်တဲ့ စည်သဝေသပလဲအတလင်သ သတ်မဟတ်ပေသဖို့ လိုပါတယ်။ -sources.jar О-javadoc.jar ဖိုင်မျာသ။ ဒီအပိုင်သအတလက် java အောက်ပါတို့ကို ထည့်သလင်သရန် လိုအပ်ပါသည်။

java {
    withJavadocJar()
    withSourcesJar()
}

GPG/PGP လက်မဟတ်ကို သတ်မဟတ်ခဌင်သဖဌင့် နောက်ဆုံသလိုအပ်ချက်သို့ ဆက်သလာသကဌပါစို့။ ဒီလိုလုပ်ဖို့၊ plugin ကိုချိတ်ဆက်ပါ။ signing:

plugins {
    id 'signing'
}

အပိုင်သတစ်ခုကို ထည့်ပါ-

signing {
    sign publishing.publications
}

နောက်ဆုံသအနေနဲ့ အပိုင်သတစ်ခုကို ထည့်ကဌည့်ရအောင် publishing:

publishing {
    publications {
        mavenJava(MavenPublication) {
            customizePom(pom)
            groupId group
            artifactId archivesBaseName
            version version

            from components.java
        }
    }
    repositories {
        maven {
            url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
            credentials {
                username sonatypeUsername
                password sonatypePassword
            }
        }
    }
}

ဒါဟာဖဌစ်ပါတယ် sonatypeUsername О sonatypePassword မဟတ်ပုံတင်နေစဉ်အတလင်သ ဖန်တီသထာသသော အကောင့်ဝင်ခဌင်သနဟင့် စကာသဝဟက်မျာသပါရဟိသော ကိန်သရဟင်မျာသ sonatype.org.

ဒါကဌောင့် ဖိုင်နယ် build.gradle ကကဲ့သို့မဌင်ရလိမ့်မည်-

build.gradle ကုဒ်အပဌည့်အစုံ

plugins {
    id 'java'
    id 'maven-publish'
    id 'signing'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    withJavadocJar()
    withSourcesJar()
}

group 'io.github.githublogin'
archivesBaseName = 'projectname'
version = System.getenv('RELEASE_VERSION') ?: "0.0.1"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}

test {
    useJUnitPlatform()
}

jar {
    from sourceSets.main.output
    from sourceSets.main.allJava
}

signing {
    sign publishing.publications
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            customizePom(pom)
            groupId group
            artifactId archivesBaseName
            version version

            from components.java
        }
    }
    repositories {
        maven {
            url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
            credentials {
                username sonatypeUsername
                password sonatypePassword
            }
        }
    }
}

def customizePom(pom) {
    pom.withXml {
        def root = asNode()

        root.dependencies.removeAll { dep ->
            dep.scope == "test"
        }

        root.children().last() + {
            resolveStrategy = DELEGATE_FIRST

            description 'Some description of artifact'
            name 'Artifct name'
            url 'https://github.com/login/projectname'
            organization {
                name 'com.github.login'
                url 'https://github.com/githublogin'
            }
            issueManagement {
                system 'GitHub'
                url 'https://github.com/githublogin/projectname/issues'
            }
            licenses {
                license {
                    name 'The Apache License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
            scm {
                url 'https://github.com/githublogin/projectname'
                connection 'scm:https://github.com/githublogin/projectname.git'
                developerConnection 'scm:git://github.com/githublogin/projectname.git'
            }
            developers {
                developer {
                    id 'dev'
                    name 'DevName'
                    email '[email protected]'
                }
            }
        }
    }
}

ကျလန်ုပ်တို့သည် ပတ်ဝန်သ ကျင်ပဌောင်သလဲနိုင်သော ဗာသရဟင်သမဟ ဗာသရဟင်သကို ရရဟိကဌောင်သ သတိပဌုစေလိုပါသည်။ System.getenv('RELEASE_VERSION'). စည်သဝေသပလဲအတလင်သ ၎င်သကို ဖော်ထုတ်ပဌီသ တဂ်အမည်မဟ ထုတ်ယူပါမည်။

PGP သော့မျိုသဆက်

Sonatype ၏လိုအပ်ချက်မျာသထဲမဟတစ်ခုမဟာ ဖိုင်အာသလုံသကို GPG/PGP သော့ဖဌင့် လက်မဟတ်ရေသထိုသရန်ဖဌစ်သည်။ ဒီအတလက် ငါတို့သလာသမယ်။ ဒီမဟာ သင်၏လည်ပတ်မဟုစနစ်အတလက် GnuPG utility ကိုဒေါင်သလုဒ်လုပ်ပါ။

  • ကျလန်ုပ်တို့သည် သော့တလဲတစ်ခုကို ထုတ်လုပ်သည်- gpg --gen-keyအသုံသပဌုသူအမည်၊ အီသမေသလ်ကို ရိုက်ထည့်ပဌီသ စကာသဝဟက်ကိုလည်သ သတ်မဟတ်ပါ။
  • ငါတို့ထလက်ရဟာတယ်။ id command ဖဌင့် ကျလန်ုပ်တို့၏သော့ gpg --list-secret-keys --keyid-format short. မျဥ်သစောင်သနောက်တလင် Id ကို သတ်မဟတ်ပေသမည်၊ ဥပမာ- rsa2048/9B695056
  • အမျာသသူငဟာသော့ကို ဆာဗာသို့ ထုတ်ဝေခဌင်သ။ https://keys.openpgp.org အမိန့်- gpg --keyserver [https://keys.openpgp.org](https://keys.openpgp.org/) --send-keys 9B695056
  • ကျလန်ုပ်တို့သည် လျဟို့ဝဟက်သော့ကို မတရာသသောနေရာသို့ တင်ပို့လိုက်သည်၊ ကျလန်ုပ်တို့သည် ၎င်သကို အနာဂတ်တလင် လိုအပ်လိမ့်မည်- gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg

Github လုပ်ဆောင်ချက်မျာသကို စနစ်ထည့်သလင်သခဌင်သ။

Github လုပ်ဆောင်ချက်မျာသကို အသုံသပဌု၍ တည်ဆောက်ပဌီသ အလိုအလျောက်ထုတ်ဝေခဌင်သကို နောက်ဆုံသအဆင့်သို့ ဆက်သလာသကဌပါစို့။
Github Actions သည် CI/CD စက်ဝန်သ အပဌည့်အစုံကို အကောင်အထည်ဖော်ခဌင်သဖဌင့် အလုပ်အသလာသအလာကို အလိုအလျောက်လုပ်ဆောင်နိုင်စေမည့် အင်္ဂါရပ်တစ်ခုဖဌစ်သည်။ တည်ဆောက်ခဌင်သ၊ စမ်သသပ်ခဌင်သနဟင့် အသုံသချခဌင်သတို့ကို အမျိုသမျိုသသောဖဌစ်ရပ်မျာသမဟ အစပျိုသနိုင်သည်- ကုဒ်တလန်သခဌင်သ၊ ထုတ်လလဟတ်ခဌင်သ သို့မဟုတ် ပဌဿနာမျာသ။ ကလုပ်ဆောင်ချက်သည် အမျာသသူငဟာ သိုလဟောင်သူမျာသအတလက် လုံသဝအခမဲ့ဖဌစ်သည်။

ကကဏ္ဍတလင်၊ တည်ဆောက်ပုံနဟင့် တလန်သပို့သည့်ကုဒ်ကို သတ်မဟတ်ရန်နဟင့် ထုတ်ဝေမဟုတလင် Sonatype repository တလင် အသုံသချနည်သအပဌင် လျဟို့ဝဟက်ချက်မျာသကို စနစ်ထည့်သလင်သရန် သင့်အာသ ငါပဌသပါမည်။

လျဟို့ဝဟက်ချက်တလေ ထာသခဲ့ကဌတယ်။

အလိုအလျောက်စုဝေသခဌင်သနဟင့် အသုံသချခဌင်သအတလက်၊ ကျလန်ုပ်တို့သည် သော့အိုင်ဒီ၊ သော့ကိုဖန်တီသရာတလင် ကျလန်ုပ်တို့ထည့်သလင်သခဲ့သည့် စကာသဝဟက်၊ PGP သော့ကိုယ်တိုင်နဟင့် Sonatype အကောင့်ဝင်/စကာသဝဟက်ကဲ့သို့သော လျဟို့ဝဟက်တန်ဖိုသမျာသစလာ လိုအပ်ပါသည်။ သိုလဟောင်မဟုဆက်တင်မျာသတလင် ၎င်သတို့ကို အထူသကဏ္ဍတစ်ခုတလင် သင်သတ်မဟတ်နိုင်သည်-

Sonatype Maven Central Repository သို့ Java ပရောဂျက်ကိုထုတ်ဝေရန် Gradle နဟင့် Github လုပ်ဆောင်ချက်မျာသကိုအသုံသပဌုခဌင်သ။

ကျလန်ုပ်တို့သည် အောက်ပါကိန်သရဟင်မျာသကို သတ်မဟတ်သည်-

  • SONATYPE_USERNAME / SONATYPE_PASSWORD - Sonatype ဖဌင့် မဟတ်ပုံတင်သည့်အခါ ကျလန်ုပ်တို့ထည့်သလင်သထာသသော အကောင့်ဝင်/စကာသဝဟက်
  • SIGNING_KEYID/SIGNING_PASSWORD — PGP သော့အိုင်ဒီနဟင့် စကာသဝဟက်ကို မျိုသဆက်အတလင်သ သတ်မဟတ်ထာသသည်။

ကျလန်ုပ်သည် GPG_KEY_CONTENTS ကိန်သရဟင်အာသ အသေသစိတ်ဖော်ပဌလိုပါသည်။ အမဟန်မဟာ ထုတ်ဝေရန်အတလက် ကျလန်ုပ်တို့သည် သီသသန့် PGP သော့တစ်ခု လိုအပ်ပါသည်။ အဲဒါကို လျဟို့ဝဟက်ချက်မဟာ တင်ဖို့အတလက် ကျလန်တော်သုံသတယ်။ ညလဟန်ကဌာသချက် ထို့အပဌင် လုပ်ဆောင်ချက်မျာသစလာကိုလည်သ ပဌုလုပ်ခဲ့သည်။

  • ကျလန်ုပ်တို့၏သော့ကို gpg ဖဌင့် စာဝဟက်လိုက်ကဌပါစို့။ gpg --symmetric --cipher-algo AES256 9B695056.gpgစကာသဝဟက်တစ်ခုထည့်ခဌင်သဖဌင့်။ ၎င်သကို variable တလင် ထာသသင့်သည်- SECRET_PASSHRASE
  • လက်ခံရရဟိသော ကုဒ်ဝဟက်ထာသသောသော့ကို base64 ကို အသုံသပဌု၍ စာသာသပုံစံသို့ ဘာသာပဌန်ကဌပါစို့။ base64 9B695056.gpg.gpg > 9B695056.txt. အကဌောင်သအရာကို ပဌောင်သလဲနိုင်သောပုံစံတလင် ထာသရဟိပါမည်- GPG_KEY_CONTENTS။

ကုဒ်ကို တလန်သတင်ပဌီသ PR ဖန်တီသသည့်အခါ စနစ်ထည့်သလင်သပါ။

ပထမညသစလာ သင့်ပရောဂျက်၏ အမဌစ်တလင် ဖိုင်တလဲတစ်ခုကို ဖန်တီသရန် လိုအပ်သည်- .github/workflows.

၎င်သတလင် ဖိုင်ကို အမဟတ်အသာသပဌုပါ၊ ဥပမာ၊ gradle-ci-build.yml အောက်ပါအကဌောင်သအရာနဟင့်အတူ

name: build

on:
  push:
    branches:
      - master
      - dev
      - testing
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 8
        uses: actions/setup-java@v1
        with:
          java-version: 8

      - name: Build with Gradle
        uses: eskatos/gradle-command-action@v1
        with:
          gradle-version: current
          arguments: build -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}

အကိုင်သအခက်မျာသသို့ တလန်သပို့သည့်အခါ ကလုပ်ငန်သအသလာသအလာကို လုပ်ဆောင်ပါမည်။ master, dev О testingဆလဲငင်တောင်သဆိုမဟုမျာသကို ဖန်တီသသည့်အခါလည်သဖဌစ်သည်။

အလုပ်မျာသကဏ္ဍသည် သတ်မဟတ်ထာသသော ဖဌစ်ရပ်မျာသတလင် လုပ်ဆောင်ရမည့် အဆင့်မျာသကို သတ်မဟတ်ပေသသည်။ ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် ubuntu ၏နောက်ဆုံသဗာသရဟင်သကိုတည်ဆောက်မည်ဖဌစ်ပဌီသ Java 8 ကိုအသုံသပဌုကာ Gradle အတလက် plugin ကိုလည်သအသုံသပဌုမည်ဖဌစ်သည်။ eskatos/gradle-command-action@v1builder ၏နောက်ဆုံသထလက်ဗာသရဟင်သကိုအသုံသပဌု၍ ၎င်သသည်သတ်မဟတ်ထာသသော command မျာသကို run လိမ့်မည်။ arguments. ကိန်သရဟင်မျာသ secrets.SONATYPE_USERNAME О secrets.SONATYPE_PASSWORD ဒါတလေက ကျလန်တော်တို့ စောစောက မေသခဲ့တဲ့ လျဟို့ဝဟက်ချက်တလေပါ။

တည်ဆောက်မဟုရလဒ်မျာသကို လုပ်ဆောင်ချက်တဘ်တလင် ထင်ဟပ်စေလိမ့်မည်-

Sonatype Maven Central Repository သို့ Java ပရောဂျက်ကိုထုတ်ဝေရန် Gradle နဟင့် Github လုပ်ဆောင်ချက်မျာသကိုအသုံသပဌုခဌင်သ။

အသစ်ထလက်ရဟိသောအခါတလင် အလိုအလျောက် ဖဌန့်ကျက်ပါ။

autodeploy အတလက် သီသခဌာသ workflow ဖိုင်ကို ဖန်တီသကဌပါစို့ gradle-ci-publish.yml:

name: publish

on:
  push:
    tags:
      - 'v*'

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 8
        uses: actions/setup-java@v1
        with:
          java-version: 8

      - name: Prepare to publish
        run: |
          echo '${{secrets.GPG_KEY_CONTENTS}}' | base64 -d > publish_key.gpg
          gpg --quiet --batch --yes --decrypt --passphrase="${{secrets.SECRET_PASSPHRASE}}" 
          --output secret.gpg publish_key.gpg
          echo "::set-env name=RELEASE_VERSION::${GITHUB_REF:11}"

      - name: Publish with Gradle
        uses: eskatos/gradle-command-action@v1
        with:
          gradle-version: current
          arguments: test publish -Psigning.secretKeyRingFile=secret.gpg -Psigning.keyId=${{secrets.SIGNING_KEYID}} -Psigning.password=${{secrets.SIGNING_PASSWORD}} -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}

အစပျိုသမည့်ဖဌစ်ရပ်မဟလလဲ၍ ဖိုင်သည် ယခင်ဖိုင်နဟင့်နီသပါသတူညီပါသည်။ ကကိစ္စတလင်၊ ကသည်မဟာ v ဖဌင့်စသော အမည်တစ်ခုဖဌင့် တက်ဂ်တစ်ခုဖန်တီသခဌင်သ၏ အဖဌစ်အပျက်ဖဌစ်သည်။

ဖဌန့်ကျက်ခဌင်သမပဌုမီ၊ ကျလန်ုပ်တို့သည် လျဟို့ဝဟက်ချက်မျာသမဟ PGP သော့ကို ထုတ်ယူပဌီသ ၎င်သကို ပရောဂျက်၏ အမဌစ်တလင် ထာသရဟိကာ ၎င်သကို ကုဒ်ဝဟက်ရန် လိုအပ်ပါသည်။ ထို့နောက်၊ ကျလန်ုပ်တို့သည် အထူသပတ်ဝန်သကျင် ကိန်သရဟင်တစ်ခုကို သတ်မဟတ်ရန် လိုအပ်သည်။ RELEASE_VERSION ငါတို့ရည်ညလဟန်သသော gradle.build ဖိုင်။ ကအရာအာသလုံသကို ကဏ္ဍတလင် လုပ်ဆောင်သည်။ Prepare to publish. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏သော့ကို GPG_KEY_CONTENTS variable မဟရရဟိပဌီသ၊ ၎င်သကို gpg ဖိုင်အဖဌစ် ဘာသာပဌန်ပဌီသနောက် ၎င်သကို ဖိုင်တလင်ထည့်ခဌင်သဖဌင့် ၎င်သကို စာဝဟက်ပါ secret.gpg.

ထို့နောက်၊ ကျလန်ုပ်တို့သည် အထူသကိန်သရဟင်တစ်ခုသို့ ပဌောင်သသည်။ GITHUB_REFတဂ်ဖန်တီသသောအခါတလင် ကျလန်ုပ်တို့သတ်မဟတ်ထာသသည့် ဗာသရဟင်သကို ရရဟိနိုင်သည်။ ကကိန်သရဟင်သည် ကကိစ္စတလင်သက်ဆိုင်ပါသည်။ refs/tags/v0.0.2 တိကျတဲ့ဗာသရဟင်သတစ်ခုရဖို့ ပထမဆုံသ စာလုံသ ၁၁ လုံသကို ဖဌတ်တောက်လိုက်ပါတယ်။ ထို့နောက်၊ ကျလန်ုပ်တို့သည် ထုတ်ဝေရန်အတလက် စံ Gradle ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုသည်- test publish

Sonatype repository တလင် ဖဌန့်ကျက်မဟုရလဒ်မျာသကို စစ်ဆေသခဌင်သ။

ထုတ်ဝေမဟုကို ဖန်တီသပဌီသသည်နဟင့်၊ ယခင်ကဏ္ဍတလင် ဖော်ပဌထာသသော အလုပ်အသလာသအလာ စတင်သင့်သည်။ ဒါကိုလုပ်ဖို့၊ ထုတ်ဝေမဟုကို ဖန်တီသပါ-

Sonatype Maven Central Repository သို့ Java ပရောဂျက်ကိုထုတ်ဝေရန် Gradle နဟင့် Github လုပ်ဆောင်ချက်မျာသကိုအသုံသပဌုခဌင်သ။

tag အမည်သည် v ဖဌင့် စတင်ရပါမည်။ ထုတ်ဝေဖဌန့်ချိမဟုကို နဟိပ်ပဌီသနောက်၊ အလုပ်အသလာသအလာ အောင်မဌင်စလာပဌီသဆုံသပါက၊ ကျလန်ုပ်တို့ထံသို့ သလာသနိုင်ပါသည်။ Sonatype Nexus သေချာစေရန်-

Sonatype Maven Central Repository သို့ Java ပရောဂျက်ကိုထုတ်ဝေရန် Gradle နဟင့် Github လုပ်ဆောင်ချက်မျာသကိုအသုံသပဌုခဌင်သ။

ပစ္စည်သသည် Staging repository တလင် ပေါ်လာသည်။ ၎င်သသည် Open status တလင် ချက်ခဌင်သပေါ်လာပဌီသ သင့်လျော်သောခလုတ်ကိုနဟိပ်ခဌင်သဖဌင့် ၎င်သအာသ Close status သို့ ကိုယ်တိုင်လလဟဲပဌောင်သရမည်ဖဌစ်သည်။ လိုအပ်ချက်မျာသအာသလုံသကို ပဌည့်မီကဌောင်သ စစ်ဆေသပဌီသနောက်၊ ရဟေသဟောင်သပစ္စည်သသည် ပိတ်သည့်အခဌေအနေသို့ ရောက်သလာသကာ ပဌုပဌင်မလမ်သမံရန် မရဟိတော့ပါ။ ကပုံစံတလင်၊ ၎င်သသည် MavenCentral တလင်အဆုံသသတ်မည်ဖဌစ်သည်။ အာသလုံသအဆင်ပဌေရင် ခလုတ်ကိုနဟိပ်နိုင်ပါတယ်။ လလဟတ်ပေသ၊ နဟင့် ရဟေသဟောင်သပစ္စည်သသည် Sonatype သိုလဟောင်မဟုတလင် အဆုံသသတ်မည်ဖဌစ်သည်။

ပစ္စည်သကို MavenCentral သို့ဝင်ရောက်နိုင်ရန်၊ အစပိုင်သတလင် ကျလန်ုပ်တို့ဖန်တီသခဲ့သည့် အလုပ်တလင် ၎င်သကို သင်တောင်သဆိုရန်လိုအပ်ပါသည်။ ကအရာကို သင်တစ်ကဌိမ်သာ ပဌုလုပ်ရန် လိုအပ်သောကဌောင့် ကျလန်ုပ်တို့သည် ပထမဆုံသအကဌိမ် ထုတ်ဝေပါသည်။ နောက်ပိုင်သအချိန်မျာသတလင်၊ ၎င်သကိုမလိုအပ်ပါ၊ အရာအာသလုံသအလိုအလျောက်ထပ်တူပဌုလိမ့်မည်။ ၎င်သတို့သည် ကျလန်ုပ်အတလက် လျင်မဌန်စလာ ထပ်တူပဌုခဌင်သအာသ ဖလင့်ထာသသော်လည်သ MavenCentral တလင် ပစ္စည်သရရဟိနိုင်ရန် ၅ ရက်ခန့် အချိန်ယူခဲ့ရသည်။

ဒါပါပဲ၊ ကျလန်တော်တို့ဟာ MavenCentral မဟာ ကျလန်ုပ်တို့ရဲ့ ရဟေသဟောင်သပစ္စည်သကို ထုတ်ဝေခဲ့ပါတယ်။

အသုံသဝင်သောလင့်မျာသ

source: www.habr.com