GitHubActionを試してみる1
めちゃくちゃ。いつかまとめる。
成果物
コード
ローカルリポジトリ
Program.cs
using System; class Program { static void Main() { Console.WriteLine("Hello world"); } }
リモートリポジトリ
以下の手順で自動生成されたデフォルト設定ファイルをコミットする。
以下のような設定ファイルが自動で生成されていた。
dotnetcore.yml
name: .NET Core on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Build with dotnet run: dotnet build --configuration Release
Start commit
ボタンをクリックするcommit new file
ボタンをクリックする
ローカルリポジトリ
設定ファイルのダウンロード
リモートの状態をダウンロードする。
git pull origin master
以下のパスに設定ファイルがダウンロードされる。
.github/workflows/dotnetcore.yml
ステータスバッジの追加
ReadMe.mdに以下のコードを追記する。
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_FILE_PATH>/badge.svg
注意。dotnetcore.yml
ファイルにname: .NET Core
と設定されている。name
が設定されているときは、<WORKFLOW_NAME>
による方法でのみ作成可能らしい。同様に、name
が設定されていないときのみ、<WORKFLOW_FILE_PATH>
による指定ができる。
今回はデフォルト通りにname
が設定されている。よって名前指定による方法を用いる。
半角スペースをURLエンコードすると%20
になる。よってURLは以下。
![](https://github.com/ytyaru/CSharp.GitHubAction.20191117075439/workflows/.NET%20Core/badge.svg)
というか、ヘルプにあるパス版のURLって以下のうちどっちなの? 名前指定するからどうでもいいのだが。
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_FILE_PATH>/badge.svg ![](https://github.com/actions/hello-world/workflows/.github/workflows/main.yml/badge.svg)
ちなみに設定ファイルのパスは./.github/workflows/*.yml
となっているため、上記のどちらでもない……。
よし、push
して確認しよう。と思ったらエラーでした。何も表示されず。
実行時エラー
push
したあとリモートリポジトリを見てみると、ビルドエラーになっていた。☓
アイコンをクリックすると詳細ポップアップが出た。
さらにポップアップにあるDetails
リンクをクリックすると、ビルドログが閲覧できた。
MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
あ、そうか。.csproj
ファイルがないからdotnet
コマンドでビルドできないのか。
ローカルでは以下のようにcsc
コマンドでビルド&実行できるのだが。
csc *.cs chmod 755 *.exe ./*.exe
これをGitHubActionサーバで実行するにはどうすればいいんだ?
cscビルド用ワークフロー作成
おそらく以下の書式に従えばいい。だが、さっぱりわからん。
dotnetcore.yml
を参考にしてそれっぽく書いてみる。
csc.yml
name: csc on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Build with csc run: csc *.cs
よく見るとdotnetのバージョンが古い。2.2.108
。3.0.100
が欲しいのだが。一旦放置。
修正後push
するも、またエラー。ソースコードが見つからないらしい。
error CS2001: Source file '*.cs' could not be found. warning CS2008: No source files specified. error CS1562: Outputs without source must have the /out option specified
working-directory
ググったら以下のように作業ディレクトリを設定できるらしいことを発見。
working-directory: src
ソースコードがあるディレクトリパスを上記コードにて指定する。今回はsrc
。
csc.yml
name: csc on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Build with csc working-directory: src run: csc *.cs
name
の値をcsc
に変更した。ステータスバッジ表示URLも同様に修正する。後述のように。
ステータスバッジの確認ができた!
最初はno status
と灰色のバッジだった。
数分後にページ更新するとpassing
という緑色のバッジになった。カッコイイ!
![](https://github.com/ytyaru/CSharp.GitHubAction.20191117075439/workflows/csc/badge.svg)
所感
バッジがSVG形式なのも嬉しい。できれば設定ファイルへのリンクも欲しいのだが、後回し。次はdotnet3.0.100バージョン環境を用意できるか確認したい。
CIって
CIって必要なの?
ところで、このActionをローカルで実行できないの? 基本的にローカルで開発するのだからビルドもローカルで行うはず。それをわざわざサーバ側で再ビルドする必要などあるのか?
もちろんpush
するたびに自動確認してくれるのは嬉しい。でも、それはpush
する前にローカルで手動でやってるんですが……。そこを自動化したいんですが……。自分でコマンド簡略化スクリプトとか作っちゃってるんですが……。push
する前にビルド結果を知りたいのですが……。
今の所、私の中でGitHubActionは「なんかカッコイイバッジ作れるヤツ」ってレベル。そのために面倒な設定ファイル作成せねばならないのが辛い。
CIって何なの?
きっと私がCIとやらの概念を理解できていないせいなのだろう。そしてそれが欲しくなるほどの規模や価値あるコードが書けていない私にとっては、豚に真珠、猫に小判なのだろう。
でもバッジのため、設定ファイルを自動作成するスクリプトをローカルで作りたい。こうして無駄な仕事と二酸化炭素排出量が増えていくのであった。CIはカーボン・インクリメントの略に違いない。
というか、CIの説明にあるエクストリーム・プログラミングってなんだよ。エクストリーム・アイロニング的なやつ? 会長から人生の神髄が学べるらしい。悟り開く感じかな。CIは覚醒まで一直線の略だろう。ソフトウェア工学の真髄は人生哲学にありってことね。間違いない。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- SQLite 3.29.0 ※
- C# dotnet 3.0.100 ※ ※
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux