GitHub ActionsでbrewとXcodeがない,素のクリーンなmac環境を作ろうとしたら,若干迷った(主にhomebrewのアンインストール)ので,備忘録として残しておきます.
恐らくdotfileを作る状況ぐらいでしか,需要はないと思われれますが,同じ様に困っている人の参考になればと思います.
背景
新しくmacが手に入ったので,早速環境構築がてらdotfilesを作ったのですが,テストを行うにはクリーンなmac環境が必要です.
LinuxならdockerやらWSLなど,環境を用意するのはどうとでもなります.
では,macはどうでしょう?
「流石にgithub actionsには,mscをruns-onで指定できないだろう」と思っていた時期が私にも有りました.
調査すると,なんと!以下で用意できることを発見.
runs-on: macos-latest
まじかよ!
親切に,本ランナーにはbrewやらxcode君がついてきてしまう
しかし,私はdotfilesの中でbrewやxcodeのインストールも自動化したい.
そこで,これらをアンインストールすることにしました.
なお,本記事では後述する問題?(個人が気に入らないだけ)があるので,過剰な部分があります.いらないと思ったら,適宜コメントアウトなどで外してください.
方法だけ知りたい人は方法に飛んでください.
発生した問題?
まず公式の言うようにjobで以下を実行します.
/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を作る状況ぐらいでしか,需要はないと思われれますが,同じ様に困っている人の参考になればと思います.


コメント