🍚

BallerinaCentralへ自作Packageを公開

2023/09/07に公開

多分エンジニアをやっていますyuya-morimotoです。
BallerinaでPackage開発をしてCentralへ公開しましたのでまとめます。
まだまだパッケージも少ないのでみんなも色々作ってみてください。
Ballerina初耳の方は別の記事を書いておりますのでそちらを参照してみてください。

パッケージの作成と公開手順

パッケージの作成と公開の手順をまとめます。
今回はパッケージ名を"zenn", 組織名を"zerohack"として進めます。
※参考画像等で登場するパッケージは私が公開したものになります

1. プロジェクトの作成

bal-cliを使用してプロジェクトを作成します。

$ bal new --template lib zenn

上記のコマンドにより以下のファイルが作成されます

- zenn/
  - Ballerina.toml
  - Module.md
  - Package.md
  - zenn.bal
  - resources/
    - .keep
  - tests/
    - lib_test.bal

2. 各種ファイルの説明

Ballerina.toml

パッケージの組織や名前、バージョン、ライセンス等の情報を設定するファイルになります。

[package]
org = "zerohack" # 組織名
name = "github" # パッケージ名
version = "0.6.0" # パッケージバージョン
authors = ["yuya-morimoto"] 
keywords = ["github"]
repository = "https://github.com/zero-hack-org/module-zerohack-github"
license = ["Apache-2.0"] # ライセンス
distribution = "2201.7.1" # Ballerinaバージョン

[build-options]
# その他ビルドオプション等も記述可能です

Module.md

以下の画像のようにBallerinaDocsの上部に表示されます。
その他ClassesやRecords、参考リンクでは使用していませんが定数値やErrorについても自動的にドキュメントが生成されます。
私が公開したパッケージの参考リンク
module

Package.md

Ballerina Centralのライブラリの概要説明に使用されるmdファイルになります。

私が公開したパッケージの参考リンク
package

zenn.bal

こちらがデフォルトで作成されるパッケージの実装を行うファイルになります。
publicにすることで使用側からアクセスできますので、ファイル分けるなり自由に実装してください!

resources/

静的ファイル等を使用する場合に配置するフォルダになります

tests/

テストコードを記述するフォルダになります。
OSSでライブラリを公開する場合はしっかりテスト書きましょう。
(結構サボりがちなので頑張った。)

3. パッケージの公開

パッケージを実際にBallerina Centralに公開する方法になります。
すごい簡単で以下のコマンドを実行するのみになります。
Ballerina.tomlで設定している情報を元にBuild&Pushされます!

1. Build

bal pack

2. Push

bal push

4. 公開したパッケージを使用する

以下サンプルコードですがimport 組織名/パッケージ名で使用可能です。

import zerohack/github;
import svg_parser.parser;
import ballerina/http;

configurable int port = 8080;

github:GraphQlClient githubClient = new;

service / on new http:Listener(port) {
    resource function get contributions(http:Request request) returns error|http:Response {
        http:Response response = new;
        github:ContributionsResponse contributions = check githubClient.getContributions();

        final xml:Element result = check parser:generateContributions(contributions);

        response.setPayload(result);
        response.setHeader("Content-Type", "image/svg+xml");
        return response;
    }
}

Tips: GitHubActionsでCICD実装(Test&Codecovも)

ローカルからするのもめんどくさいので、Publish Release時にビルドしてプッシュするように実装しております。
ちなみにPR時はテストを実行して、CoverageはCodecovを使用しておりますのでこちらも併せて参考にしてみてください。

# Ballerinaパッケージのビルドとプッシュを行います
name: Pack and Publish

on:
  release:
    types: [published]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Check out ✊
        uses: actions/checkout@v3


	# ビルド
      - name: Ballerina Build 🏠
        uses: ballerina-platform/ballerina-action/@2201.7.1
        with:
          args: pack
	  
	# プッシュ
      - name: Ballerina Push 🚀
        uses: ballerina-platform/ballerina-action/@2201.7.1
        with:
          args: push
        env:
          BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.ZERO_HACK_BALLERINA_CENTRAL_ACCESS_TOKEN }}
name: Pull_Request

on: [pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Check out ✊
        uses: actions/checkout@v3

	# テスト実行
	# coverage-format=xmlでxmlを指定する
      - name: Ballerina Test 🛡
        uses: ballerina-platform/ballerina-action/@2201.7.1
        with:
          args: test --test-report --code-coverage --coverage-format=xml
	  
	# ./target/report/github/coverage-report.xml
	# ↑ にテスト結果が出力されているため指定してアップロードする
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v3
        with:
          files: ./target/report/github/coverage-report.xml
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

最後に

まだまだ使用している方は多くないのかと思いますが、気になる方はキャッチアップ頑張りましょう!
以下が今回参考のRepositoryになります。

Ballerinaパッケージ(zerohack/github)

https://github.com/zero-hack-org/module-zerohack-github

Ballerinaのサービス(zerohack/githubを使用したsvg-parserです)

https://github.com/zero-hack-org/svg-parser

以上!!!

Discussion