GaugeプロジェクトをGitHubPackagesで共通ライブラリ化する
課題感
様々なプロジェクトで同じようなステップを作成する、もしくはそのような可能性がある
目的
Gaugeで作成したE2Eプロジェクトを共通ライブラリにして再利用可能な状態にしたい
解決策
GitHub Packagesによる共通化
環境
- Gauge
- Gradle
- GitHub Organization (Private)
対応フロー
箇条書きで書くと以下のような手順
- 作成したE2EをGitHub Packagesに登録するがIntelliJな
- GitHub Packagesに登録したライブラリをコンシューマー側でinstallする
- GitHub Packagesに登録したライブラリのステップを利用する
作成したE2EをGitHub Packagesに登録する
今回はGitHub Packages利用して指定した範囲のソースコードをパッケージ化する
GitHub Packagesについて
GitHub Packages は、コンテナーやその他の依存関係を含むパッケージをホストおよび管理するためのプラットフォームです。 GitHub Packagesは、ソースコードとパッケージを 1 か所にまとめ、統合された権限管理と支払いを提供し、GitHub 上でのソフトウェア開発を一元化できるようにします。
今回プロジェクトはgradle
で管理していますが、GitHub packagesのサポート対象になっています。
他にもnpm
,gem
,mvn
など利用可能です。
build.gradleファイルの設定
gradle groovyを利用した例
plugins {
id("maven-publish")
}
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
}
}
}
publications {
mavenJava(MavenPublication) {
groupId = 'com.owner'
artifactId = 'hoge'
version = '1.0.0'
from(components.java)
}
}
}
tasks.withType(Jar) {
from sourceSets.main.output // src.main配下のファイル群がGitHub Packagesに登録されます。
}
packageの管理にはPAT()が必要なため必要なスコープを付与する
※付与する際に、classicで付与する。
You need an access token to publish, install, and delete private, internal, and public packages.
より具体的なPATに関する権限についてはこちら
Gradle Maven Publish Plugin
Maven Publish プラグインは、ビルド成果物を Apache Maven リポジトリに公開する機能を提供してくれている。
Custom MavenArtifact
パブリケーションに含めるカスタム MavenArtifact を作成することも可能です。
artifact
で指定したtask
の出力を公開する実装例
plugins {
id 'maven-publish'
}
task sourceJar(type: Jar) {
from sourceSets.main.allSource
archiveClassifier.set("sources")
}
publishing {
publications {
maven(MavenPublication) {
artifact sourceJar // sourceJarタスクの出力を公開する
}
}
}
コンシューマー側でソースのダウンロードも可能になります。
Tasks or Task
例ではtask
で定義されていますがtasks
でも実装できます。
tasks.register("hello", TaskType) {
doLast {
println "Hello, World!"
}
}
Taskの種類は他にもたくさん用意されています。
GitHub Packagesに登録したライブラリをコンシューマー側でinstallする
登録したライブラリをinstallするには、他ライブラリをinstallする場合と同様に指定します。
dependencies {
testImplementation 'com.owner:hoge:1.0.0'
}
PATも必要になるので設定していきます。
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
}
}
}
この状態でbuildを行うと、IDE(IntelliJ)などでinstallされていることが確認できます。
※IntelliJでは、ファイルツリーView > External Libralies配下にダウンロードされます。
GitHub Packagesに登録したライブラリのステップを利用する
今回GitHub Packagesに登録したStep群は、buildを行いダウンロードさえ完了していれば
specファイルからライブラリのSTEPを呼び出すことができます。
## Google検索
* Googleを開く // 共通ライブラリのSTEP
Other
ストレージについて
プラン | Storage | データ転送 (月あたり) |
---|---|---|
GitHub Free | 500MB | 1GB |
GitHub Pro | 2GB | 10 GB |
使用料の確認
設定のBilling and Plans
から確認できる
利用上限の管理
設定のBilling and Plans
> Manage spending limit
からアラートの設定や上限管理が可能
Discussion