やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

GitHubアップロード自動化バッチと課題

自動化バッチの合体とその課題。

入手先

GitHub Yahoo

  • MEGAがまたしても使えない

バッチ

GitHubアップロードの自動化

以前のローカルリポジトリ作成バッチと、前回のリモートリポジトリ作成バッチを合わせる。

ローカルリポジトリ作成バッチの先頭で、リモートリポジトリ作成バッチを呼び出す。

:: リモートリポジトリを生成する
call CallCreateRepository.bat

callで呼び出すことで同期呼出となる。WebAPIの応答が完了してから続きを実行できる。

FirstPush.batを実行すると、ローカルとリモートの両リポジトリ作成までやってくれる。

リモート・リポジトリ削除

ついでにリモート・リポジトリを削除するバッチも用意した。

課題

  • パラメータにすべき項目が整理できていない
  • パラメータ値を定義し、取得する方法を確立したい
  • パラメータ値が多重定義されてしまっている
  • リポジトリ名のエラーチェックができていない
  • コミットメッセージにUTF8な日本語を送信したい
  • 認証をBasicからAccessTokenにしたい
  • バッチファイル数が4つもあって邪魔

パラメータにすべき項目が整理できていない

ファイル間で重複するであろう項目

変数 CreateRepository.sh CallShell.bat FirstPush.bat
GIT × ×
CURL × ×
NKF ×
CURL_PEM × ×
CURL_POST_PARAMETER_FILE × ×
GitHub_User ×
GitHub_Pass ×
GitHub_Mail ×
REPO_NAME ×
REPO_DESC × ×
REPO_HOME × ×
SSH_HOST × ×
COMMIT_MESSAGE × ×

パラメータ値を定義し、取得する方法を確立したい

  • GitHubのアカウントはTSVファイルに定義し、バッチやシェルはTSVから値を取得したい
  • パラメータSSH_HOSTは、C:\Documents and Settings\Administrator\.sshconfigファイルにおけるHost定義のどれかと一致しているかチェックしたい

パラメータ値の多重定義

.batと.shのパラメータ設定が重複している。

同じパラメータなのに、それぞれ別々に定義している。 だから各ファイルをそれぞれ修正せねばならない。

同じパラメータの修正は1箇所で済むようにしたい。

重複している項目

  • username
  • REPOSITORY_NAME

べつのユーザのリポジトリを操作したいとき、2ファイルを修正する必要がある。

同じことを何度も書かせるお役所仕事のようで最悪。 写し間違えたら、対象リポジトリが変わるため正しく動作しなくなる。

リポジトリ名は.batと.shの構文でディレクトリ名を取得している。 こういう違いも面倒。一つに統一したい。

重複してしまう理由

.batから.shへ起動引数として渡せばいいはず。 しかし、descriptionに日本語を使用するせいか通らなかった。

.batと.shの間では文字コード問題が発生してしまうのかもしれない。 .batのファイル文字コードはCP932、.shのファイル文字コードUTF-8である。

そもそも、curlコマンドが.batから実行できれば.shに分ける必要もなかった。 curlコマンドがMinGW/msysでコンパイルされたバイナリしか動作しないせいで面倒なことになっている。

リポジトリ名のエラーチェック

リモートリポジトリ名に使える文字は制限されている。

そのチェックをしたい。

使用できる文字

種類
記号 _-.
半角英数字 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

コミットメッセージにUTF8な日本語を送信したい

現状、コミットメッセージには英数字しか送信できない。

GitHubUTF-8だが、.batファイルとコンソールがCP932(Shift-JIS)なため、文字化けしてしまう。

認証をBasicからAccessTokenにしたい

スクリプトファイルに直接パスワードを記述しているので危険。

  • パスワードを直接扱うので危険
    • アカウントが乗っ取られる可能性がある

AccessTokenなら漏洩してもパスワードよりは危険性が低い。

  • AccessTokenはボタン一発で再発行して無効化できる
  • scopeで操作範囲を制限できる

バッチファイル数が4つもあって邪魔

  • 肝心のソースコードプロジェクト以外のファイルがたくさんあると邪魔
  • どれを実行すればいいのか迷う

所感

GitHubアップロード作業を軽減できた。

実用にはまだかなり課題があるが、とりあえず使えた。