skickaというGoogle Drive APIを便利に使うためのコマンドラインツールがあります。
使えるようになるために一苦労あったので方法をメモ。
go環境構築
skickaはgoで動くので実験用にdockerでgolangの環境を作ります。
docker pull golang
docker run -itd golang
docker attach {コンテナ名}
これでgo環境ができました。
Google Drive API用のOAuth認証情報の作成
- GCPコンソールで適当なプロジェクト作成(既存があればそれでよし)
- Google Drive APIを有効化
- (なければ)OAuth同意画面を設定(スコープはGoogle Driveの./auth/docs, ./auth/driveがあれば十分だった)
- OAuth Clientの認証情報を新規作成(種類:テレビと入力が限られたデバイス)
- 作成したクライアントIDとシークレットはあとの手順で使います
skickaインストールと認証
go get github.com/google/skicka
skicka init
apt-get update
apt-get install vim
vim /root/.skicka.config
# skicka.configに生成されたクライアントIDとシークレットを追記し、コメントインする。
skicka -no-browser-auth df
# URLが表示されるのでブラウザにペーストし、Google Driveへのアクセスを許可する
# ブラウザに表示された認証コードをskickaのコンソールにペースト
dfの結果が以下のように表示されればOKです
Capacity 15.00 GiB
Trash 0 B 0.00%
Drive 209.70 MiB 1.37%
Gmail 2.47 GiB 16.47%
Photos 598.67 MiB 3.90%
Free space 11.74 GiB 78.27%
Github actionでGoogle driveにファイルをアップロードする
Github actionsでGoogle driveにファイルをアップロードするにはInteract with Google Driveというactionを使用します。
認証情報として skicka-tokencache-json
に 上記の認証手順で /root/.skicka.tokencache.json
の文字列を指定します。
またOauthの情報として google-client-id
と google-client-secret
も指定します。
正しく認証情報が指定されていれば以下のようなコマンドでファイル/ディレクトリをアップロードすることができます。
- name: Upload to Google Drive
uses: satackey/action-google-drive@v1
with:
skicka-tokencache-json: ${{ secrets.SKICKA_TOKENCACHE_JSON }}
upload-from: ./
upload-to: /path/to/upload
# For those who set up Google Drive API client ID and secret themselves
google-client-id: ${{ secrets.GOOGLE_CLIENT_ID }}
google-client-secret: ${{ secrets.GOOGLE_CLIENT_SECRET }}