めちゃくちゃ。いつかまとめる。
成果物
コード
ローカルリポジトリ
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は以下。

というか、ヘルプにあるパス版のURLって以下のうちどっちなの? 名前指定するからどうでもいいのだが。
https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_FILE_PATH>/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という緑色のバッジになった。カッコイイ!

所感
バッジが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

