.github/workflows/windows-ncnn.yml: test flexible output; dump depend… #119
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 (Windows-NCNN) | |
on: | |
push: | |
paths: | |
- 'common/**' | |
- 'vsncnn/**' | |
- '.github/workflows/windows-ncnn.yml' | |
workflow_call: | |
inputs: | |
tag: | |
description: 'which tag to upload to' | |
required: true | |
type: string | |
ncnn_tag: | |
description: 'which tag of ncnn to use' | |
required: true | |
default: 'latest' | |
type: string | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: 'which tag to upload to' | |
default: '' | |
ncnn_tag: | |
description: 'which tag of ncnn to use' | |
required: true | |
default: 'latest' | |
type: string | |
jobs: | |
build-windows: | |
runs-on: windows-2022 | |
defaults: | |
run: | |
shell: cmd | |
working-directory: vsncnn | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup MSVC | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Cache protobuf | |
id: cache-protobuf | |
uses: actions/cache@v4 | |
with: | |
path: vsncnn/protobuf/install | |
key: ${{ runner.os }}-vsncnn-protobuf-v3.16.0 | |
- name: Checkout protobuf | |
uses: actions/checkout@v4 | |
if: steps.cache-protobuf.outputs.cache-hit != 'true' | |
with: | |
repository: protocolbuffers/protobuf | |
# follows protobuf in https://github.com/onnx/onnx/tree/v1.12.0#windows | |
# if you change this, remember to bump the version of the cache key of protobuf and onnx. | |
ref: v3.16.0 | |
path: vsncnn/protobuf | |
- name: Configure protobuf | |
if: steps.cache-protobuf.outputs.cache-hit != 'true' | |
run: cmake -S protobuf\cmake -B protobuf\build_rel -G Ninja -LA | |
-D CMAKE_BUILD_TYPE=Release | |
-D protobuf_BUILD_SHARED_LIBS=OFF | |
-D protobuf_BUILD_TESTS=OFF | |
-D protobuf_MSVC_STATIC_RUNTIME=ON | |
- name: Build protobuf | |
if: steps.cache-protobuf.outputs.cache-hit != 'true' | |
run: cmake --build protobuf\build_rel --verbose | |
- name: Install protobuf | |
if: steps.cache-protobuf.outputs.cache-hit != 'true' | |
run: cmake --install protobuf\build_rel --prefix protobuf\install | |
- name: Cache onnx | |
id: cache-onnx | |
uses: actions/cache@v4 | |
with: | |
path: vsncnn/onnx/install | |
key: ${{ runner.os }}-vsncnn-onnx-v1.12.0-protobuf-v3.16.0 | |
- name: Checkout onnx | |
if: steps.cache-onnx.outputs.cache-hit != 'true' | |
uses: actions/checkout@v4 | |
with: | |
repository: onnx/onnx | |
ref: v1.12.0 | |
path: vsncnn/onnx | |
- name: Configure onnx | |
if: steps.cache-onnx.outputs.cache-hit != 'true' | |
run: cmake -S onnx -B onnx\build -G Ninja -LA | |
-D CMAKE_BUILD_TYPE=Release | |
-D Protobuf_PROTOC_EXECUTABLE=protobuf\install\bin\protoc | |
-D Protobuf_LITE_LIBRARY=protobuf\install\lib | |
-D Protobuf_LIBRARIES=protobuf\install\lib | |
-D ONNX_USE_LITE_PROTO=ON -D ONNX_USE_PROTOBUF_SHARED_LIBS=OFF | |
-D ONNX_GEN_PB_TYPE_STUBS=OFF -D ONNX_ML=0 | |
-D ONNX_USE_MSVC_STATIC_RUNTIME=1 | |
- name: Build onnx | |
if: steps.cache-onnx.outputs.cache-hit != 'true' | |
run: cmake --build onnx\build --verbose | |
- name: Install onnx | |
if: steps.cache-onnx.outputs.cache-hit != 'true' | |
run: cmake --install onnx\build --prefix onnx\install | |
- name: Download VapourSynth headers | |
run: | | |
curl -s -o vs.zip -L https://github.com/vapoursynth/vapoursynth/archive/refs/tags/R54.zip | |
unzip -q vs.zip | |
mv vapoursynth-*/ vapoursynth/ | |
- name: Download NCNN Precompilation | |
shell: bash | |
run: | | |
rev="${{github.event.inputs.ncnn_tag || inputs.ncnn_tag || 'latest'}}" | |
if [ "$rev" == "latest" ]; then | |
url="https://github.com/AmusementClub/ncnn/releases/latest/download/ncnn-gpu-x64-windows.zip" | |
else | |
url="https://github.com/AmusementClub/ncnn/releases/download/$rev/ncnn-gpu-x64-windows.zip" | |
fi | |
curl -s -o ncnn.zip -LJO "$url" | |
unzip -q ncnn.zip | |
# follows vulkan sdk in https://github.com/AmusementClub/ncnn/blob/github-actions/.github/workflows/windows-x64-gpu.yml | |
- name: Setup Vulkan SDK | |
shell: pwsh | |
run: | | |
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.275.0/windows/VulkanSDK-1.3.275.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |
$installer = Start-Process -FilePath VulkanSDK.exe -Wait -PassThru -ArgumentList "--accept-licenses --default-answer --confirm-command install"; | |
$installer.WaitForExit(); | |
- name: Configure | |
run: cmake -S . -B build -G Ninja -LA | |
-D CMAKE_BUILD_TYPE=Release | |
-D CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded | |
-D VAPOURSYNTH_INCLUDE_DIRECTORY=vapoursynth\include | |
-D protobuf_DIR=protobuf\install\cmake | |
-D ONNX_DIR=onnx\install\lib\cmake\ONNX | |
-D ncnn_DIR=ncnn\lib\cmake\ncnn | |
-D CMAKE_CXX_STANDARD=20 | |
env: | |
VULKAN_SDK: C:\VulkanSDK\1.3.275.0 | |
- name: Build | |
run: cmake --build build --verbose | |
- name: Install | |
run: | | |
cmake --install build --prefix install | |
mkdir artifact | |
copy install\bin\vsncnn.dll artifact\ | |
- name: Upload | |
uses: actions/upload-artifact@v4 | |
with: | |
name: VSNCNN-GPU-Windows-x64 | |
path: vsncnn/artifact | |
- name: Setup Python portable | |
run: | | |
curl -s -o python.zip -LJO https://www.python.org/ftp/python/3.9.9/python-3.9.9-embed-amd64.zip | |
7z x python.zip -ovs_portable | |
- name: Install VapourSynth portable | |
run: | | |
curl -s -o vs.7z -LJO https://github.com/vapoursynth/vapoursynth/releases/download/R54/VapourSynth64-Portable-R54.7z | |
7z x vs.7z -ovs_portable -y | |
- name: Copy plugin & swiftshader | |
run: | | |
copy artifact\*.dll vs_portable\vapoursynth64\plugins | |
copy ncnn\tests\* vs_portable\ | |
- name: Install waifu2x model | |
run: | | |
curl -s -o waifu2x.7z -LJO https://github.com/AmusementClub/vs-mlrt/releases/download/model-20211209/waifu2x_v3.7z | |
7z x waifu2x.7z -ovs_portable\vapoursynth64\plugins\models | |
- name: Download x265 | |
run: | | |
curl -s -o x265.7z -LJO https://github.com/AmusementClub/x265/releases/download/Yuuki-3.5-AC3/x265-win64-x86-64-clang.Yuuki-3.5-AC3.7z | |
7z x x265.7z -ovs_portable\ | |
- name: Create script | |
shell: bash | |
run: echo "import vapoursynth as vs;from vapoursynth import core;import sys;print(core.ncnn, core.ncnn.Version(), file=sys.stderr);core.std.BlankClip(format=vs.RGBS, width=127, height=63).ncnn.Model(r\"waifu2x\\upconv_7_anime_style_art_rgb\\scale2.0x_model.onnx\", builtin=True).resize.Bicubic(format=vs.YUV420P10, matrix_s='709').set_output()" > test.vpy | |
- name: Run vspipe | |
shell: bash | |
run: | | |
set -ex | |
vs_portable/vspipe -i test.vpy - | |
vs_portable/vspipe --y4m -p -e 9 test.vpy - | vs_portable/x265 --log-file x265.log --log-file-level info --y4m -D 10 --preset ultrafast -o out.hevc - | |
ls -l out.hevc x265.log | |
cat x265.log | |
grep -F 'encoded 10 frames' x265.log || exit 2 | |
grep -i 'error' x265.log && exit 1 | |
exit 0 | |
- name: Create script (flexible output) | |
shell: bash | |
run: echo "import vapoursynth as vs;from vapoursynth import core;import sys;print(core.ncnn, core.ncnn.Version(), file=sys.stderr);prop='test';output=core.std.BlankClip(format=vs.RGBS, width=127, height=63).ncnn.Model(r\"waifu2x\\upconv_7_anime_style_art_rgb\\scale2.0x_model.onnx\", builtin=True, flexible_output_prop=prop);core.std.ShufflePlanes([output['clip'].std.PropToClip(prop=f'{prop}{i}') for i in range(output['num_planes'])], [0, 0, 0], vs.RGB).resize.Bicubic(format=vs.YUV420P10, matrix_s='709').set_output()" > test_flexible_output.vpy | |
- name: Run vspipe (flexible output) | |
shell: bash | |
run: | | |
set -ex | |
vs_portable/vspipe -i test_flexible_output.vpy - | |
vs_portable/vspipe --y4m -p -e 9 test_flexible_output.vpy - | vs_portable/x265 --log-file x265.log --log-file-level info --y4m -D 10 --preset ultrafast -o out.hevc - | |
ls -l out.hevc x265.log | |
cat x265.log | |
grep -F 'encoded 10 frames' x265.log || exit 2 | |
grep -i 'error' x265.log && exit 1 | |
exit 0 | |
- name: Describe | |
run: git describe --tags --long | |
- name: Dump dependencies | |
run: dumpbin /dependents artifact\vsncnn.dll | |
- name: Compress artifact for release | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.tag != '' | |
run: | | |
cd artifact | |
7z a -t7z -mx=7 ../../VSNCNN-Windows-x64.${{ github.event.inputs.tag }}.7z . | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.tag != '' | |
with: | |
tag_name: ${{ inputs.tag }} | |
files: VSNCNN-Windows-x64.${{ github.event.inputs.tag }}.7z | |
fail_on_unmatched_files: true | |
generate_release_notes: false | |
prerelease: true |