Github Actionsでいろいろ困ったところと対応方法。主にシェルスクリプトを使うGitHub Actions
GitHub Actions
みなさん、GitHub Actionsで遊んでますか?
私も最近、GitHub Actionsで遊んでいるんですけど、
いくつか困ることもありまして、
この記事は、その時、困ったことの解決メモであります。
(雑な導入)
https://help.github.com/ja/actions/automating-your-workflow-with-github-actions
シェルスクリプト内で、privateなnpmレポジトリをnpm install
プレイベートなnpmレポジトリをnpm installするには、
.npmrc作るのが早い。
Settingsメニューから、Secrets設定を選んで、NPM_AUTH_TOKENを設定。
でもって、こんな感じ。
- run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.NPM_AUTH_TOKEN }}" > ~/.npmrc - name: npm install run: | npm install
シェルスクリプト内でgit clone
actionでなくて、シェルスクリプトでgitする。
ローカルで動くビルドスクリプトがあって、
それをGitHub Actionsでもそのまま使いたいケースの対応方法。
パターン1
git cloneする時、httpsでアクセスすれば、SSHの設定は要らない。
git clone git@github.com:taku-o/github-actions-workflow-demo.git ↓ git clone https://github.com/taku-o/github-actions-workflow-demo.git
パターン2
SSHのキーを設定しておけば、プライベートなGitHubレポジトリもcloneできる。
シェルスクリプトでいろいろする前に、
ssh-key-actionで、SSHの設定を入れておく。
- name: ssh key uses: shimataro/ssh-key-action@v1 with: private-key: ${{ secrets.SSH_KEY }} public-key: ${{ secrets.SSH_KEY_PUBLIC }} known-hosts: ${{ secrets.SSH_KNOWN_HOSTS }} - name: git clone run: | git clone git@github.com:taku-o/github-actions-workflow-demo.git
actions/cacheのlimitが小さくて困る
actions/cacheのキャッシュのlimitが小さい。400MB。
容量足りなくて、大きなアプリだと、一切キャッシュが効かなくなる。
でも、これぐらいならすぐに修正が入るだろう。
そう思っていた私は、issueが建ってから22日経過しているのを見て、
音速でフォークするのであった。
https://github.com/taku-o/github-actions-cache
- name: cache node environment id: cache-node uses: taku-o/github-actions-cache@v1.0.4 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-
1GBまで増やした。
ダメだわコレ。内部でtgzしてる。
よって単体でファイルサイズが400MB越えて、GitHub Actionsの制限にかかって消されちゃう(´・ω・`)
どうせやるなら、パラメータ外出しにしような
って意見もあるかもしれない。
アクションのフォーク
アクションはGitHub Actions Marketplaceに公開しなくても使える。楽でイイネ。
でも、GitHub ActionsのアクションをForkして、自分のレポジトリに持ってくると、
レポジトリの名前が大げさ(?)な感じになっちゃうね。
アクションをForkする場合は、初手名前変更安定だろうね。
actions/cache ↓ taku-o/cache ↓ taku-o/github-actions-cache (邪魔にならない感じの名前に)
actions/upload-artifact
actions/upload-artifactはzip形式でファイルをアップロードする。
でも、既にzipファイルを作ってる場合は、それをそのままアップロードして欲しいんだよ、
って少し思ったけど、
mkdir、mvすれば良かっただけだね。
これならまだ許せる。
- name: collect staging built files run: | mkdir built mv release/app.zip built - name: upload built files uses: actions/upload-artifact@master with: name: built path: built
nameは、built.zipとzip付きで指定すると、built.zip.zipが作られるぞ。
気をつけるのだ。
- name: upload built files uses: actions/upload-artifact@master with: name: built.zip path: built
gitのbranch名を取る
pushされたGitHubレポジトリのbranchの名前を取る。
GITHUB_REFの中に名前が入っている。
refs/heads/feature/window-sizeのようなフォーマット。
- name: build staging application run: | npx gulp build:staging --branch=${GITHUB_REF#refs/heads/}
Pull Requestされたコードを取る
Pull Requestされたコードを取る。
Pull Requestされたコードのテストなどで使う。
こちらもGITHUB_REFの中に名前が入っている。
refs/pull/9999/merge
- name: build pr application run: | npx gulp build:pr --pull_request=${GITHUB_REF#refs/}
実際に、Pull Requestのコードを取り込んで使うには
↓みたいなことするコードを書くことになるかな?
git clone taku-o/github-actions-workflow-demo cd github-actions-workflow-demo git pull origin pull/9999/merge
おわり
終わりなのだ。