Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 160 additions & 0 deletions .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: Release Build

# バイナリファイル(JAR)を生成してアーティファクトとして提供

on:
# 手動実行を許可
workflow_dispatch:

# リリースタグ(v*)がプッシュされた時に実行
push:
tags:
- 'v*'

# mainブランチへのプルリクエスト時にビルドテスト
pull_request:
branches: [ main, master ]

jobs:
build-release:
name: Build Release Binary
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew clean bootJar -x test -x detekt

- name: Get version from build.gradle
id: get_version
run: |
VERSION=$(./gradlew properties -q | grep "^version:" | awk '{print $2}')
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Building version: $VERSION"

- name: Rename JAR file
run: |
cd build/libs
# bootJarで生成されたJARファイルを見つける(server-*.jar)
JAR_FILE=$(ls server-*.jar 2>/dev/null | grep -v plain | head -1)
if [ -n "$JAR_FILE" ]; then
mv "$JAR_FILE" kidspos-${{ steps.get_version.outputs.VERSION }}.jar
echo "Renamed to: kidspos-${{ steps.get_version.outputs.VERSION }}.jar"
ls -lh
else
echo "Error: JAR file not found"
ls -la
exit 1
fi

- name: Upload JAR as artifact
uses: actions/upload-artifact@v4
with:
name: kidspos-jar-${{ steps.get_version.outputs.VERSION }}
path: build/libs/kidspos-${{ steps.get_version.outputs.VERSION }}.jar
retention-days: 90

- name: Create Release Info
run: |
echo "# Release Build Information" > release-info.txt
echo "" >> release-info.txt
echo "Version: ${{ steps.get_version.outputs.VERSION }}" >> release-info.txt
echo "Build Date: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> release-info.txt
echo "Commit: ${{ github.sha }}" >> release-info.txt
echo "Branch: ${{ github.ref_name }}" >> release-info.txt
echo "" >> release-info.txt
echo "## Deploy to Raspberry Pi" >> release-info.txt
echo "" >> release-info.txt
echo "1. Download the JAR file from GitHub Actions Artifacts" >> release-info.txt
echo "2. Transfer to Raspberry Pi:" >> release-info.txt
echo " scp kidspos-*.jar pi@[raspberry-pi-ip]:~/kidspos/" >> release-info.txt
echo "3. Run on Raspberry Pi:" >> release-info.txt
echo " java -Xmx512m -jar ~/kidspos/kidspos-*.jar" >> release-info.txt
cat release-info.txt

- name: Upload Release Info
uses: actions/upload-artifact@v4
with:
name: release-info
path: release-info.txt
retention-days: 90

# タグプッシュ時にGitHub Releaseを作成
create-release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: build-release
if: startsWith(github.ref, 'refs/tags/v')

