SDK の examples ビルドを戻す #1385
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build-workflow | |
on: | |
push: | |
paths-ignore: | |
- "doc/**" | |
- "**.md" | |
- "LICENSE" | |
- "NOTICE" | |
schedule: | |
# UTC の 01:00 は JST だと 10:00 。 | |
# 1-5 で 月曜日から金曜日 | |
- cron: "0 1 * * 1-5" | |
jobs: | |
build-windows: | |
strategy: | |
fail-fast: false | |
matrix: | |
name: | |
- windows_x86_64 | |
name: Build sora-cpp-sdk for ${{ matrix.name }} | |
runs-on: windows-2022 | |
env: | |
TEST_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }} | |
TEST_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }} | |
TEST_SECRET_KEY: ${{ secrets.TEST_SECRET_KEY }} | |
TEST_MATRIX_NAME: ${{ matrix.name }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: microsoft/setup-msbuild@v2 | |
- name: Env to output | |
run: | | |
echo "userprofile=${Env:USERPROFILE}" >> ${Env:GITHUB_OUTPUT} | |
echo "username=${Env:USERNAME}" >> ${Env:GITHUB_OUTPUT} | |
id: env | |
- name: Get Versions | |
run: | | |
Get-Content "VERSION" | Foreach-Object { | |
if (!$_) { continue } | |
$var = $_.Split('=') | |
New-Variable -Name $var[0] -Value $var[1] -Force | |
} | |
echo "cuda_version=${CUDA_VERSION}" >> ${Env:GITHUB_OUTPUT} | |
id: versions | |
# CUDA のインストールバイナリのダウンロードは 3GB ぐらいあって、 | |
# ビルドの度に取得するのはつらいのでキャッシュする | |
# (インストールする nvcc は解凍後で 100MB 程度なのでキャッシュ可能) | |
- name: Cache CUDA ${{ steps.versions.outputs.cuda_version }} | |
id: cache-cuda | |
uses: actions/cache@v4 | |
with: | |
path: _install\windows_x86_64\release\cuda | |
key: windows-cuda-${{ steps.versions.outputs.cuda_version }}.v1 | |
- run: echo "${CUDA_VERSION}" > _install\windows_x86_64\release\cuda.version | |
if: steps.cache-cuda.outputs.cache-hit == 'true' | |
- run: python3 run.py --test --run-e2e-test --package ${{ matrix.name }} | |
env: | |
SORA_CPP_SDK_TEMP_DIR: C:\ | |
- name: Get package name | |
run: | | |
Get-Content "_package\${{ matrix.name }}\release\sora.env" | Foreach-Object { | |
if (!$_) { continue } | |
$var = $_.Split('=') | |
New-Variable -Name $var[0] -Value $var[1] -Force | |
} | |
echo "name=${PACKAGE_NAME}" >> ${Env:GITHUB_OUTPUT} | |
echo "boost_name=${BOOST_PACKAGE_NAME}" >> ${Env:GITHUB_OUTPUT} | |
id: package_name | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.name }} | |
path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.name }} | |
- name: Upload Boost Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.boost_name }} | |
path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.boost_name }} | |
- name: Upload Environment | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.name }}.env | |
path: _package/${{ matrix.name }}/release/sora.env | |
# Examples のビルド | |
- name: Build Examples | |
run: | | |
cd examples | |
mkdir examples_${{ matrix.name }} | |
foreach ($app in @('sdl_sample', 'sumomo', 'messaging_recvonly_sample')) { | |
python3 "$app\${{ matrix.name }}\run.py" --local-sora-cpp-sdk-dir .. | |
cp "_build\${{ matrix.name }}\release\$app\Release\$app.exe" "examples_${{ matrix.name }}" | |
} | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: examples_${{ matrix.name }} | |
path: examples/examples_${{ matrix.name }} | |
build-macos: | |
strategy: | |
fail-fast: false | |
matrix: | |
name: | |
- macos_arm64 | |
- ios | |
name: Build sora-cpp-sdk for ${{ matrix.name }} | |
runs-on: macos-14 | |
env: | |
TEST_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }} | |
TEST_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }} | |
TEST_SECRET_KEY: ${{ secrets.TEST_SECRET_KEY }} | |
TEST_MATRIX_NAME: ${{ matrix.name }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Select Xcode 15.4 | |
run: sudo xcode-select --switch /Applications/Xcode_15.4.app/Contents/Developer | |
- name: Env to output | |
run: | | |
echo "user=`users`" >> $GITHUB_OUTPUT | |
id: env | |
- run: python3 run.py --test --run-e2e-test --package ${{ matrix.name }} | |
- name: Get package name | |
run: | | |
source _package/${{ matrix.name }}/release/sora.env | |
echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT | |
echo "boost_name=${BOOST_PACKAGE_NAME}" >> $GITHUB_OUTPUT | |
id: package_name | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.name }} | |
path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.name }} | |
- name: Upload Boost Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.boost_name }} | |
path: _package/${{ matrix.name }}/release/${{ steps.package_name.outputs.boost_name }} | |
- name: Upload Environment | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.name }}.env | |
path: _package/${{ matrix.name }}/release/sora.env | |
# Examples のビルド | |
- name: Build Examples | |
run: | | |
cd examples | |
mkdir examples_${{ matrix.name }} | |
for app in sdl_sample sumomo messaging_recvonly_sample; do | |
python3 $app/${{ matrix.name }}/run.py --local-sora-cpp-sdk-dir .. | |
cp _build/${{ matrix.name }}/release/$app/$app examples_${{ matrix.name }} | |
done | |
if: matrix.name == 'macos_arm64' | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: examples_${{ matrix.name }} | |
path: examples/examples_${{ matrix.name }} | |
if: matrix.name == 'macos_arm64' | |
build-ubuntu: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: | |
- name: ubuntu-20.04_x86_64 | |
runs-on: ubuntu-20.04 | |
os: ubuntu | |
arch: x86_64 | |
- name: ubuntu-22.04_x86_64 | |
runs-on: ubuntu-22.04 | |
os: ubuntu | |
arch: x86_64 | |
- name: ubuntu-24.04_x86_64 | |
runs-on: ubuntu-24.04 | |
os: ubuntu | |
arch: x86_64 | |
- name: ubuntu-24.04_armv8 | |
runs-on: ubuntu-24.04 | |
os: ubuntu | |
arch: armv8 | |
- name: android | |
runs-on: ubuntu-22.04 | |
os: android | |
name: Build sora-cpp-sdk for ${{ matrix.platform.name }} | |
runs-on: ${{ matrix.platform.runs-on }} | |
env: | |
TEST_SIGNALING_URL: ${{ secrets.TEST_SIGNALING_URL }} | |
TEST_CHANNEL_ID_PREFIX: ${{ secrets.TEST_CHANNEL_ID_PREFIX }} | |
TEST_SECRET_KEY: ${{ secrets.TEST_SECRET_KEY }} | |
TEST_MATRIX_NAME: ${{ matrix.platform.name }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Disk cleanup | |
run: | | |
set -x | |
df -h | |
sudo du -h -d1 /usr/local | |
sudo du -h -d1 /usr/local/share | |
sudo du -h -d1 /usr/local/lib | |
sudo du -h -d1 /usr/share | |
RMI=`docker images -q -a` | |
if [ -n "$RMI" ]; then | |
docker rmi $RMI | |
fi | |
# 4.6G | |
sudo rm -rf /usr/local/.ghcup | |
# 1.7G | |
sudo rm -rf /usr/share/swift | |
# 1.4G | |
sudo rm -rf /usr/share/dotnet | |
df -h | |
# Ubuntu 24.04 だと libtinfo5 が見つからない問題があるので、その修正 | |
# ref: https://qiita.com/gengen16k/items/88cf3c18a40a94205fab | |
- name: Fix CUDA issues for Ubuntu 24.04 | |
if: matrix.platform.name == 'ubuntu-24.04_x86_64' | |
run: | | |
sudo tee /etc/apt/sources.list.d/jammy.list << EOF | |
deb http://archive.ubuntu.com/ubuntu/ jammy universe | |
EOF | |
sudo tee /etc/apt/preferences.d/pin-jammy <<EOF | |
Package: * | |
Pin: release n=jammy | |
Pin-Priority: -10 | |
Package: libtinfo5 | |
Pin: release n=jammy | |
Pin-Priority: 990 | |
EOF | |
- name: Install deps for ${{ matrix.platform.name }} | |
if: matrix.platform.os == 'ubuntu' && matrix.platform.arch == 'x86_64' | |
run: | | |
source VERSION | |
sudo apt-get update | |
sudo apt-get install -y software-properties-common | |
# X11 | |
sudo apt-get install libx11-dev libxext-dev | |
# OpenGL | |
sudo apt-get install -y libgl-dev | |
# CUDA | |
source /etc/os-release | |
# 20.04 は自前の libssl1.1 があるので不要 | |
if [ $VERSION_ID != "20.04" ]; then | |
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb | |
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb | |
fi | |
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb | |
sudo dpkg -i cuda-keyring_*all.deb | |
sudo apt-get update | |
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install cuda=$CUDA_VERSION | |
# clang-18 | |
wget https://apt.llvm.org/llvm.sh | |
chmod a+x llvm.sh | |
sudo ./llvm.sh 18 | |
- name: Install deps for ${{ matrix.platform.name }} | |
if: matrix.platform.os == 'ubuntu' && matrix.platform.arch == 'armv8' | |
run: | | |
sudo apt-get -y install multistrap binutils-aarch64-linux-gnu libgl-dev | |
# multistrap に insecure なリポジトリからの取得を許可する設定を入れる | |
sudo sed -e 's/Apt::Get::AllowUnauthenticated=true/Apt::Get::AllowUnauthenticated=true";\n$config_str .= " -o Acquire::AllowInsecureRepositories=true/' -i /usr/sbin/multistrap | |
- name: Install deps for Android | |
if: matrix.platform.os == 'android' | |
run: | | |
sudo apt-get -y install ninja-build | |
# JDK を指定しないとデフォルトの JDK 11 で動作するため指定する | |
- name: Setup JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
if: matrix.platform.os == 'android' | |
- name: Setup Android SDK | |
uses: android-actions/setup-android@v3 | |
if: matrix.platform.os == 'android' | |
- run: python3 run.py --test --run-e2e-test --package ${{ matrix.platform.name }} | |
- name: Get package name | |
run: | | |
source _package/${{ matrix.platform.name }}/release/sora.env | |
echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT | |
echo "boost_name=${BOOST_PACKAGE_NAME}" >> $GITHUB_OUTPUT | |
id: package_name | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.name }} | |
path: _package/${{ matrix.platform.name }}/release/${{ steps.package_name.outputs.name }} | |
- name: Upload Boost Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.package_name.outputs.boost_name }} | |
path: _package/${{ matrix.platform.name }}/release/${{ steps.package_name.outputs.boost_name }} | |
- name: Upload Environment | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.platform.name }}.env | |
path: _package/${{ matrix.platform.name }}/release/sora.env | |
# Examples のビルド | |
- name: Build Examples | |
run: | | |
cd examples | |
mkdir examples_${{ matrix.platform.name }} | |
for app in sdl_sample sumomo messaging_recvonly_sample; do | |
python3 $app/${{ matrix.platform.name }}/run.py --local-sora-cpp-sdk-dir .. | |
cp _build/${{ matrix.platform.name }}/release/$app/$app examples_${{ matrix.platform.name }} | |
done | |
if: matrix.platform.os == 'ubuntu' | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: examples_${{ matrix.platform.name }} | |
path: examples/examples_${{ matrix.platform.name }} | |
if: matrix.platform.os == 'ubuntu' | |
create-release: | |
name: Create Release | |
if: contains(github.ref, 'tags/202') | |
needs: | |
- build-windows | |
- build-macos | |
- build-ubuntu | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/download | |
with: | |
platform: windows_x86_64 | |
- uses: ./.github/actions/download | |
with: | |
platform: macos_arm64 | |
- uses: ./.github/actions/download | |
with: | |
platform: ios | |
- uses: ./.github/actions/download | |
with: | |
platform: ubuntu-20.04_x86_64 | |
- uses: ./.github/actions/download | |
with: | |
platform: ubuntu-22.04_x86_64 | |
- uses: ./.github/actions/download | |
with: | |
platform: ubuntu-24.04_x86_64 | |
- uses: ./.github/actions/download | |
with: | |
platform: ubuntu-24.04_armv8 | |
- uses: ./.github/actions/download | |
with: | |
platform: android | |
- name: Env to output | |
run: | | |
echo "package_paths<<EOF" >> $GITHUB_OUTPUT | |
cat package_paths.env >> $GITHUB_OUTPUT | |
echo "EOF" >> $GITHUB_OUTPUT | |
id: env | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: ${{ steps.env.outputs.package_paths }} | |
prerelease: ${{ contains(github.ref, 'canary') }} | |
# Windows の Examples ビルド | |
build-windows-examples: | |
needs: create-release | |
runs-on: windows-2022 | |
defaults: | |
run: | |
working-directory: ${{ github.workspace }}/examples | |
strategy: | |
matrix: | |
example: | |
- name: sumomo | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build Example | |
run: | | |
python3 ${{ matrix.example.name }}/windows_x86_64/run.py | |
- name: Package Binary | |
run: | | |
# アップロード用にディレクトリを作って、その中にバイナリをコピーする | |
# sumomo_windows_x86_64.zip を作ってアップロードする | |
mkdir -p ${{ matrix.example.name }}_windows_x86_64 | |
cp _build/windows_x86_64/release/${{ matrix.example.name }}/Release/${{ matrix.example.name }}.exe ${{ matrix.example.name }}_windows_x86_64/${{ matrix.example.name }}.exe | |
Compress-Archive -Path ${{ matrix.example.name }}_windows_x86_64 -DestinationPath ${{ matrix.example.name }}_windows_x86_64.zip | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.example.name }}_windows_x86_64.zip | |
path: examples/${{ matrix.example.name }}_windows_x86_64.zip | |
# macOS の Examples ビルド | |
build-macos-examples: | |
needs: create-release | |
runs-on: macos-14 | |
defaults: | |
run: | |
working-directory: ${{ github.workspace }}/examples | |
strategy: | |
matrix: | |
example: | |
- name: sumomo | |
steps: | |
- uses: actions/checkout@v4 | |
# Select Xcode 15.4(build-macosと同じバージョンを使う) | |
- name: Select Xcode 15.4 | |
run: sudo xcode-select --switch /Applications/Xcode_15.4.app/Contents/Developer | |
- name: Build Example | |
run: | | |
python3 ${{ matrix.example.name }}/macos_arm64/run.py | |
- name: Package Binary | |
run: | | |
# アップロード用に、ディレクトリを作って、その中にバイナリをコピーする | |
# sumomo_macos_arm64.tar.gz を作ってアップロードする | |
mkdir -p ${{ matrix.example.name }}_macos_arm64 | |
cp _build/macos_arm64/release/${{ matrix.example.name }}/${{ matrix.example.name }} ${{ matrix.example.name }}_macos_arm64/${{ matrix.example.name }} | |
tar -czf ${{ matrix.example.name }}_macos_arm64.tar.gz ${{ matrix.example.name }}_macos_arm64 | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.example.name }}_macos_arm64.tar.gz | |
path: examples/${{ matrix.example.name }}_macos_arm64.tar.gz | |
# Ubuntu の Examples ビルド | |
build-ubuntu-examples: | |
needs: create-release | |
runs-on: ${{ matrix.platform.runs-on }} | |
defaults: | |
run: | |
working-directory: ${{ github.workspace }}/examples | |
strategy: | |
fail-fast: false | |
matrix: | |
example: | |
- name: sumomo | |
platform: | |
- name: ubuntu-20.04_x86_64 | |
runs-on: ubuntu-20.04 | |
- name: ubuntu-22.04_x86_64 | |
runs-on: ubuntu-22.04 | |
- name: ubuntu-24.04_x86_64 | |
runs-on: ubuntu-24.04 | |
- name: ubuntu-24.04_armv8 | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install deps | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libgl-dev | |
# Ubuntu 24.04 のみ追加で必要なパッケージがあるのでインストール | |
- name: Install deps Ubuntu 24.04 | |
if: matrix.platform.runs-on == 'ubuntu-24.04' | |
run: | | |
sudo apt-get install -y libx11-dev libxext-dev | |
# ARM の場合はさらに追加のパッケージが必要なのでインストール | |
- name: Install deps Ubuntu 24.04 ARM | |
if: matrix.platform.name == 'ubuntu-24.04_armv8' | |
run: | | |
sudo apt-get install -y multistrap binutils-aarch64-linux-gnu | |
# multistrap に insecure なリポジトリからの取得を許可する設定を入れる | |
sudo sed -e 's/Apt::Get::AllowUnauthenticated=true/Apt::Get::AllowUnauthenticated=true";\n$config_str .= " -o Acquire::AllowInsecureRepositories=true/' -i /usr/sbin/multistrap | |
- name: Build Example | |
run: | | |
python3 ${{ matrix.example.name }}/${{ matrix.platform.name }}/run.py | |
- name: Package Binary | |
run: | | |
# アップロード用にディレクトリを作って、その中にバイナリをコピーする | |
# ubuntu-24.04_x86_64 の場合 sumomo_ubuntu-24.04_x86_64.tar.gz を作ってアップロードする | |
mkdir -p ${{ matrix.example.name }}_${{ matrix.platform.name }} | |
cp _build/${{ matrix.platform.name }}/release/${{ matrix.example.name }}/${{ matrix.example.name }} ${{ matrix.example.name }}_${{ matrix.platform.name }}/${{ matrix.example.name }} | |
tar -czf ${{ matrix.example.name }}_${{ matrix.platform.name }}.tar.gz ${{ matrix.example.name }}_${{ matrix.platform.name }} | |
- name: Upload Examples Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.example.name }}_${{ matrix.platform.name }}.tar.gz | |
path: examples/${{ matrix.example.name }}_${{ matrix.platform.name }}.tar.gz | |
# Examples をリリース | |
create-release-example: | |
name: Create Release Examples | |
needs: | |
- build-windows-examples | |
- build-macos-examples | |
- build-ubuntu-examples | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
example: | |
- name: sumomo | |
platform: | |
- name: windows_x86_64 | |
file_ext: zip | |
- name: macos_arm64 | |
file_ext: tar.gz | |
- name: ubuntu-20.04_x86_64 | |
file_ext: tar.gz | |
- name: ubuntu-22.04_x86_64 | |
file_ext: tar.gz | |
- name: ubuntu-24.04_x86_64 | |
file_ext: tar.gz | |
- name: ubuntu-24.04_armv8 | |
file_ext: tar.gz | |
steps: | |
- uses: actions/checkout@v4 | |
# ビルドした Examples のアーティファクトのダウンロードとリリース | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ${{ matrix.example.name }}_${{ matrix.platform.name }}.${{ matrix.platform.file_ext }} | |
- name: Release Examples | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: ${{ matrix.example.name }}_${{ matrix.platform.name }}.${{ matrix.platform.file_ext }} | |
notification: | |
name: Slack Notification | |
runs-on: ubuntu-24.04 | |
needs: | |
- build-windows | |
- build-macos | |
- build-ubuntu | |
- create-release | |
- build-windows-examples | |
- build-macos-examples | |
- build-ubuntu-examples | |
- create-release-example | |
if: always() | |
steps: | |
- uses: rtCamp/action-slack-notify@v2 | |
if: | | |
needs.build-windows.result == 'failure' || | |
needs.build-macos.result == 'failure' || | |
needs.build-ubuntu.result == 'failure' || | |
needs.create-release.result == 'failure' || | |
needs.build-windows-examples.result == 'failure' || | |
needs.build-macos-examples.result == 'failure' || | |
needs.build-ubuntu-examples.result == 'failure' || | |
needs.create-release-example.result == 'failure' | |
env: | |
SLACK_CHANNEL: sora-cpp-sdk | |
SLACK_COLOR: danger | |
SLACK_TITLE: Build failed | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} |