2018年2月26日月曜日

git でブランチの総数を数える

やり方
git branch --remote | wc -l

なぜこんなことを?
今これを読んでいる方も同じ理由ではないかと思うのですが、
理由は開発しているプロダクトのブランチ数が多すぎてヤバイからです。

そして、その課題に対して対応した方の記事もこちらにあります。
多すぎるブランチをまとめて削除するためにやったこと - Qiita
私もどうにかしたいという気持ちがあり、たまたまなんとなーく数えてみようと思って検索したら、ヒットしました。

これそのまま使えそうだなと思いました。

Jenkins とかで定期的に実行して、マージ済みだったら問答無用で削除、マージされてなかったらリストアップしてメッセージ飛ばすとか、プルリク投げてたら除外するとか、するといいかも。
あとは、動作検証するときは git push -n で dry run にしとけば安全そう。
もしスクリプト書いて動かしてみたら、ここに追記するかもしれません。


ちなみに、数えてみた結果は言えません。。。
(289...少ないって思った...)

では。

2018年2月19日月曜日

[CI] Codefresh の Use YAML from URL が便利だった

CI サービスのジョブの定義といえば YAML か WEB 上での設定がほとんどだと思います。
それぞれにメリットがあり、YAML の場合は as Code でコードと CI が紐づく点、WEB の場合は変更が容易な点でしょうか。

WEB 上で設定可能、かつ、その設定を YAML にエクスポートできるサービスもあります。
個人的には、この形がベストかなーと思っていて、
CI のステップを定義していくときはトライアンドエラーで何回も繰り返すことが多いので、WEB 上ですぐに変更・実行できるメリットが大きいです。
さらに、確定したステップを YAML としてエクスポートすれば as Code の恩恵も受けられます。
(最初から YAML 書くのはハードル高かったりしますしね)

