Skip to content

TAKT: 実行環境の共通化(環境変数注入)で Gradle/npm の権限エラーを解消 #274

@nrslib

Description

@nrslib

背景

TAKT 実行中に Gradle で NativeServices.createSystemInfo(): Operation not permitted が発生し、テストが停止する事象が継続発生している。
同系統の問題は npm/pnpm 等でも cache/tmp 書き込み時に再現しうる。

問題

  • ツールごとに作業ディレクトリ外へ書き込みに行く(HOME, tmp, cache)
  • sandbox/権限制約下で EACCES / Operation not permitted が発生
  • 対症療法がツール単位で増え、運用コストが上がる

目的

Gradle だけでなく npm/pnpm/maven/pytest などを含め、TAKT の実行基盤で一貫して権限問題を回避する。

提案

1. post-clone で実行基盤を準備

  • .runtime/tmp
  • .runtime/cache
  • .runtime/config
  • .runtime/state
  • .runtime/env.sh(共通 env 定義)

2. 各ムーブメント実行前に共通 env を毎回注入

  • source .runtime/env.sh もしくは共通ランナー run-command.sh 経由
  • post-clone の一回実行だけに依存しない(再キュー/再開時の取りこぼし防止)

3. 共通 env(例)

  • TMPDIR=.runtime/tmp
  • XDG_CACHE_HOME=.runtime/cache
  • XDG_CONFIG_HOME=.runtime/config
  • XDG_STATE_HOME=.runtime/state
  • CI=true

4. ツール固有 env(最小)

  • Gradle: GRADLE_USER_HOME=.runtime/gradle, -Djava.io.tmpdir=.runtime/tmp
  • npm: npm_config_cache=.runtime/npm
  • pnpm: PNPM_HOME=.runtime/pnpm(必要に応じて store path も固定)

受け入れ条件

  • TAKT 経由実行時に env が注入されていることをログで確認できる
  • .runtime/* 配下にのみ cache/tmp/state が生成される
  • Gradle テストで NativeServices...Operation not permitted が再現しない
  • npm/pnpm でも権限系エラー(EACCES)が再現しない

確認手順

  1. 軽量タスクで echo $TMPDIR $GRADLE_USER_HOME $npm_config_cache を出力
  2. find .runtime -maxdepth 3 -type d で生成先を確認
  3. ./gradlew test / npm test を TAKT から実行して再現有無を確認

補足

根本対応は「ツール別パッチ」ではなく、実行基盤の共通化で行う。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions