次ログ

次ログ

ゆるりと働いているSREの技術ブログのような何か。趣味の話も書く

Windows環境でgoreleaserを使用してGitHubにデプロイしてみた

前書き

どうもです。

以前Ubuntu環境でgoreleaserを使用してGitHubにデプロイする作業について記事を作成しましたが、今回はそれのWindows環境版です。

前の記事については下記を参照してください。 http://usernameon666.hatenablog.com/entry/2017/10/08/125842

やってることはほとんど同じですが、デプロイのスクリプトbashでやってるかPowerShellでやってるかという違いだけですね。

開発環境

項目
OS Windows 10 Home
Go version 1.9.2
使用スクリプト PowerShell

成果物

game-manager
ゲームのプレイ時間を記録してCSVファイルとして保存するTUIアプリ

わざわざ作るほどのものでもないのですが、まぁ勉強用ということで...
同様のゲームのプレイ時間が把握できるもので僕が使用したことがあるのは SteamやMoeL2などがあったのですが、あれと同じようなもので ターミナル上で動作するものを作成してみたかったんです。

「みんなのGo言語」に登場したtermbox-goとHOME配下のconfigフォルダにデータを格納する手順を勉強するために作成しました。

リリース手順

GitHubリポジトリの作成

今回は下記の通り game-manager というリポジトリを作成しました。 https://github.com/jiro4989/game-manager

GoReleaserの設定ファイルの作成

.goreleaserという設定ファイルを$env:GOPATH/src/game-manager配下に作成します。

PS C:\Users\username\go\src\game-manager> pwd

Path
----
C:\Users\username\go\src\game-manager


PS C:\Users\username\go\src\game-manager> ls


    ディレクトリ: C:\Users\username\go\src\game-manager


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2017/12/24     20:05                data
d-----       2017/12/24     20:55                dist
d-----       2017/12/24     19:59                game
d-----       2017/12/24     20:51                res
d-----       2017/12/24     20:54                script
-a----       2017/12/24     20:48             19 .gitignore
-a----       2017/12/24     20:22            322 .goreleaser.yml
-a----       2017/12/24     20:04           5082 game-manager.go
-a----       2017/12/23      5:53            622 README.md

.goreleaserに設定を記入

.goreleaser.ymlの中身を下記の通りにする。

builds:
  - binary: game-manager
    goos:
      - windows
      - darwin
      - linux
    goarch:
      - amd64
      - 386
archive:
  format: tar.gz
  replacements:
    amd64: 64-bit
    darwin: mac
    linux: linux
  name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
  files:
    - README.md

デプロイスクリプトを作成

$env:GOPATH\src\game-manager\scriptに下記の内容のデプロイ用のPowerShellスクリプト"deploy.ps1"を作成します。

※別にスクリプトを作成しないといけないわけではないです。

git tag $args[0]
$env:GITHUB_TOKEN = cat ".\res\token.txt"
goreleaser --rm-dist
go install

GitHubのアクセストークンを配置

$env:GOPATH\src\game-manager\res\token.txtというテキストファイルを作成して、GitHubのアクセストークンを貼り付けます。 あんまりこういう運用方法って良くないと思いますけれど、まぁ個人で行う分には気にしないことにしています。

.gitignoreを作成する

デプロイするバイナリとtoken.txtがリポジトリ上に見えてしまうとまずいので それらを除外するように設定します。

.gitignoreの中身は下記のとおりです。 配置するパスは$env:GOPATH\src\game-managerです。

token.txt
/dist/

スクリプトを実行する

下記のパスがカレントディレクトリであることを確認します。

PS C:\Users\username\go\src\game-manager> pwd

Path
----
C:\Users\username\go\src\game-manager

下記のコマンドを実行します。
.\script\deploy.ps1 v1.0.0
※v1.0.0はタグ情報になるので、アップデートするたびに番号を更新する必要があります。

あとはひたすら待機...

PowerShell環境だと、制御コードがむき出しで表示されてパッと見バグったか失敗したように見えることがありますが、正常に動いているので、信じて待ちます。

リリースの確認

GitHubのリリースページを確認しにいきます。 https://github.com/jiro4989/game-manager/releases