permissions:
contents: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Get version from tag
id: get_tag_version
run: |
TAG_VERSION=${GITHUB_REF#refs/tags/}
echo "TAG_VERSION=$TAG_VERSION" >> $GITHUB_OUTPUT
echo "Tag version: $TAG_VERSION"

- name: Download JAR artifact
uses: actions/download-artifact@v4
with:
pattern: kidspos-jar-*
merge-multiple: true
path: ./artifacts

- name: Download Release Info
uses: actions/download-artifact@v4
with:
name: release-info
path: ./artifacts

- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: |
./artifacts/*.jar
./artifacts/release-info.txt
body: |
## KidsPOS Release ${{ steps.get_tag_version.outputs.TAG_VERSION }}

### ダウンロード

下記のAssetsセクションから `kidspos-*.jar` ファイルをダウンロードしてください。

### Raspberry Piへのデプロイ

詳細なデプロイ手順は[README.md](https://github.com/KidsPOSProject/KidsPOS-Server#raspberry-pi%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)をご覧ください。

```bash
# Raspberry Piでの起動
java -Xmx512m -jar kidspos-*.jar
```

### システム要件

- Java 21以上
- メモリ: 最小512MB(推奨1GB)
- 対応: Raspberry Pi 3/4/5, Zero W/2W

詳細は `release-info.txt` を参照してください。
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
190 changes: 190 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,196 @@ java -jar app.jar

SQLiteデータベース(`kidspos.db`)は初回起動時に自動生成されます。追加の設定は不要です。

## Raspberry Piへのデプロイ

KidsPOSはRaspberry Piで動作するため、学校や教育機関で低コストで展開できます。

### 対応ハードウェア

- Raspberry Pi 5
- Raspberry Pi 4 Model B
- Raspberry Pi 3 Model B/B+
- Raspberry Pi Zero W/2W

### システム要件

- Raspberry Pi OS (Bullseye以降推奨)
- Java 21以上
- 最小メモリ: 512MB(推奨: 1GB以上)
- ストレージ: 最小200MB

### Java 21のインストール

Raspberry PiにJava 21をインストールします:

```bash
# システムパッケージの更新
sudo apt update && sudo apt upgrade -y

# OpenJDK 21のインストール
sudo apt install openjdk-21-jdk -y

# インストール確認
java -version
```

### デプロイ方法

#### 方法1: ビルド済みバイナリの使用(推奨)

GitHubのActionsページからビルド済みJARファイルをダウンロード:

```bash
# 作業ディレクトリの作成
mkdir -p ~/kidspos
cd ~/kidspos

# GitHubからビルド済みJARファイルをダウンロード
# (GitHub Actionsの最新成功ビルドからArtifactsをダウンロード)
# ダウンロードしたファイルを展開
unzip kidspos-*.zip

# JARファイルの実行権限を設定
chmod +x kidspos-*.jar
```

#### 方法2: ソースからビルド

```bash
# リポジトリのクローン
git clone https://github.com/KidsPOSProject/KidsPOS-Server.git
cd KidsPOS-Server

# ビルド
./gradlew bootJar

# JARファイルを作業ディレクトリにコピー
mkdir -p ~/kidspos
cp build/libs/kidspos-*.jar ~/kidspos/app.jar
cd ~/kidspos
```

### アプリケーションの起動

```bash
# 手動起動
java -jar kidspos-*.jar

# メモリオプション付きで起動(512MBヒープ)
java -Xmx512m -jar kidspos-*.jar

# バックグラウンドで起動
nohup java -jar kidspos-*.jar > kidspos.log 2>&1 &
```

ブラウザで `http://[Raspberry PiのIPアドレス]:8080` にアクセスしてください。

### 自動起動設定(Systemdサービス)

システム起動時に自動的にKidsPOSを起動するようにSystemdサービスを設定します:

```bash
# サービスファイルの作成
sudo nano /etc/systemd/system/kidspos.service
```

以下の内容を入力:

```ini
[Unit]
Description=KidsPOS Server
After=network.target

[Service]
Type=simple
User=pi
WorkingDirectory=$HOME$/kidspos
ExecStart=/usr/bin/java -Xmx512m -jar $HOME$/kidspos/app.jar
Restart=on-failure
RestartSec=10
StandardOutput=append:$HOME$/kidspos/kidspos.log
StandardError=append:$HOME$/kidspos/kidspos-error.log

[Install]
WantedBy=multi-user.target
```

サービスを有効化して起動:

```bash
# サービスのリロード
sudo systemctl daemon-reload

# サービスの有効化(自動起動)
sudo systemctl enable kidspos

# サービスの起動
sudo systemctl start kidspos

# ステータス確認
sudo systemctl status kidspos
```

### サービス管理コマンド

```bash
# サービスの停止
sudo systemctl stop kidspos

# サービスの再起動
sudo systemctl restart kidspos

# ログの確認
journalctl -u kidspos -f

# アプリケーションログの確認
tail -f ~/kidspos/kidspos.log
```

### トラブルシューティング

#### ポート8080が既に使用されている場合

別のポートを使用する:

```bash
java -Dserver.port=8081 -jar kidspos-*.jar
```

#### メモリ不足エラーの場合

ヒープサイズを調整:

```bash
# 最小メモリ: 256MB、最大メモリ: 512MB
java -Xms256m -Xmx512m -jar kidspos-*.jar
```

#### IPアドレスの確認

```bash
hostname -I
```

#### ファイアウォール設定

```bash
# ポート8080を開放(UFWを使用している場合)
sudo ufw allow 8080/tcp
```

### パフォーマンスチューニング

Raspberry Piでの最適なパフォーマンスのための推奨設定:

```bash
# 推奨起動コマンド
java -Xms256m -Xmx512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-jar kidspos-*.jar
```

## 使用方法

### アクセス
Expand Down
Loading
Loading