続・PackSquash
PackSquash本体(単体)の使い方を書いていた1年前の記事はこちら。
この記事は事実上の続編です。
PackSquash-Actionとは
「PackSquash」はMinecraftのリソースパックやデータパックを高効率圧縮するオープンソースソフトウェアです。(この辺は前記事を見てくれ)
「PackSquash-Action」はこのPackSquashをGitHubのActions上で動かすことができるレポジトリです。
私は別にプログラマでもなんでもないので、GitHubについて何も知らんわけですけど、簡単に言うと、PackSquash-ActionはGitHubで管理してるリソースパックのレポジトリが更新されたりリリースを作成したタイミングでPackSquashによる圧縮を行なって、完成物を置いておいてくれるようにできます。
共同管理上の課題
『「PackSquash」を使ってマイクラのサーバーリソースパックの中身を見られないようにする』以降、管理しているマイクラサーバーに使っているサーバーリソースパックはPackSquashの圧縮をローカルで行なってから更新するようにしていました。また、今年に入ってからはでファイルをいじる制作者が増えたので、ローカルで管理していた開発用データをGitHubで管理するようになりました。
データはGitHubで共有するようにしていたものの、リリース毎にPackSquashで圧縮をかけるのは私のローカルにあるPackSquashで手動で行っていたので、共同制作者一人でリソースパックを配信する作業ができない問題が生じてきました。
ここでふとPackSquash-Actionの存在を思い出したので調べてみたところ、自分の理想形の機能がついていたので使えるようにしてみました。
リソースパックのリリースを自動化しよう
この記事を書こうとしたタイミングでPackSquashのバージョンが0.3.1から0.4.0に更新され、ワークフローファイルの記述が変更されました。
実際の時系列とはずれますが、ここで書いているものはv0.4.0でのファイルです。
やりたいこと
とりあえず、現状の更新作業はこんな感じ。
- 各自更新内容をGitHubのプライベートレポジトリにプッシュ
- 自分がローカルにあるPackSquashを実行させて圧縮
- GitHubでリリースに出力されたリソースパックデータを添付して作成
- 出力されたリソースパックデータをマイクラサーバーのDiscordに送信(一般的なリソースパックと同じ要領で使いたい人のために素データを置いておく)
- サーバー所有者にお願いして、ログイン時に配信されるリソースパックデータを置き換えてもらう
- マイクラサーバーに接続し、更新適用コマンドを実行
手作業が多く、自分だけでできる範囲はまだいいものの、5番はサーバー所有者が忙しいこともあってログイン時に適用されるパックの方だけ古いまま、ということが長く続いていました。数日単位でリリースを更新することも増え、さらに拍車がかかる感じ。
なので、
- 各自更新内容をGitHubのプライベートレポジトリにプッシュ
- GitHubでリリースを作成
- リリース作成を検知したら、PackSquash-Actionで圧縮を行い、リリースページに圧縮済みパックデータを後付け(自動)
- 続けてActionsで、圧縮済みパックデータをDiscordの特定チャンネルに送信(自動)
- さらに続けて、圧縮済みパックデータをファイルサーバーにSSHで送信し、上書き(自動)
- マイクラサーバーに接続し、更新適用コマンドを実行
にして、GitHubのコラボレーターなら誰でもサーバーリソースパックを更新できるようにしてみる。
Workflowファイルの編集
GitHubのActions機能自体がどういうものか全く知らなかったのですが、奇跡的に日本人の方がPackSquash-Actionのテンプレートレポジトリを公開されていました。これを見て研究。
- on: [push] → プッシュを検知したら開始
- リソースパックをPackSquashでOptionを使用して圧縮
- リリースを作成したことによるプッシュならば続行
- Discordで配信するファイルにはバージョン表記を付けたいので、タグから名前(バージョン)を取得
- 2で作成した圧縮済みリソースパックをダウンロード(内部)
- サーバーから配信するサーバーリソースパックを置き換えたいので、既存のファイルを削除する
- 新しいバージョンを前のファイルと同じ名前でアップロードする
- Discordで配信するためにファイルをバージョン表記付きの名前に変更
- バージョン表記付きファイルを作成したリリースに後添付
- Discordの配布用チャンネルにファイルを送信
- Discordのお知らせ用チャンネルに更新したことを伝えるメッセージを送信する
- 終了
実際には、レポジトリにある.github > workflowsの中にymlファイルを作成して、こんな感じに書き込みます。ファイル名、name:の名前はお好みで。
SSHで接続するアドレス、ユーザー名、パスワードやDiscordのボット用Webhook IDはあらかじめSecretsに登録してプレースホルダによる置き換えができます。
name: Optimize Resource Pack
on: [push]
jobs:
packsquash: # プッシュしたとき
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: PackSquashで圧縮
uses: ComunidadAylas/PackSquash-action@v4
with:
artifact_name: 'Optimized pack' # 名前を変更しないこと
packsquash_version: latest # packsquashバージョン指定
options: |
pack_directory = '.' # ディレクトリ位置を変更しないこと
recompress_compressed_files = true
zip_compression_iterations = 25
automatic_minecraft_quirks_detection = true
allow_mods = ['OptiFine', 'Minecraft Transit Railway 3']
validate_pack_metadata_file = true
ignore_system_and_hidden_files = true
zip_spec_conformance_level = 'disregard'
size_increasing_zip_obfuscation = true
percentage_of_zip_structures_tuned_for_obfuscation_discretion = 0
never_store_squash_times = true
release: # リリースを作成したときに続行
runs-on: ubuntu-latest
needs: [packsquash]
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v3
- name: タグ名の取得
run: echo "TAG_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # ref名を取得
- name: タグ名の定義 # env.TAG_NAMEがタグ名になるように定義
run: |
echo "${TAG_NAME}"
echo "${{ env.TAG_NAME }}"
- name: 圧縮済みファイルをダウンロード# 圧縮済みのデータをダウンロード
uses: actions/download-artifact@v2
with:
name: Optimized pack
- name: FTPで前のバージョンのファイルを削除
uses: StephanThierry/ftp-delete-action@v2.1
with:
host:
user:
password:
remoteFiles: "aaaapack.zip"
ignoreSSL: "1"
- name: FTPでファイルをアップロード
uses: bayssmekanique/action-simple-file-upload@v1
with:
user:
password:
host:
port:
src: pack.zip
dest: ./aaaapack.zip
- name: パック名をバージョン付きに変更 # ダウンロードしたパックの名前を変更
run: mv pack.zip aaaapack_v${{ env.TAG_NAME }}.zip
- name: 作成したリリースに追加 # 作成したリリースに圧縮済みパックを追加
uses: softprops/action-gh-release@v1
with:
files: |
aaaapack_v${{ env.TAG_NAME }}.zip
- name: Discordにファイルを送信 # Discordのリソパチャンネルにメッセージとファイルを送信
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.WEBHOOK_URL_RESOUCEPACKCHANNEL }}
filename: aaaapack_v${{ env.TAG_NAME }}.zip
content: "サーバーリソースパックが更新されました!ローカルファイルはこちらからダウンロードしてください。"
- name: Discordにお知らせを送信 # Discordのお知らせチャンネルに通知を飛ばす
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.WEBHOOK_URL_ANNOUNCEMENT }}
content: "サーバーリソースパックがバージョン${{ env.TAG_NAME }}に更新されました!ローカルファイルは<#DiscordチャンネルID>からダウンロードできます。"
コメント