ืืื ืืขื ืึทืจืืืงื, ืืื ืืืืื ืฆื ื ืขืืขื ืึท ื ืขืขื ืืขืจ ืงืืง ืืื ืืขื ืคึผืจืึธืฆืขืก ืคืื ืืจืืืกืืขืื ืึท ืืืฉืึทืืืึท ืึทืจืืึทืคืึทืงื ืคึฟืื ืงืจืึทืฆื ืืืจื Github ืึทืงืฉืึทื ื ืืื ืื Sonatype Maven ืกืขื ืืจืึทื ืจืืคึผืึทืืึทืืึธืจื ื ืืฆื ืื Gradle ืงืึทืืขืงืืขืจ.
ืืื ืืึทืฉืืึธืกื ืฆื ืฉืจืืึทืื ืืขื ืึทืจืืืงื ืจืขืื ืฆื ืืขืจ ืคืขืื ืคืื ืึท ื ืึธืจืืึทื ืืืืึธืจืืึทื ืืื ืืืื ืึธืจื. ื ื ืื ืข ืืื ืคืืจืืืฆืืข ื ืืื ื ืืขืืื ื ืืืืืข ื ืฉืืืง ื ืฉืืืง ื ืคื ื ืคืืจืฉืฒืืขื ืข ืงืฐืืื , ืื ื ื ืืฉ ื ืืื ืืื ืฆ ื ืคืจืืฉืข . ืืืขืจ ืขืก ืื ืืื ืืขืจืขืกืืจื, ืืึทืืจืืกืื ื ืฆื ืงืึทืฅ.
ืฉืึทืคึฟื ืึท ืจืืคึผืึทืืึทืืึธืจื ืืื Sonatype
ืืขืจ ืขืจืฉืืขืจ ืฉืจืื ืืื ืฆื ืฉืึทืคึฟื ืึท ืจืืคึผืึทืืึทืืึธืจื ืืื Sonatype Maven Central. ืคึฟืึทืจ ืืขื ืืืจ ืืืื
ืขืืืขืืข ืืึธื ื ืึธื ืืึทืฉืืขืืืงืื ื, ืืืื GroupId ืืืขื ืืืื ืืืฉืืคื ืืื ืืืจ ืงืขื ืขื ืืึทื ืืืืฃ ืฆื ืืขืจ ืืืืึทืืขืจ ืฉืจืื, Gradle ืงืึทื ืคืืืืขืจืืืฉืึทื.
ืงืึทื ืคืืืืขืจืื ื Gradle
ืืื ืืขืจ ืฆืืื ืคืื ืฉืจืืืื, ืืื ืืื ื ืืฉื ืืขืคืื ืขื ืงืืื ืคึผืืืืื ืก ืคึฟืึทืจ Gradle ืืืึธืก ืงืขื ืืขืืคื ืืื ืืจืืืกืืขืื ืึทื ืึทืจืืึทืคืึทืงื.
ืืขืจ ืขืจืฉืืขืจ ืืึทื ืฆื ืืขืคึฟืื ืขื ืืื ืื ืืจืืืกืืขืื ืจืขืงืืืืจืขืืขื ืฅ ืคืื Sonatype. ืืื ืืขื ืขื ืืื ืืืื:
- ืึทืืืึทืืืึทืืืืืื ืคืื ืืงืืจ ืงืึธืืื ืืื JavaDoc, ื.ืข. ืืืื ืืืื ืคืึธืจืฉืืขืื
-sources.jar
ะธ-javadoc.jar
ืืขืงืขืก. ืืื ืกืืืืืื ืืื ืื ืืึทืงืืืืขื ืืืืฉืึทื, ืืืื ืขืก ืืื ื ืื ืืขืืืขื ืฆื ืฆืืฉืืขืื ืืงืืจ ืงืึธืืื ืึธืืขืจ ืืึทืงืืืืขื ืืืืฉืึทื, ืืืจ ืงืขื ืขื ืืึทืื ืึท ืืึธืง-sources.jar
ืึธืืขืจ-javadoc.jar
ืืื ืึท ืคึผืฉืื README ืื ืฆื ืคืึธืจื ืืืขืจืึทืคืึทืงืืืฉืึทื. - ืื ืืขืงืขืก ืืืื ืืืื ืืขืืชืืขื ืืื
GPG/PGP
ืืื.asc
ืืขืจ ืืขืงืข ืืื ืื ืืกืืืข ืืืื ืืืื ืึทืจืืึทื ืืขืจืขืื ื ืคึฟืึทืจ ืืขืืขืจ ืืขืงืข. - Availability
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()
}
ืืึธืืืจ ืืืื ืฆื ืื ืืขืฆืืข ืคืึธืืขืจืื ื, ืืึทืฉืืขืืืงื ืึท ืืคึผื / ืคึผืืคึผ ืืกืืืข. ืฆื ืืึธื ืืึธืก, ืืึธืื ืืื ืื ืคืึทืจืืื ืื ืื ืคึผืืืืื 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 ืืืขืจืืึทืืึทืื ืืื ืื ืืึธืืื ืืื ืคึผืึทืจืึธื ืืืฉืืคื ืืขืฉืึทืก ืจืขืืืกืืจืึทืฆืืข ืืืืฃ
ืึทืืื ืื ืืขืฆื 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 ืฉืืืกื. ืคึฟืึทืจ ืืขื ืืืจ ืืืื
- ืฉืึทืคึฟื ืึท ืฉืืืกื ืคึผืึธืจ:
gpg --gen-key
, ืึทืจืืึทื ืืืื ื ืืืขื, E- ืคึผืึธืกื, ืืื ืืืื ืฉืืขืื ืึท ืคึผืึทืจืึธื. - ืืื ืก ืืขืคืื ืขื ืืืืก
id
ืืื ืืืขืจ ืฉืืืกื ืืื ืื ืืึทืคึฟืขื: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 Actions.
Github Actions ืืื ืึท ืคืึทื ืืงืฉืึทื ืึทืืืื ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืึธืืึทืืืื ืื ืืืึธืจืงืคืืึธืื ืืืจื ืืืคึผืืึทืืขื ืื ื ืึท ืคืื ืกื / ืกื ืฆืืงื. ืืืืขื, ืืขืกืืื ื ืืื ืืืคึผืืืืืึทื ื ืงืขื ืขื ืืืื ืืจืืืขืจื ืืืจื ืคืึทืจืฉืืื ืืขืฉืขืขื ืืฉื: ืคึผืืฉืื ื ืงืึธื, ืงืจืืืืืื ื ืึท ืืขืืืื ื ืึธืืขืจ ืืฉืื. ืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืืื ืืขืืึทืืจืข ืคืจืื ืคึฟืึทืจ ืฆืืืืจ ืจืืคึผืึทืืึทืืึธืจืื.
ืืื ืืขื ืึธืคึผืืืืืื ื, ืืื ืืืขื ืืืืึทืื ืืืจ ืืื ืฆื ืฉืืขืื ืึทืจืืืฃ ืื ืืืืขื ืืื ืฉืืืคึผื ืคืื ืงืึธื ืืื ืืืคึผืืืืืึทื ื ืฆื ืื Sonatype ืจืืคึผืึทืืึทืืึธืจื ืืืขื ืจืืืืกืื ื ืึท ืืขืืืื ื, ืืื ืืขืืื ื ืืื ืืึทืฉืืขืืืงื ืกืืงืจืืฅ.
ืืึทืฉืืขืืืงื ืกืืงืจืืฅ
ืคึฟืึทืจ ืึธืืึทืืึทืืืง ืคึฟืึทืจืืึทืืืื ื ืืื ืืืคึผืืืืืึทื ื, ืืืจ ืืืขืื ืืึทืจืคึฟื ืึท ื ืืืขืจ ืคืื ืกืื ืืืึทืืืขืก, ืึทืืึท ืืื ืื ืฉืืืกื ืฉืืึทื, ืื ืคึผืึทืจืึธื ืืืึธืก ืืืจ ืึทืจืืึทื ืืืขื ืืืฉืขื ืขืจืืืืื ื ืื ืฉืืืกื, ืื PGP ืฉืืืกื ืืื, ืืื ืื ืืึธืืื / ืคึผืึทืจืึธื ืคึฟืึทืจ ืกืึธื ืึทืืืคึผืข. ืืืจ ืงืขื ืขื ืฉืืขืื ืืื ืืื ืึท ืกืคึผืขืฆืืขื ืึธืคึผืืืืืื ื ืืื ืื ืจืืคึผืึทืืึทืืึธืจื ืกืขืืืื ืืก:
ืืืจ ืฉืืขืื ืื ืคืืืืขื ืืข ืืืขืจืืึทืืึทืื:
- SONATYPE_USERNAME / SONATYPE_PASSWORD - ืืึธืืื / ืคึผืึทืจืึธื ืืืึธืก ืืืจ ืึทืจืืึทื ืืืขื ืจืขืืืฉืืกืืขืจืื ื ืืื Sonatype
- SIGNING_KEYID / SIGNING_PASSWORD - PGP ืฉืืืกื ืฉืืึทื ืืื ืคึผืึทืจืึธื ืืึทืฉืืืื ืืขืฉืึทืก ืืืฉืขื ืขืจืืืฉืึทื.
ืืื ืืืึธืื ืืื ืฆื ืืืืื ืขื ืืืืฃ ืื GPG_KEY_CONTENTS ืืืึทืืขืืืืืง ืืื ืืขืจ ืืขืืึทื. ืืขืจ ืคืึทืงื ืืื ืึทื ืฆื ืึทืจืืืกืืขืื ืืืจ ืืึทืจืคึฟื ืึท ืคึผืจืืืืึทื ืคึผืืคึผ ืฉืืืกื. ืืื ืกืืจ ืฆื ืฉืืขืื ืขืก ืืื ืกืืงืจืืฅ, ืืื ืืขืืืืื ื
- ืืึธืืืจ ืขื ืงืจืืคึผื ืืื ืืืขืจ ืฉืืืกื ื ืืฆื gpg:
gpg --symmetric --cipher-algo AES256 9B695056.gpg
ืืืจื ืึทืจืืึทื ืื ืคึผืึทืจืึธื. ืขืก ืืึธื ืืืื ืืขืฉืืขืื ืืื ืึท ืืืึทืืขืืืืืง: SECRET_PASSPHRASE - ืืึธืืืจ ืืขืจ ืื ืจืืืึทืืืื ื ืื ืงืจืืคึผืืื ืฉืืืกื ืืื ืืขืงืกื ืคืึธืจืขื ื ืืฆื 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
, ืืืื ืืืขื ืงืจืืืืืื ื ืฆืืขื ืจืืงืืืขืก.
ืื ืืืฉืึธืืก ืึธืคึผืืืืืื ื ืกืคึผืขืฆืืคืืฆืืจื ืื ืกืืขืคึผืก ืืืึธืก ืืืื ืืืื ืขืงืกืึทืงืืืืึทื ืืืืืจื ืืืืฃ ืื ืกืคึผืขืกืืคืืขื ืืขืฉืขืขื ืืฉื. ืืื ืืขื ืคืึทื, ืืืจ ืืืขืื ืืืืขื ืืืืฃ ืื ืืขืฆืืข ืืืขืจืกืืข ืคืื โโโโืืืื ืื, ื ืืฆื Java 8 ืืื ืืืื ื ืืฆื ืึท ืคึผืืืืื ืคึฟืึทืจ Gradle eskatos/gradle-command-action@v1
, ืืืึธืก, ื ืืฆื ืื ืืขืฆื ืืืขืจืกืืข ืคืื โโืื ืงืึทืืขืงืืขืจ, ืืืขื ืืืืคื ืื ืงืึทืืึทื ืื ืกืคึผืขืกืืคืืขื ืืื arguments
. ืืืขืจืืึทืืึทืื secrets.SONATYPE_USERNAME
ะธ secrets.SONATYPE_PASSWORD
ืืืก ืืขื ืขื ืื ืกืืงืจืืฅ ืืืึธืก ืืืจ ืืขืคืจืขืื ืคืจืืขืจ.
ืื ืืืืขื ืจืขืืืืืึทืื ืืืขื ืืืื ืฉืคืืืื ืืื ืื ืึทืงืืืึธื ืก ืงืืืืื:
ืึทืืืึธืืืคึผืืื ืืืขื ืจืืืืกืื ื ืึท ื ืืึทืข ืืขืืืื ื
ืคึฟืึทืจ ืึทืืืึธืืืคึผืืืืืึทื ื, ืืืจ ืืืขืื ืฉืึทืคึฟื ืึท ืืึทืืื ืืขืจ ืืืึธืจืงืคืืึธืื ืืขืงืข 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 ืืืึทืืขืืืืืง, ืืืืขืจืืขืฆื ืขืก ืืื ืึท gpg ืืขืงืข, ืืื ืืขืงืจืืคึผื ืขืก ืืืจื ืคึผืืืืกืื ื ืขืก ืืื ืืขืจ ืืขืงืข secret.gpg
.
ืืขืจื ืึธื ืืืจ ืึทืงืกืขืก ืื ืกืคึผืขืฆืืขืืข ืืืึทืืขืืืืืง GITHUB_REF
, ืคึฟืื ืืืึธืก ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืื ืืืขืจืกืืข ืืืึธืก ืืืจ ืกืคึผืขืฆืืคืืฆืืจื ืืืขื ืงืจืืืืืื ื ืื ืงืืืืื. ืืขื ืืืึทืืขืืืืืง ืืื ืืขื ืคืึทื ืืื ืื ืืืขืจื refs/tags/v0.0.2
ืคืื ืืืึธืก ืืืจ ืฉื ืืึทืื ืึทืืืขืง ืื ืขืจืฉืืขืจ 11 ืืืชืืืช ืฆื ืืึทืงืืืขื ืื ืกืคึผืขืฆืืคืืฉ ืืืขืจืกืืข. ืืขืจื ืึธื, ืืืจ ื ืืฆื ืื ื ืึธืจืืึทื Gradle ืงืึทืืึทื ืื ืคึฟืึทืจ ืืจืืืกืืขืื: test publish
ืงืึธื ืืจืึธืืืจืื ื ืืืคึผืืืืืึทื ื ืจืขืืืืืึทืื ืืื ืื Sonatype ืจืืคึผืึทืืึทืืึธืจื
ื ืึธื ืงืจืืืืืื ื ืื ืืขืืืื ื, ืื ืืืึธืจืงืคืืึธืื ืืืกืงืจืืืื ืืื ืื ืคืจืืขืจืืืงืข ืึธืคึผืืืืืื ื ืืึธื ืึธื ืืืืื. ืฆื ืืึธื ืืึธืก, ืืืจ ืืึทืื ืึท ืืขืืืื ื:
ืืื ืืขื ืคืึทื, ืื ืงืืืืื ื ืึธืืขื ืืืื ืึธื ืืืืื ืืื v. ืืืื, ื ืึธื ืืขืื ืึท ืงืืืง ืืืืฃ ืึทืจืืืกืืขืื ืืขืืืื ื, ืื ืืืึธืจืงืคืืึธืื ืืืืคื ืืฆืืื, ืืืจ ืงืขื ืขื ืืืื ืฆื
ืืขืจ ืึทืจืืึทืคืึทืงื ืืจืืืก ืืื ืื ืกืืึทืืื ื ืจืืคึผืึทืืึทืืึธืจื. ืขืก ืืืืื ืืืืก ืืื ืื ืขืคึฟื ืกืืึทืืืก, ืืื ืขืก ืืืื ืืืื ืืึทื ืืืึทืื ืืจืึทื ืกืคืขืจื ืฆื ืื ื ืึธืขื ื ืกืืึทืืืก ืืืจื ืืขืื ืึท ืงืืืง ืืืืฃ ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืงื ืขืคึผื. ื ืึธื ืงืึธื ืืจืึธืืืจืื ื ืึทื ืึทืืข ืจืขืงืืืืจืขืืขื ืฅ ืืขื ืขื ืืืืขืื ื, ืื ืึทืจืืึทืคืึทืงื ืืืืืขืื ืฆื ื ืึธืขื ื ืกืืึทืืืก ืืื ืืื ื ืื ืืขืจ ืื ืืืฆื ืคึฟืึทืจ ืืึธืืืคืืงืึทืืืึธื. ืืื ืืขื ืคืึธืจืขื ืขืก ืืืขื ืืืื ืฆื MavenCentral. ืืืื ืึทืืฅ ืืื ืืื, ืืืจ ืงืขื ืขื ืืจืืงื ืืขื ืงื ืขืคึผื ืืขืืืื ื, ืืื ืืขืจ ืึทืจืืึทืคืึทืงื ืืืขื ืืืื ืฆื ืื Sonatype ืจืืคึผืึทืืึทืืึธืจื.
ืึผืื ืื ืึทืจืืึทืคืึทืงื ืืึธื ืืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื MavenCentral, ืืืจ ืืึทืจืคึฟื ืฆื ืืขืื ืขืก ืืื ืืขืจ ืึทืจืืขื ืืืึธืก ืืืจ ืืึธืื ืืืฉืืคื ืืื ืื ืึธื ืืืื. ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืืึธื ืืึธืก ืึทืืึธื, ืึทืืื ืืืจ ืึทืจืืืกืืขืื ืขืก ืคึฟืึทืจ ืื ืขืจืฉืืขืจ ืืึธื. ืขืก ืืื ื ืื ืืึทืจืคึฟื ืฆื ืืึธื ืืึธืก ืื ืืืืึทืืขืจ ืืึธื, ืึทืืฅ ืืืขื ืืืื ืกืื ืืงืจืึทื ืืืื ืืืืืึธืืึทืืืฉ. ืืื ืืึธืื ืืขืฉืืืื ื ืกืื ืืงืจืึทื ืืืื ืคึฟืึทืจ ืืืจ, ืึธืืขืจ ืขืก ืืขื ืืืขื ืืืขืื 5 ืืขื ืคึฟืึทืจ ืื ืึทืจืืึทืคืึทืงื ืฆื ืืืื ืืืจืขืืืืื ืืื MavenCentral.
ืึทื ืก ืึทืืข, ืืืจ ืืจืืืก ืืื ืืืขืจ ืึทืจืืึทืคืึทืงื ืืื MavenCentral.
ื ืืฆืืง ืืื ืงืก
- ืขื ืืขืืข
ืึทืจืืืงื , ืืืืื ืืจืืืกืืขืื ืืืจื ืืึทืืืขื - ืกืืึทืืื ื
ืจืืคึผืึทืืึทืืึธืจื ืกืึธื ืึทืืืคึผืข ืืืฉืืจืึท ืกืึธื ืึทืืืคึผืข ืืื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืึทืจืืขืืืืึทืฉืคึผืื ืจืืคึผืึทืืึทืืึธืจื ืืื ืขืก ืืื ืึทืืข ืงืึทื ืคืืืืขืจื
ืืงืืจ: www.habr.com