LoginSignup
4
2

More than 3 years have passed since last update.

JUCE6とGitHub Actionsを使ってお手軽CD

Last updated at Posted at 2020-12-06

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を作成しましょう。

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を書いてみます。

deploy-osx.yaml
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を作って…

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タブを開きます。サンプルだとここ

image.png
こんな感じでチェック付いてたらOKです。うれしいね。

ビルドしたモノもタグと一緒にアップロードしてくれます。便利。サンプルだとここ

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2