Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

posted at

updated at

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

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です。うれしいね。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?