Github Actions でclone がしたい

GitHub Actions でclone がしたい

uses: actions/checkout@v3 使ってますか? 普通はこれを使います

checkoutの挙動

調べたわけではないので、予想ですが、API経由で、tar をダウンロードしてきて

/_/orgname/reponame に ソースを配置するコマンドです

clone したい

Rails でよく使われるデプロイツールの Capistrano は、中で勝手にgit のコミットハッシュを参照するので、cap production deploy を実行するには git レポジトリ上である必要がありますが、 checkout@v3 を使うと、.git ファイルが除外されてしまいます.

解決策

  1. GitHub DeployKey というところに秘密鍵を配置
  2. GitHub Secret を使って環境変数に秘密鍵を配置
  3. こんなかんじで、secret を /root/ssh/id_ed25519 に配置してclone
name: Deploy to staging

on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    container:
      image: ubuntu:18.04
    env:
      SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
    steps:
    - name: Setup ssh key
      run: |
        set -xe
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
        echo "$SSH_PRIVATE_KEY" | tr -d '\r' > /root/.ssh/id_ed25519
        chmod 600 /root/.ssh/id_ed25519
    - name: Clone
      run: |
        set -xe
        ssh-keyscan GitHub.com >> /root/.ssh/known_hosts
        git clone git@GitHub.com:orgname/reponame.git .
        git config --global --add safe.directory $(pwd)

求むまともな方法

ホンマにこんな方法しか無いのか極めて怪しいですが、時間がないのでグロい方法で対応してしまいました・・・・ まともな情報を探しています…

この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!