Eclipse TychoでEclipseプラグインをCIする

Amateras ModelerをGitHubに移して数年が経ちますが、最新のEclipseで動くようにするために久しぶりに少し手を入れたついでに折角なのでGitHub ActionsでCIできないかなと思い調べてみました。

Eclipse Tychoを使うとMavenEclipseプラグインなどのOSGiバンドルやフィーチャー、アップデートサイト、RCPプラグインをビルドできるようです。

github.com

前提として、Amateras Modelerのリポジトリは以下のようにルートディレクトリ直下にフィーチャーとプラグインが並列に並ぶ構造に担っています。

Tychoの設定

まずはルートディレクトリ直下に.mvnディレクトリを作り、以下のファイルを作成します。

  • extensions.xml
<extensions>
  <extension>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-build</artifactId>
    <version>${tycho-version}</version>
  </extension>
</extensions>
  • mvn.config
-Dtycho-version=4.0.8

ルートディレクトリにpom.xmlを作成します。<modules>にビルドするプラグインディレクトリを指定します。前述の通りフィーチャーや更新サイトのビルドも可能なようですが、今回はプラグインだけビルドしています。

<?xml version="1.0" encoding="UTF-8"?>
<project
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.java.amateras.modeler</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <repositories>
    <repository>
      <id>neon</id>
      <layout>p2</layout>
      <url>http://download.eclipse.org/releases/2024-06</url>
    </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-maven-plugin</artifactId>
        <version>${tycho-version}</version>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <version>${tycho-version}</version>
      </plugin>
    </plugins>
  </build>

  <modules>
    <module>net.java.amateras.xstream</module>
    <module>net.java.amateras.db</module>
    <module>net.java.amateras.umleditor</module>
    <module>net.java.amateras.umleditor.java</module>
  </modules>
</project>

これでEclipseプラグインMavenを使ってビルドできるようになります。

$ mvn clean verify
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] parent 1.0.0-SNAPSHOT .............................. SUCCESS [  0.020 s]
[INFO] [bundle] XStream 2.2.0-SNAPSHOT .................... SUCCESS [  5.419 s]
[INFO] [bundle] AmaterasERD 2.2.0-SNAPSHOT ................ SUCCESS [  1.125 s]
[INFO] [bundle] UML Plugin 2.2.0-SNAPSHOT ................. SUCCESS [  0.575 s]
[INFO] [bundle] UML Java Generator Plug-in 2.2.0-SNAPSHOT . SUCCESS [  0.419 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.154 s
[INFO] Finished at: 2024-06-30T12:27:28+09:00
[INFO] ------------------------------------------------------------------------

GitHub Actions

続いてGitHub Actionsを設定するのですが、GitHub ActionsでJava環境をセットアップするためのactions/setup-javaでサポートされているMavenだとTychoの実行に必要なMavenのバージョンがインストールされないため、Maven Wrapperを使うようにしておきます。

$ mvn wrapper:wrapper

これでmvnwコマンドと必要な設定ファイルが作成されます。GitHub Actionsの設定は以下のような感じになります。

  • .github/workflows/build.yml
name: build

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: temurin
    - name: Build
      run: ./mvnw -B verify

これでGitHub ActionsでAmateras ModelerをCIすることができるようになりました。完成品は以下のプルリクエストになります。前述のようにフィーチャーや更新サイトのビルドもできるようなので頑張ればリリースの自動化もできるのかもしれません。

github.com