diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index b10e1de..98f38ba 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -7,7 +7,7 @@ on:
jobs:
- create-binaries:
+ cli-binaries:
runs-on: windows-latest
@@ -25,20 +25,253 @@ jobs:
run: |
cargo build --release
- - name: Create zip
+ - name: Upload binaries
+ uses: actions/upload-artifact@v2
+ with:
+ path: target\release\av-metrics-tool.exe
+
+ linux-gui-binaries:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install nasm
+ uses: ilammy/setup-nasm@v1
+
+ - name: Install rfd dependencies
+ run: |
+ sudo apt update && sudo apt install libgtk-3-dev
+
+ - name: Install iced dependencies
+ run: |
+ export DEBIAN_FRONTED=noninteractive
+ sudo apt-get -qq update
+ sudo apt-get install -y libxkbcommon-dev
+
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+
+ - name: Enable Link Time Optimizations
+ run: |
+ cd av_metrics_gui_tool
+ echo "[profile.release]" >> Cargo.toml
+ echo "lto = true" >> Cargo.toml
+
+ - name: Build gui tool
+ run: |
+ cd av_metrics_gui_tool
+ cargo build --release --features ffmpeg_static
+
+ - name: Strip av-metrics-gui-tool
+ run: |
+ strip av_metrics_gui_tool/target/release/av-metrics-gui-tool
+
+ - name: Package binary
+ run: |
+ cd av_metrics_gui_tool/target/release
+ tar -czvf $GITHUB_WORKSPACE/av-metrics-gui-ffmpeg-linux.tar.gz \
+ av-metrics-gui-tool
+
+ - name: Upload binaries
+ uses: actions/upload-artifact@v2
+ with:
+ path: av-metrics-gui-ffmpeg-linux.tar.gz
+
+# wasm-gui-binaries:
+#
+# runs-on: ubuntu-latest
+#
+# steps:
+# - uses: actions/checkout@v2
+#
+# - name: Install Rust
+# uses: actions-rs/toolchain@v1
+# with:
+# profile: minimal
+# toolchain: stable
+# target: wasm32-unknown-unknown
+# override: true
+#
+# - name: Enable Link Time Optimizations
+# run: |
+# cd av_metrics_gui_tool
+# echo "[profile.release]" >> Cargo.toml
+# echo "lto = true" >> Cargo.toml
+#
+# - name: Build gui tool for wasm
+# run: |
+# cd av_metrics_gui_tool
+# cargo build --release --target wasm32-unknown-unknown
+#
+# - name: Move the wasm file in current directory
+# run: |
+# mv av_metrics_gui_tool/target/wasm32-unknown-unknown/release/av-metrics-gui-tool.wasm .
+#
+# - name: Install wasm-bindgen
+# env:
+# LINK: https://github.com/rustwasm/wasm-bindgen/releases/download
+# WASM_BINDGEN_VERSION: 0.2.69
+# run: |
+# WASM_BINDGEN_FILE=wasm-bindgen-$WASM_BINDGEN_VERSION-x86_64-unknown-linux-musl
+# curl -L "$LINK/$WASM_BINDGEN_VERSION/$WASM_BINDGEN_FILE.tar.gz" | tar xz -C .
+# mv $WASM_BINDGEN_FILE/wasm-bindgen $HOME/.cargo/bin
+#
+# - name: Produce JavaScript bindings
+# run: |
+# wasm-bindgen ./av-metrics-gui-tool.wasm --out-dir av-metrics-gui-tool-web --web
+#
+# - name: Create HTML file
+# run: |
+# HTML_TEXT=$(cat << EOF
+#
+#
+#
+#
+#
+# av-metrics-gui-tool
+#
+#
+#
+#
+#
+# EOF
+# )
+# echo "$HTML_TEXT" > av-metrics-gui-tool.html
+#
+# - name: Upload binaries
+# uses: actions/upload-artifact@v2
+# with:
+# name: av-metrics-gui-y4m-wasm
+# path: |
+# av-metrics-gui-tool.wasm
+# av-metrics-gui-tool-web
+# av-metrics-gui-tool.html
+
+# macos-gui-binaries:
+#
+# runs-on: macos-latest
+#
+# steps:
+# - uses: actions/checkout@v2
+#
+# - name: Install nasm
+# uses: ilammy/setup-nasm@v1
+#
+# - name: Install Rust
+# uses: actions-rs/toolchain@v1
+# with:
+# profile: minimal
+# toolchain: stable
+# override: true
+#
+# - name: Enable Link Time Optimizations
+# run: |
+# cd av_metrics_gui_tool
+# echo "[profile.release]" >> Cargo.toml
+# echo "lto = true" >> Cargo.toml
+#
+# - name: Build gui tool
+# env:
+# MACOSX_DEPLOYMENT_TARGET: 10.14
+# run: |
+# cd av_metrics_gui_tool
+# cargo build --release --features ffmpeg_static
+#
+# - name: Strip av-metrics-gui-tool
+# run: |
+# strip av_metrics_gui_tool/target/release/av-metrics-gui-tool
+#
+# - name: Open binary via double-click
+# run: |
+# chmod +x av_metrics_gui_tool/target/release/av-metrics-gui-tool
+#
+# - name: Move the binary file in current directory
+# run: |
+# mv av_metrics_gui_tool/target/release/av-metrics-gui-tool .
+#
+# - name: Upload binaries
+# uses: actions/upload-artifact@v2
+# with:
+# name: av-metrics-gui-ffmpeg-macos
+# path: av-metrics-gui-tool
+
+ windows-gui-binaries:
+
+ runs-on: windows-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+
+ - name: Install FFmpeg for Windows
+ env:
+ FFMPEG_URL: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full-shared.7z
+ run: |
+ $VCINSTALLDIR = $(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath)
+ Add-Content $env:GITHUB_ENV "LIBCLANG_PATH=${VCINSTALLDIR}\VC\Tools\LLVM\x64\bin`n"
+ Invoke-WebRequest "${env:FFMPEG_URL}" -OutFile ffmpeg-release-full-shared.7z
+ 7z x ffmpeg-release-full-shared.7z
+ mkdir ffmpeg
+ mv ffmpeg-*/* ffmpeg/
+ Add-Content $env:GITHUB_ENV "FFMPEG_DIR=${pwd}\ffmpeg`n"
+ Add-Content $env:GITHUB_PATH "${pwd}\ffmpeg\bin`n"
+
+ - name: Enable Link Time Optimizations
+ run: |
+ cd av_metrics_gui_tool
+ echo "[profile.release]" >> Cargo.toml
+ echo "lto = true" >> Cargo.toml
+
+ - name: Enable static CRT linkage
+ run: |
+ cd av_metrics_gui_tool
+ mkdir .cargo
+ echo '[target.x86_64-pc-windows-msvc]' >> .cargo/config
+ echo 'rustflags = ["-Ctarget-feature=+crt-static"]' >> .cargo/config
+
+ - name: Build gui tool
run: |
- $METRICS_PATH="$Env:GITHUB_WORKSPACE\target\release"
- 7z a av-metrics.zip "$METRICS_PATH\av-metrics-tool.exe"
+ cd av_metrics_gui_tool
+ cargo build --release --features ffmpeg
+
+ - name: Package binary
+ run: |
+ mv av_metrics_gui_tool/target/release/av-metrics-gui-tool.exe .
+ mv ffmpeg/bin/avcodec-58.dll .
+ mv ffmpeg/bin/avformat-58.dll .
+ mv ffmpeg/bin/avutil-56.dll .
+ mv ffmpeg/bin/swresample-3.dll .
+ 7z a "av-metrics-gui-ffmpeg-windows.zip" `
+ "av-metrics-gui-tool.exe" `
+ "avcodec-58.dll" `
+ "avformat-58.dll" `
+ "avutil-56.dll" `
+ "swresample-3.dll"
- name: Upload binaries
- uses: actions/upload-artifact@v1
+ uses: actions/upload-artifact@v2
with:
- name: av-metrics-bins
- path: av-metrics.zip
+ path: av-metrics-gui-ffmpeg-windows.zip
deploy:
- needs: create-binaries
+ needs: [cli-binaries, linux-gui-binaries, windows-gui-binaries]
runs-on: ubuntu-latest
@@ -46,13 +279,9 @@ jobs:
- uses: actions/checkout@v2
- name: Download the zip
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v2
with:
- name: av-metrics-bins
-
- - name: Unzip av-metrics Windows binaries
- run: |
- unzip av-metrics-bins/av-metrics.zip -d av-metrics-bins
+ name: artifact
- name: Handle release data and files
id: data
@@ -60,9 +289,6 @@ jobs:
VERSION=$(head -n 1 CHANGELOG.md | tr -d "## Version ")
echo "::set-output name=version::$VERSION"
tail -n +2 CHANGELOG.md | sed -e '/^$/,$d' > CHANGELOG.txt
- cd av-metrics-bins
- strip av-metrics-tool.exe
- mv av-metrics-tool.exe ..
- name: Create a release
uses: softprops/action-gh-release@v1
@@ -71,5 +297,7 @@ jobs:
body_path: CHANGELOG.txt
files: |
av-metrics-tool.exe
+ av-metrics-gui-ffmpeg-linux.tar.gz
+ av-metrics-gui-ffmpeg-windows.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}