見出し画像

TWSNMP FCのWindows版配布のためにScoopを試してみた その2

今朝は4時半から開発開始です。
昨日から始めたScoopを使ってTWSNMP FCのWindows版を配布する実験が楽しくなってきたので早く目が覚めました。
かみさんがやっているウッドデッキの補修は雨の合間の昨日の暑さを利用して塗り終わり、ほぼ完成しそうです。
私の出番は、取り替えた板を廃棄できるように短くノコギリで切ることです。1日パソコンの前の作業で腕が痛くなりますが、ノコギリを引くことで腕の運動になります。

さて、公開用のオレオレScoop Bucketの作り方

を参考にしました。
このサイトの情報を見ているうちに欲ができてきました。

  • Scoopのマニュフェストファイルを自動作成したい

  • 簡単に自動更新のチェックができるようなので対応したい

これらを実現するためにGO言語でScoopのマニュフェストを作成するプログラムを作りました。バージョンとZIPファイルをパラメータで受け取ってマニュフェストのJSONを出力するプログラムです。バージョンとHASH値だけ書き換えるます。

package main

import (
	"crypto/sha256"
	"fmt"
	"io"
	"log"
	"os"
	"strings"
)

var temp = `
{
    "version":  "$VERSION$",
    "description": "TWSNMP FC",
    "license":  "Apache-2.0 license",
    "homepage":  "https://github.com/twsnmp/twsnmpfc",
    "architecture": {
      "64bit": {
        "url": "https://github.com/twsnmp/twsnmpfc/releases/download/$VERSION$/twsnmpfc.zip",
        "hash": "$SHA256$"
      }
    },
    "bin":  ["twLauncher.exe",  "twWifiScan.exe", "twWinlog.exe", "twpcap.exe",  "twsnmpfc.exe"],
    "checkver": "github",
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/twsnmp/twsnmpfc/releases/download/v$version/twsnmpfc.zip"
            }
        }
    }
}
`

func main() {
	if len(os.Args) < 3 {
		log.Fatalln("mkscoop version zipfile")
	}
	o := strings.ReplaceAll(temp, "$VERSION$", os.Args[1])
	o = strings.ReplaceAll(o, "$SHA256$", getSHA256(os.Args[2]))

	fmt.Println(o)

}

func getSHA256(z string) string {
	f, err := os.Open(z)
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()

	h := sha256.New()
	if _, err := io.Copy(h, f); err != nil {
		log.Fatal(err)
	}

	return fmt.Sprintf("%x", h.Sum(nil))
}

GitHUBのリポジトリの情報などを変更すれば、他のソフトの公開でも使えると思います。
このプログラムで出力したマニュフェストは


{
    "version":  "v1.24.0",
    "description": "TWSNMP FC",
    "license":  "Apache-2.0 license",
    "homepage":  "https://github.com/twsnmp/twsnmpfc",
    "architecture": {
      "64bit": {
        "url": "https://github.com/twsnmp/twsnmpfc/releases/download/v1.24.0/twsnmpfc.zip",
        "hash": "40e538a959e008514a15515c5be091b99b250d52c0213eb4bdf89426667d85c7"
      }
    },
    "bin":  ["twLauncher.exe",  "twWifiScan.exe", "twWinlog.exe", "twpcap.exe",  "twsnmpfc.exe"],
    "checkver": "github",
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/twsnmp/twsnmpfc/releases/download/v$version/twsnmpfc.zip"
            }
        }
    }
}

です。
リリース版をビルドするMakefileに組み込んでZIPとマニュフェストの作成を自動化できるところまできましたが、今朝は、ここで時間切れです。

明日に続く


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。