fix: リリースビルドのエンコードメソッドでSIGSEGVが発生する問題を修正 #1432
Workflow file for this run
This file contains hidden or 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: CI | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - "develop" | |
| - "feature/**" | |
| paths-ignore: | |
| - "**.md" | |
| - "python/**" | |
| - ".github/workflows/pypi-publish.yml" | |
| schedule: | |
| # UTC の 01:00 は JST だと 10:00 。 | |
| # 1-5 で 月曜日から金曜日 | |
| - cron: "0 1 * * 1-5" | |
| env: | |
| RUST_BACKTRACE: 1 | |
| CUDA_VERSION: 13.0.2 | |
| jobs: | |
| check: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - run: cargo check --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_audio_toolbox --exclude shiguredo_video_toolbox --exclude shiguredo_nvcodec | |
| clippy: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - run: rustup component add clippy | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - run: cargo clippy --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_audio_toolbox --exclude shiguredo_video_toolbox --exclude shiguredo_nvcodec -- --deny warnings | |
| test: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - run: cargo test --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_openh264 --exclude shiguredo_audio_toolbox --exclude shiguredo_video_toolbox --exclude shiguredo_nvcodec | |
| test-nvidia-video-codec: | |
| runs-on: | |
| group: Self | |
| labels: [self-hosted, linux, x64, NVIDIA-Video-Codec-SDK] | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install rustup | |
| run: | | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| - name: Update PATH | |
| run: echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV | |
| - run: cargo check --no-default-features --features nvcodec -p hisui -p shiguredo_nvcodec | |
| - run: cargo clippy --no-default-features --features nvcodec -p hisui -p shiguredo_nvcodec -- --deny warnings | |
| - run: cargo test --no-default-features --features nvcodec -p hisui -p shiguredo_nvcodec -- --test-threads=1 | |
| test-apple-toolbox: | |
| runs-on: | |
| group: Self | |
| labels: [self-hosted, macOS, ARM64] | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: 🍺 Set up Homebrew | |
| uses: Homebrew/actions/setup-homebrew@master | |
| - name: Install rustup | |
| run: | | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| - name: Update PATH | |
| run: echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV | |
| - name: Install packages to build external dependencies | |
| run: | | |
| brew update | |
| brew install meson ninja nasm yasm cmake automake autoconf libtool pkg-config | |
| - run: cargo check --no-default-features --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_nvcodec --exclude shiguredo_libvpx | |
| - run: cargo clippy --no-default-features --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_nvcodec --exclude shiguredo_libvpx -- --deny warnings | |
| - run: cargo test --no-default-features --workspace --exclude shiguredo_fdk_aac --exclude shiguredo_nvcodec --exclude shiguredo_libvpx --exclude shiguredo_openh264 | |
| test-fdk-aac: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake libfdk-aac-dev | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - run: cargo test --package shiguredo_fdk_aac | |
| # shiguredo_fdk_aac はリリースビルドでだけセグフォすることがあったので、それもテストする | |
| # (最終的にはリリースバイナリを使った e2e で置き換えるべき) | |
| - run: cargo test --release --package shiguredo_fdk_aac | |
| - run: cargo test --no-default-features --features fdk-aac | |
| - run: cargo build --no-default-features --features fdk-aac | |
| - run: ldd target/debug/hisui | |
| - name: FDK-AAC が動的リンクされることを確認する | |
| run: ldd target/debug/hisui | grep fdk-aac | |
| - run: cargo build | |
| - run: ldd target/debug/hisui | |
| - name: FDK-AAC がリンクされないことを確認する | |
| run: if ldd target/debug/hisui | grep -q fdk-aac; then exit 1; else exit 0; fi | |
| test-openh264: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| env: | |
| OPENH264_VERSION: "2.6.0" | |
| OPENH264_PATH: ${{ github.workspace }}/libopenh264.so | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - name: Download libopenh264 v${{ env.OPENH264_VERSION }} | |
| run: | | |
| curl -LO http://ciscobinary.openh264.org/libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so.bz2 | |
| bzip2 -d libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so.bz2 | |
| mv libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so ${{ env.OPENH264_PATH }} | |
| - run: cargo test --no-default-features -p hisui -p shiguredo_openh264 | |
| valgrind: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| env: | |
| OPENH264_VERSION: "2.6.0" | |
| OPENH264_PATH: ${{ github.workspace }}/libopenh264.so | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake valgrind libfdk-aac-dev | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/ | |
| ~/.cargo/git/ | |
| target/ | |
| # cargo-valgrind 用に bin/ もキャッシュする | |
| ~/.cargo/bin/ | |
| # 以下のファイルのタイムスタンプが変わってしまうと build.rs が常に再実行されてしまうのでキャッシュする | |
| **/build.rs | |
| **/Cargo.toml | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}-${{ hashFiles('Cargo.lock') }} | |
| restore-keys: | | |
| # Cargo.toml と build.rs はキャッシュから復元するので、古いものを復元するのを避けるために候補キーに含める | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}-${{ github.job }}- | |
| ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/build.rs') }}- | |
| - name: Download libopenh264 v${{ env.OPENH264_VERSION }} | |
| run: | | |
| curl -LO http://ciscobinary.openh264.org/libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so.bz2 | |
| bzip2 -d libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so.bz2 | |
| mv libopenh264-${{ env.OPENH264_VERSION }}-linux64.8.so ${{ env.OPENH264_PATH }} | |
| - run: cargo install cargo-valgrind || echo 'already installed' | |
| - name: Run valgrind tests | |
| env: | |
| VALGRINDFLAGS: --track-origins=yes --verbose --num-callers=50 --keep-debuginfo=yes | |
| # NOTE: SVT-AV1 の v3.1.2 では hisui 側では対処不可能そうなエラーが出ているので、いったん抑制している(TODO: 新バージョンが出たらまた対象に含めること) | |
| run: cargo valgrind test --workspace --exclude shiguredo_audio_toolbox --exclude shiguredo_video_toolbox --exclude shiguredo_nvcodec --exclude shiguredo_svt_av1 -- --skip simple_single_source_av1 | |
| ubuntu-binary: | |
| name: "Upload Binary for Ubuntu" | |
| needs: [test] | |
| strategy: | |
| matrix: | |
| platform: | |
| - name: ubuntu-24.04_x86_64 | |
| runs-on: ubuntu-24.04 | |
| - name: ubuntu-24.04_arm64 | |
| runs-on: ubuntu-24.04-arm | |
| - name: ubuntu-22.04_x86_64 | |
| runs-on: ubuntu-22.04 | |
| - name: ubuntu-22.04_arm64 | |
| runs-on: ubuntu-22.04-arm | |
| runs-on: ${{ matrix.platform.runs-on }} | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v5 | |
| - name: Install packages to build external dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y meson ninja-build nasm yasm build-essential autoconf automake libtool pkg-config yasm cmake | |
| # CUDA のインストール (x86_64 のみ) | |
| - uses: shiguredo/github-actions/.github/actions/setup-cuda-toolkit@main | |
| if: contains(matrix.platform.name, 'x86_64') | |
| id: cuda | |
| with: | |
| cuda_version: ${{ env.CUDA_VERSION }} | |
| platform: ${{ matrix.platform.runs-on }} | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| # x86_64 では nvcodec feature を有効化 | |
| - name: Build with NVCODEC (x86_64) | |
| if: contains(matrix.platform.name, 'x86_64') | |
| run: cargo build --release --features nvcodec | |
| # ARM では通常ビルド | |
| - name: Build (ARM) | |
| if: contains(matrix.platform.name, 'arm64') | |
| run: cargo build --release | |
| - name: Get the version | |
| id: get_version | |
| run: | | |
| VERSION=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "hisui") | .version') | |
| echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
| - run: | | |
| mkdir -p hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }} | |
| cp target/release/hisui hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}/ | |
| tar -czf hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}.tar.gz \ | |
| hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hisui-binary-${{ matrix.platform.name }} | |
| path: hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}.tar.gz | |
| macos-binary: | |
| name: "Upload Binary for MacOS" | |
| needs: [test-apple-toolbox] | |
| strategy: | |
| matrix: | |
| platform: | |
| - name: macos-26_arm64 | |
| runs-on: macos-26 | |
| - name: macos-15_arm64 | |
| runs-on: macos-15 | |
| - name: macos-14_arm64 | |
| runs-on: macos-14 | |
| runs-on: ${{ matrix.platform.runs-on }} | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v5 | |
| - name: Get the version | |
| id: get_version | |
| run: | | |
| VERSION=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "hisui") | .version') | |
| echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - name: Install packages to build external dependencies | |
| run: | | |
| brew update | |
| brew install meson nasm yasm automake autoconf libtool pkg-config | |
| - run: cargo build --release | |
| - run: | | |
| mkdir -p hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }} | |
| cp target/release/hisui hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}/ | |
| tar -czf hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}.tar.gz \ | |
| hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hisui-binary-${{ matrix.platform.name }} | |
| path: hisui-${{ steps.get_version.outputs.version }}_${{ matrix.platform.name }}.tar.gz | |
| docs_rs: | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| env: | |
| DOCS_RS: 1 | |
| steps: | |
| # docs.rs 向けでは外部ライブラリのビルドは走らないので依存パッケージなどのインストールは不要 | |
| - uses: actions/checkout@v5 | |
| - run: rustup update stable | |
| - run: rustup default stable | |
| - run: cargo doc --workspace --exclude hisui | |
| slack_notify_failed: | |
| needs: | |
| - check | |
| - clippy | |
| - test | |
| - test-nvidia-video-codec | |
| - test-apple-toolbox | |
| - test-fdk-aac | |
| - test-openh264 | |
| - ubuntu-binary | |
| - macos-binary | |
| - valgrind | |
| - docs_rs | |
| timeout-minutes: 20 | |
| runs-on: ubuntu-24.04 | |
| if: failure() | |
| steps: | |
| - name: Slack Notification | |
| uses: rtCamp/action-slack-notify@v2 | |
| env: | |
| SLACK_CHANNEL: hisui | |
| SLACK_COLOR: danger | |
| SLACK_ICON_EMOJI: ":japanese_ogre:" | |
| SLACK_TITLE: "FAILED" | |
| SLACK_MESSAGE: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|${{github.event.head_commit.message }}> | |
| SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} |