プロジェクト

全般

プロフィール

バグ #208

完了

beatorajaリポジトリのCRLF改行でLinuxコンテナ内のビルドスクリプトが動かない

バグ #208: beatorajaリポジトリのCRLF改行でLinuxコンテナ内のビルドスクリプトが動かない

エージェント ちゃん さんが22日前に追加. 21日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/14
期日:
進捗率:

100%

予定工数:

説明

refs #195

izu-ir #195(plugin実装)作業中に判明した申し送り事項。izu-ir の scripts/setup-beatoraja-jar.sh が beatoraja をクローン・ビルドして plugin/libs/beatoraja.jar を生成するが、以下のトラブルで DevContainer(Linux/bash)内でそのままは動かなかった。

現象

  1. gradlew が CRLF 改行
    • ./gradlew 実行時に failed to run command './gradlew': No such file or directory(シェバン #!/bin/sh\r/bin/sh\r と解釈される)。
    • sh gradlew でも gradlew: 61: : not found / Syntax error: newline unexpected など CRLF 起因のエラー。
  2. scripts/setup-sibling-repos.sh も CRLF 改行
    • $'\r': command not found / set: pipefail: invalid option name で失敗し、sibling パーサリポジトリ(../jbms-parser / ../jbmstable-parser)がクローンされない。
    • そのため settings.gradleincludeBuild が成立せず、bms.model.*(Mode 等)を参照する plugin コンパイルが通らない。

#195での回避(恒久対応ではない)

  • sibling リポジトリを手動クローン(git clone https://github.com/izu-san/jbms-parser.git 他)。
  • Gradle wrapper を ./gradlew ではなく java -classpath gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain で直起動(CRLF の gradlew を避ける)。
  • izu-ir 側 scripts/setup-beatoraja-jar.sh にも上記の java 直起動を適用済み(ただし sibling 未取得時は依然として beatoraja 側 setup-sibling-repos.sh に依存)。

期待する恒久対応(beatoraja リポジトリ側)

  • .gitattributes でシェルスクリプト・gradleweol=lf(または * text=auto eol=lf)に固定し、チェックアウト改行を LF に統一する。
  • 既存ファイルの改行を LF に正規化(git add --renormalize .)。
  • DevContainer の postCreateCommand で sibling クローンが確実に走ることを確認。

影響

  • izu-ir plugin(#195)のローカル compile/test、および beatoraja 自体のコンテナビルドの再現性・自動化に影響。

いづ さん さんが21日前に更新 操作 #1

  • 対象バージョン1.0.2 にセット

エージェント ちゃん さんが21日前に更新 操作 #2

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/208
  • 対応方針: リポジトリ直下に .gitattributes を追加してテキストは LF・*.bat/*.cmd/*.ps1 は CRLF・バイナリは binary に固定し、git add --renormalize で既存ファイル(CRLF混入の Java/bat 等)の改行を正規化。これにより各開発者の core.autocrlf 設定に依らず Linux コンテナ内で gradlewscripts/*.sh が確実に動作する。

エージェント ちゃん さんが21日前に更新 操作 #3

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

Windows/Linux(DevContainer) 混在開発で gradlewscripts/*.sh が CRLF でチェックアウトされ、Linux コンテナ内で /bin/sh^M: bad interpreter 等で動かない問題を、.gitattributes による改行ポリシー固定と既存ファイルの再正規化で恒久対応した。

変更点

  • .gitattributes(新規)を追加:
    • * text=auto eol=lf(テキストは LF に正規化)
    • *.sh / gradlewLF 強制(Linux 実行用)
    • *.bat / *.cmd / *.ps1CRLF 強制(Windows 用、last-match-wins)
    • バイナリ 23 種(png/jpg/ttf/wav/jar/dll/exe 等)を binary 指定し改行変換から除外
    • gitattributes は各開発者の core.autocrlf を上書きするため恒久的に有効
  • git add --renormalize . で CRLF 混入の既存ファイルを LF 化(Java ソース 7 件 + *.bat 2 件、内容変更なしの純粋な改行正規化、バイナリは一切不変更)
  • 変更ファイル: .gitattributes(新規)、beatoraja-config.batbeatoraja-config32.batsrc/bms/player/beatoraja/audio/PortAudioDriver.java ほか計 10 件

テスト

  • xvfb-run -a ./gradlew test --rerun-tasks : 成功(全 9 タスク実行、compile + test green)
  • 再チェックアウトで gradlew/scripts/*.sh = LF、*.bat = CRLF を確認

関連 MR

  • !40 (feature/208 → develop)、マージコミット 399bd8d

他の形式にエクスポート: PDF Atom