graphql-spring-boot を Artifact Registry に publish して使う
https://cloud.google.com/artifact-registry/docs/java/quickstart を見ながら Maven リポジトリ maven-test
を作成。
maven-publisher というサービスアカウントを作って Artifact Registry Administrator ロールを与える。Key を作成し JSON 形式でダウンロードする。
そもそもなんでこんなことをやっているかというと、https://github.com/graphql-java-kickstart/graphql-spring-boot が全然リリースされておらず、新しいバージョンの graphql-java や java-dataloader が使えないから……。
https://cloud.google.com/artifact-registry/docs/java/authentication を見ながら認証情報を設定する。
gcloud config set artifacts/repository maven-test
gcloud config set artifacts/location asia-northeast1
Authenticating with a credential helper を試してみるも credentials.username と credentials.password が必須と怒られてダメそう
gcloud auth activate-service-account maven-publisher@YOUR_PROJECT.iam.gserviceaccount.com --key-file ./key.json
gcloud artifacts print-settings gradle --project=YOUR_PROJECT --repository=maven-test --location=asia-northeast1 --json-key=./key.json
すると artifactRegistryMavenSecret という値と Gradle の設定情報がべろっとでてくる。artifactRegistryMavenSecret は key.json を base64 した値。この値は秘密の値なので、~/.gradle/gradle.properties に記述する。ここで注意なのが、以下のようにダブルクォートは外すこと。
# ~/.gradle/gradle.properties
artifactRegistryMavenSecret=...
2つのファイルをいじる。
diff --git a/build.gradle b/build.gradle
index 87be772..b4def86 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,6 +25,7 @@ plugins {
id "org.sonarqube" version "$PLUGIN_SONARQUBE_VER"
id "jacoco"
id 'io.codearte.nexus-staging' version "$PLUGIN_NEXUS_STAGING_VER"
+ id "maven-publish"
}
sonarqube {
@@ -132,16 +133,6 @@ subprojects {
}
}
- if (!version.toString().endsWith('-SNAPSHOT')) {
- ext["signing.keyId"] = System.env.SIGNING_KEY_ID
- ext["signing.password"] = System.env.SIGNING_PASSWORD
- ext["signing.secretKeyRingFile"] = System.env.SIGNING_SECRET_KEY_RING_FILE
-
- signing {
- sign publishing.publications
- }
- }
-
publishing {
publications {
mavenJava(MavenPublication) {
@@ -191,26 +182,16 @@ subprojects {
}
repositories {
maven {
- name 'ossrh'
- if (version.toString().endsWith("-SNAPSHOT")) {
- url "https://oss.sonatype.org/content/repositories/snapshots/"
- } else {
- url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
- }
+ url "https://asia-northeast1-maven.pkg.dev/YOUR_PROJECT/maven-test"
credentials {
- username = System.env.OSS_USER_TOKEN_KEY ?: project.findProperty('OSS_USER_TOKEN_KEY') ?: ''
- password = System.env.OSS_USER_TOKEN_PASS ?: project.findProperty('OSS_USER_TOKEN_PASS') ?: ''
+ username = "_json_key_base64"
+ password = artifactRegistryMavenSecret
}
}
}
}
}
-nexusStaging {
- username = System.env.OSS_USER_TOKEN_KEY ?: project.findProperty('OSS_USER_TOKEN_KEY') ?: ''
- password = System.env.OSS_USER_TOKEN_PASS ?: project.findProperty('OSS_USER_TOKEN_PASS') ?: ''
-}
-
wrapper {
distributionType = Wrapper.DistributionType.ALL
}
diff --git a/gradle.properties b/gradle.properties
index a332cb7..2ffdb09 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -16,7 +16,7 @@
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-version=12.0.0-SNAPSHOT
+version=11.2.0 # てきとう
### Project Metadata
PROJECT_GROUP=com.graphql-java-kickstart
PROJECT_NAME=graphql-spring-boot
その後 ./gradlew clean build publish
する
できた。
graphql-java-servlet が SNAPSHOT を向いていてビルドできないので、こちらも同様にして publish する。その後バージョンを書き換えて graphql-spring-boot を再度 publish
diff --git a/gradle.properties b/gradle.properties
index a332cb7..b942afc 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -16,7 +16,7 @@
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-version=11.2.0
+version=11.3.0
### Project Metadata
PROJECT_GROUP=com.graphql-java-kickstart
PROJECT_NAME=graphql-spring-boot
@@ -32,7 +32,7 @@ TARGET_COMPATIBILITY=1.8
LIB_GRAPHQL_JAVA_VER=17.1
LIB_EXTENDED_SCALARS_VER=17.0
LIB_SPRING_BOOT_VER=2.5.4
-LIB_GRAPHQL_SERVLET_VER=12.0.0-SNAPSHOT
+LIB_GRAPHQL_SERVLET_VER=11.3.0
LIB_GRAPHQL_JAVA_TOOLS_VER=11.1.0
LIB_GRAPHQL_ANNOTATIONS_VER=8.3
LIB_REFLECTIONS_VER=0.9.11
最後に、graphql-spring-boot を利用する側のプロジェクトで、以下の変更を加えつつ、先程 publish したバージョンを指定すれば OK
# build.gradle.kts
repositories {
// これを足す
maven {
val artifactRegistryMavenSecret: String by extra
url = uri("https://asia-northeast1-maven.pkg.dev/YOUR_PROJECT/maven-test")
credentials {
username = "_json_key_base64"
password = artifactRegistryMavenSecret
}
authentication {
create<BasicAuthentication>("basic")
}
}
}