JUCE6からCMakeで何から何までできるようになったので、Projucerの依存関係を意識する必要がなくなりました。
これで地獄のようなyamlを書く作業から開放されたのでサクッとCD組んじゃいましょう。
GitHub Actionsとは
GitHub上のアクション(Pull requestsやタグ等)からトリガーして色々やってくれるヤツです。
Privateなリポジトリだと時間制限がありますが、Publicなリポジトリだと無料で使えます。
Windows、MacOS、Ubuntuといった主要なOSが全部使えるのもえらいですね。
今回はこれを使って、新たにタグが付けられたコミットに対してAudioPluginをビルドするヤツを作ることを目標とします。
JUCEをsubmoduleに追加する
JUCEが必要なのでgit submodule
使ってリポジトリに追加します。
$ mkdir JuceWithActions
$ cd JuceWithActions
$ git init
$ git submodule add git@github.com:juce-framework/JUCE.git JUCE
AudioPluginをつくる
動けばなんでもいいので、JUCE/examples/CMake/AudioPlugin
ある物をそのまま使っちゃいましょう
$ cp -r JUCE/examples/CMake/AudioPlugin ./
CMakeをかく
実はさっきのJUCE/examples/CMake/AudioPlugin/CMakeLists.txt
にJUCE6でビルドするコードとその説明が書いてあります。
なので、詳しい解説はそちらに譲って、今回はadd_subdirectory
で利用します。
リポジトリ直下にCMakeLists.txt
を作成しましょう。
cmake_minimum_required(VERSION 3.17)
project(JuceWithActions)
add_subdirectory(JUCE) # JUCEの追加も忘れずに
add_subdirectory(AudioPlugin)
これでプロジェクトの準備は完了なので手元でビルドしてみます。
$ cmake -B cmake-build
$ cmake --build cmake-build --target AudioPluginExample_All
Actions向けのyamlをかく
./github/workflows
下にyamlファイルを置くことで、どのアクションからトリガーして何するかまで指定できます。
まずは、ここまでをGithubにもコードを上げておきましょう。
OSX向けのworkflowを書いてみます。
name: Deploy OSX
on:
push:
tags:
- v*
- o*
jobs:
deploy-osx:
env:
BUILD_DIRECTORY: cmake-build
runs-on: macOS-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: recursive
- name: Install Ninja
uses: seanmiddleditch/gha-setup-ninja@master
- name: Build
run: |
cmake -B ${BUILD_DIRECTORY} -G Ninja -DCMAKE_BUILD_TYPE=Release
ninja -C ${BUILD_DIRECTORY} AudioPluginExample_All -j 4
- name: Packaging
run: |
chmod 755 bin/packaging.sh
./bin/packaging.sh osx "${BUILD_DIRECTORY}/AudioPlugin/AudioPluginExample_artefacts/Release" "AudioPluginExample"
- name: Release
uses: softprops/action-gh-release@master
if: startsWith(github.ref, 'refs/tags/')
with:
files: pkg/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ついでにパッケージングのフローも書いてしまいます。
bin/packaging.sh
を作って…
#!/bin/sh
# usage ./pachaging.sh PRODUCT_OS PRODUCT_PATH PROUCT_NAME
cd `dirname $0`
cd ../
mkdir pkg
PRODUCT_OS="$1"
PRODUCT_PATH="$2"
PROUCT_NAME="$3-$PRODUCT_OS"
mkdir -p "pkg/$PROUCT_NAME"
cp -r "$PRODUCT_PATH" "pkg/$PROUCT_NAME"
cd pkg
ls | xargs -t -I FILE_NAME zip -r FILE_NAME.zip FILE_NAME
ls | grep -v -E ".zip$" | xargs rm -r
cd ../
これらもpushします。
v*
のタグが打たれた時にトリガーするようになったので、早速タグを付けてみます。
git tag v0
git push origin tag
Githubに移動してActionsタブを開きます。サンプルだとここ
ビルドしたモノもタグと一緒にアップロードしてくれます。便利。サンプルだとここ