Use YAML from URL
さて、先日 Codefresh を見直す機会ちょうどあり(その時の記事→「[CI] Codfresh で git clone に失敗した場合にすること」
そのときに気づいたのですが、Codefresh では「Use YAML from URL」で任意の URL を指定して、そこの YAML を使ってステップ定義することができます。
これは便利だなーと思いました。(公式ヘルプ

この機能を使うことで、Gist にある YAML を使うことができるようになります。
(履歴を残しつつ、リポジトリを汚さずに yaml の編集が容易にできるようになるので、個人的に嬉しい)
公式ヘルプでは、複数のパイプラインで1つの YAML を使う方法として紹介されています。
複数リポジトリで同じ YAML を使うケースでは管理が1つになるので、これまた便利です。

やり方
では、やり方を見ていきましょう。といっても、やることは簡単で、Gist で YAML を用意するのと、Codefresh の設定に Gist の URL を入れるだけです。

まずは、Gist で YAML ファイルを作成します。
作成したら、「Raw」ボタンを押します。


開いた URL を Codefresh に設定するのですが、ここで開かれるのはリビジョンを含んだ URL なので、そこの部分を削除した URL を使うと変更に追従できるようになります。

https://gist.githubusercontent.com/srz-zumix/38581f1437aa4239fcb7f7b2580cb33c/raw/0cfe000b27f15eb140bb92f3fa02215d56966303/iutest_codefresh.yml

https://gist.githubusercontent.com/srz-zumix/38581f1437aa4239fcb7f7b2580cb33c/raw/iutest_codefresh.yml


URL をコピーしたら、Codefresh の設定を変更しましょう。
「Pipelines」の「WORKFLOW」で YAML を選択し、「Use YAML from URL」をチェックします。

「YAML URL」にアドレスを入力します。先程コピーした URL を貼り付けましょう。(今回は GIst でしたが、yaml ファイルが取得できれば他のアドレスでも可能です)
設定を保存したら、完了です。

最後に
この機能便利なので、他のサービスでも使えたらうれしいですね。特に設定が YAML のみで WEB 上で設定できないサービスにあると嬉しいです。
(inline YAML より対応もしやすそうだし)
Codefresh は今無料枠を使い切ってしまって何もできないので、回復したらこの機能を積極的に使っていこうと思います。

今回は以上です。
では。

2018年2月13日火曜日

[CI] Codfresh で git clone に失敗した場合にすること

.gitattributes で EOL の設定を変えたところ、Codefresh のビルドで git clone ステップ中にローカル差分が出た影響で更新に失敗していました。


他のサービスでは特に問題がなかったのですが、Codefresh でのみ発生した問題です。
(ちゃんと理解してないのですが…)Codefresh は Docker コンテナ上でビルドされて、これがキャッシュされているのが原因と思われます。

yaml の設定で対応できるかなーと探したのですが、どうやら yaml 設定ではできそうもなく、
手動ビルドしたときの設定で対応できそうだったので、試してみました。

Disabling codefresh caching mechanisms
まずは、キャッシュを無効にしたら直るかなと思ったので、そちらから試しました。
やり方は以下のヘルプに記載されています。
Disabling codefresh caching mechanisms

Pipelines タブの下部にビルドボタンがあるので、まずそこをクリックします。


ビルドするブランチとパイプラインの選択ポップアップが出てきます。そこに、「ADVANCED OPTIONS」があるのでクリックします。


開いたオプションの中に、「Ignore cache for build」があるのでチェックを入れ、ビルドを実行します。
これでキャッシュクリアした状態でビルドがされるはずです。


結果は失敗でした。。。


Restoring data from pre-existing image hangs on
続いて、キャッシュクリアの直ぐ下にあった、ボリュームのリセットを試してみました。
ボリュームのリセットについては、以下にヘルプがあります。
Restoring data from pre-existing image hangs on

手順は先程とほぼ同じです。「ADVANCED OPTIONS」を開くときに今度は「Reset pipeline volume」にチェックを入れて、ビルドを実行します。


結果、成功しました!


最後に
なかなか git clone のステップで失敗することはないと思いますが、参考になれば幸いです。
そして、数ヶ月後に自分自身がこの記事のお世話にならないことを祈ります。
(今回は .gitattributes をいじったことが起因なのでそうそう起こらないはず…)

では。

2018年2月6日火曜日

Unity で警告を一括抑制する方法

Unity - マニュアル: PlatformDependentCompilation (current)
Unity のマニュアルにあるように、mcs.rsp ファイルで制御します。
※ mcs.rsp は以前のバージョンでは、smcs と gmcs に分かれていたようです。
Unity - マニュアル: PlatformDependentCompilation (5.4)
ファイル名はお使いのバージョンに合わせてください。

C# 全般の抑制をしたい場合は mcs.rsp に、Visual Studio の警告を抑止したい場合は csc.rsp を
Assets フォルダーに追加します。

rsp ファイルでは警告抑止以外のことも制御することができます。(define とか)
rsp ファイルで指定できることはヘルプで確認できます。
Unity のインストールディレクトリの Editor 以下のどこかに mcs があるので、mcs --help を実行します。
※筆者環境では C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\bin にありました(Windows 10/Unity 2017.3)
C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\bin>mcs --help
Mono C# compiler, Copyright 2001-2011 Novell, Inc., Copyright 2011-2012 Xamarin, Inc
mcs [options] source-files
   --about              About the Mono C# compiler
   -addmodule:M1[,Mn]   Adds the module to the generated assembly
   -checked[+|-]        Sets default aritmetic overflow context
   -clscheck[+|-]       Disables CLS Compliance verifications
   -codepage:ID         Sets code page to the one in ID (number, utf8, reset)
   -define:S1[;S2]      Defines one or more conditional symbols (short: -d)
   -debug[+|-], -g      Generate debugging information
   -delaysign[+|-]      Only insert the public key into the assembly (no signing)
   -doc:FILE            Process documentation comments to XML file
   -fullpaths           Any issued error or warning uses absolute file path
   -help                Lists all compiler options (short: -?)
   -keycontainer:NAME   The key pair container used to sign the output assembly
   -keyfile:FILE        The key file used to strongname the ouput assembly
   -langversion:TEXT    Specifies language version: ISO-1, ISO-2, 3, 4, 5, 6, Default or Experimental
   -lib:PATH1[,PATHn]   Specifies the location of referenced assemblies
   -main:CLASS          Specifies the class with the Main method (short: -m)
   -noconfig            Disables implicitly referenced assemblies
   -nostdlib[+|-]       Does not reference mscorlib.dll library
   -nowarn:W1[,Wn]      Suppress one or more compiler warnings
   -optimize[+|-]       Enables advanced compiler optimizations (short: -o)
   -out:FILE            Specifies output assembly name
   -pathmap:K=V[,Kn=Vn] Sets a mapping for source path names used in generated output
   -pkg:P1[,Pn]         References packages P1..Pn
   -platform:ARCH       Specifies the target platform of the output assembly
                        ARCH can be one of: anycpu, anycpu32bitpreferred, arm,
                        x86, x64 or itanium. The default is anycpu.
   -recurse:SPEC        Recursively compiles files according to SPEC pattern
   -reference:A1[,An]   Imports metadata from the specified assembly (short: -r)
   -reference:ALIAS=A   Imports metadata using specified extern alias (short: -r)
   -sdk:VERSION         Specifies SDK version of referenced assemblies
                        VERSION can be one of: 2, 4, 4.5 (default) or a custom value
   -target:KIND         Specifies the format of the output assembly (short: -t)
                        KIND can be one of: exe, winexe, library, module
   -unsafe[+|-]         Allows to compile code which uses unsafe keyword
   -warnaserror[+|-]    Treats all warnings as errors
   -warnaserror[+|-]:W1[,Wn] Treats one or more compiler warnings as errors
   -warn:0-4            Sets warning level, the default is 4 (short -w:)
   -helpinternal        Shows internal and advanced compiler options

Resources:
   -linkresource:FILE[,ID] Links FILE as a resource (short: -linkres)
   -resource:FILE[,ID]     Embed FILE as a resource (short: -res)
   -win32res:FILE          Specifies Win32 resource file (.res)
   -win32icon:FILE         Use this icon for the output
   @file                   Read response file for more options

Options can be of the form -option or /option

もしくはこちらでも確認できます。(たぶん同じ(/ と - が異なるけど)
カテゴリ別の C# コンパイラ オプションの一覧 (C#)
/nowarn (指定した警告の非表示) (C#)

警告を抑止
肝心の警告抑止ですが、mcs.rsp (場合によって csc/smcs/gmcs)に以下を記述します。
-nowarn:0649

今回は以上です。
Unity の記事を書く日が来るとはねぇ。数年前の自分からは考えられないことやね。