GitHub ActionsでbrewとXcodeを除いたmac環境を作る

環境構築

GitHub ActionsでbrewとXcodeがない,素のクリーンなmac環境を作ろうとしたら,若干迷った(主にhomebrewのアンインストール)ので,備忘録として残しておきます.
恐らくdotfileを作る状況ぐらいでしか,需要はないと思われれますが,同じ様に困っている人の参考になればと思います.

背景

新しくmacが手に入ったので,早速環境構築がてらdotfilesを作ったのですが,テストを行うにはクリーンなmac環境が必要です.
LinuxならdockerやらWSLなど,環境を用意するのはどうとでもなります.
では,macはどうでしょう?
「流石にgithub actionsには,mscをruns-onで指定できないだろう」と思っていた時期が私にも有りました.
調査すると,なんと!以下で用意できることを発見.

runs-on: macos-latest
GitHub ホステッド ランナー リファレンス - GitHub ドキュメント
GitHub ホステッド ランナーに関する情報 (仕様やカスタマイズ オプションなど) について説明します。

まじかよ!
親切に,本ランナーにはbrewやらxcode君がついてきてしまう
しかし,私はdotfilesの中でbrewやxcodeのインストールも自動化したい.
そこで,これらをアンインストールすることにしました.
なお,本記事では後述する問題?(個人が気に入らないだけ)があるので,過剰な部分があります.いらないと思ったら,適宜コメントアウトなどで外してください.
方法だけ知りたい人は方法に飛んでください.

発生した問題?

まず公式の言うようにjobで以下を実行します.

GitHub - Homebrew/install: 📥 Homebrew (un)installer
📥 Homebrew (un)installer. Contribute to Homebrew/install development by creating an account on GitHub.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

実行すると以下のようになります.

Uninstalling Homebrew...
Warning: This script will remove:
/etc/paths.d/homebrew
/opt/homebrew/.claude/
...中略...
/opt/homebrew/README.md
/Users/runner/Library/Caches/Homebrew/
/Users/runner/Library/Logs/Homebrew/
==> Removing Homebrew installation...
Warning: Failed to delete /etc/paths.d/homebrew
rm: /etc/paths.d/homebrew: Permission denied
==> Removing empty directories...
==> /usr/bin/sudo /usr/bin/find /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/opt /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/Frameworks -name .DS_Store -delete
==> /usr/bin/sudo /usr/bin/find /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/opt /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/Frameworks -depth -type d -empty -exec rmdir {} ;
==> Homebrew uninstalled!
The following possible Homebrew files were not deleted:
/opt/homebrew/AGENTS.md
/opt/homebrew/bin/
/opt/homebrew/CLAUDE.md
/opt/homebrew/etc/
/opt/homebrew/lib/
/opt/homebrew/share/
/opt/homebrew/var/
You may wish to remove them yourself.

結果を見て分かる通り,公式の手順に沿ってアンインストールすると,permissionで蹴られたりして消しきれないファイルがあり,困りました.
多分,消しきれない物が在ったとしても,アンインストール自体は成功している?ので,問題ないのだろうけど,どうにも気持ち悪い.
ということで,消しきれなかったものを抹殺します.

方法

ということで,以下が最終的なgithub actionのworkflowになります.

name: clean up

on:
#トリガーはお好みで
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      msg:
        type: string
        required: false
        description: "any message"
jobs:
  test-macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Uninstall pre-installed tools (Simulate fresh OS)
        run: |
          echo "Uninstalling Homebrew..."
          /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
          sudo rm -f /etc/paths.d/homebrew
          sudo rm -rf /opt/homebrew
          echo "Uninstalling xcode..."
          sudo rm -rf /Library/Developer/CommandLineTools
          echo "Simulated a fresh macOS environment."
#以下お好みのジョブやらを追加

これをリポジトリの.github/workflow.ymlとして入れてあげて,pushすれば動くはずです.

終わりに

今回は,GitHub ActionsでbrewとXcodeが無い素のmac環境を作を作りました.
冒頭で述べたようにdotfileを作る状況ぐらいでしか,需要はないと思われれますが,同じ様に困っている人の参考になればと思います.

コメント

タイトルとURLをコピーしました