Skip to content

docs(readme): announce Gemini 3.5 profile support #94

docs(readme): announce Gemini 3.5 profile support

docs(readme): announce Gemini 3.5 profile support #94

Workflow file for this run

# =============================================================================
# Gemini Watermark Tool - Cross-Platform CI
# =============================================================================
name: Build
on:
push:
branches: [ main, develop ]
tags: [ 'v*' ]
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
- '.gitignore'
pull_request:
branches: [ main ]
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
- '.gitignore'
workflow_dispatch:
env:
VCPKG_COMMIT: '594ad8871e1e8e45f8e626c015fd611163430207'
UPX_VERSION: '4.2.4'
jobs:
# ===========================================================================
# Windows Build
# ===========================================================================
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: '594ad8871e1e8e45f8e626c015fd611163430207'
- name: Configure & Build
run: |
cmake --preset windows-x64-Release
cmake --build --preset windows-x64-Release
- name: Test binary (--version)
run: ./out/build/windows-x64-Release/GeminiWatermarkTool.exe --version
- name: Test binary (AI denoise pipeline)
shell: bash
run: bash scripts/ci_smoke_ai_denoise.sh ./out/build/windows-x64-Release/GeminiWatermarkTool.exe
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: GeminiWatermarkTool-Windows-x64
path: out/build/windows-x64-Release/GeminiWatermarkTool.exe
# ===========================================================================
# Linux Build
# ===========================================================================
build-linux:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
ninja-build \
libxmu-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libegl1-mesa-dev \
libx11-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
libxext-dev \
libwayland-dev \
libxkbcommon-dev \
wayland-protocols \
libltdl-dev \
libvulkan-dev
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: '594ad8871e1e8e45f8e626c015fd611163430207'
- name: Configure & Build
run: |
cmake --preset linux-x64-Release
cmake --build --preset linux-x64-Release
- name: Test binary (--version)
run: ./out/build/linux-x64-Release/GeminiWatermarkTool --version
- name: Test binary (AI denoise pipeline)
run: bash scripts/ci_smoke_ai_denoise.sh ./out/build/linux-x64-Release/GeminiWatermarkTool
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: GeminiWatermarkTool-Linux-x64
path: out/build/linux-x64-Release/GeminiWatermarkTool
# ===========================================================================
# macOS Build (Universal Binary)
# ===========================================================================
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: brew list ninja || brew install ninja
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: '594ad8871e1e8e45f8e626c015fd611163430207'
- name: Build x64
run: |
cmake -B build-x64 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=ON \
-DENABLE_AI_DENOISE=ON \
-DVCPKG_MANIFEST_FEATURES="gui;ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-osx \
-DCMAKE_OSX_ARCHITECTURES=x86_64
cmake --build build-x64
- name: Build arm64
run: |
cmake -B build-arm64 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=ON \
-DENABLE_AI_DENOISE=ON \
-DVCPKG_MANIFEST_FEATURES="gui;ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=arm64-osx \
-DCMAKE_OSX_ARCHITECTURES=arm64
cmake --build build-arm64
- name: Create Universal Binary
run: |
lipo -create build-x64/GeminiWatermarkTool build-arm64/GeminiWatermarkTool -output GeminiWatermarkTool
strip GeminiWatermarkTool
- name: Ad-hoc code sign
run: |
mkdir -p dist
cp GeminiWatermarkTool dist/
codesign --force -s - dist/GeminiWatermarkTool
codesign -vv dist/GeminiWatermarkTool
mv dist/GeminiWatermarkTool .
rmdir dist
- name: Test binary (--version)
run: ./GeminiWatermarkTool --version
- name: Test binary (AI denoise pipeline)
run: bash scripts/ci_smoke_ai_denoise.sh ./GeminiWatermarkTool
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: GeminiWatermarkTool-macOS-Universal
path: GeminiWatermarkTool
# ===========================================================================
# gwt-mini: minimal CLI build (no GUI, AI denoise ON, UPX on win/linux)
# ===========================================================================
mini-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
- name: Configure & Build (mini)
shell: bash
run: |
cmake -B build-mini -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=OFF \
-DENABLE_AI_DENOISE=ON \
-DENABLE_VIDEO=OFF \
-DVCPKG_MANIFEST_FEATURES="ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-windows-static \
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
cmake --build build-mini
- name: Rename binary
shell: bash
run: |
cp build-mini/GeminiWatermarkTool.exe gwt-mini.exe
echo "--- size before UPX ---"
ls -lh gwt-mini.exe
- name: Install UPX
shell: bash
run: |
curl -L -o upx.zip "https://github.com/upx/upx/releases/download/v${UPX_VERSION}/upx-${UPX_VERSION}-win64.zip"
unzip -j upx.zip "*/upx.exe" -d .
./upx.exe --version
- name: UPX compress
shell: bash
run: |
./upx.exe --best --lzma gwt-mini.exe
echo "--- size after UPX ---"
ls -lh gwt-mini.exe
- name: Smoke test (--version)
shell: bash
run: ./gwt-mini.exe --version
- name: Smoke test (AI denoise pipeline)
shell: bash
run: bash scripts/ci_smoke_ai_denoise.sh ./gwt-mini.exe
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gwt-mini-windows-x64
path: gwt-mini.exe
mini-linux:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install deps (ninja, vulkan loader, upx)
run: |
sudo apt-get update
sudo apt-get install -y ninja-build libvulkan-dev upx-ucl
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
- name: Configure & Build (mini)
run: |
cmake -B build-mini -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=OFF \
-DENABLE_AI_DENOISE=ON \
-DENABLE_VIDEO=OFF \
-DVCPKG_MANIFEST_FEATURES="ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build-mini
- name: Rename + strip
run: |
cp build-mini/GeminiWatermarkTool gwt-mini
strip gwt-mini
echo "--- size after strip ---"
ls -lh gwt-mini
- name: UPX compress
run: |
upx --best --lzma gwt-mini
echo "--- size after UPX ---"
ls -lh gwt-mini
- name: Smoke test (--version)
run: ./gwt-mini --version
- name: Smoke test (AI denoise pipeline)
run: bash scripts/ci_smoke_ai_denoise.sh ./gwt-mini
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gwt-mini-linux-x64
path: gwt-mini
mini-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install ninja
run: brew list ninja >/dev/null 2>&1 || brew install ninja
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
- name: Build x86_64
run: |
cmake -B build-mini-x64 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=OFF \
-DENABLE_AI_DENOISE=ON \
-DENABLE_VIDEO=OFF \
-DVCPKG_MANIFEST_FEATURES="ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-osx \
-DCMAKE_OSX_ARCHITECTURES=x86_64
cmake --build build-mini-x64
- name: Build arm64
run: |
cmake -B build-mini-arm64 -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_GUI=OFF \
-DENABLE_AI_DENOISE=ON \
-DENABLE_VIDEO=OFF \
-DVCPKG_MANIFEST_FEATURES="ai-denoise" \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=arm64-osx \
-DCMAKE_OSX_ARCHITECTURES=arm64
cmake --build build-mini-arm64
- name: Lipo + strip + ad-hoc codesign
run: |
lipo -create \
build-mini-x64/GeminiWatermarkTool \
build-mini-arm64/GeminiWatermarkTool \
-output gwt-mini
strip gwt-mini
codesign --force -s - gwt-mini
codesign -vv gwt-mini
echo "--- final size (no UPX on macOS) ---"
ls -lh gwt-mini
- name: Smoke test (--version)
run: ./gwt-mini --version
- name: Smoke test (AI denoise pipeline)
run: bash scripts/ci_smoke_ai_denoise.sh ./gwt-mini
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gwt-mini-macos-universal
path: gwt-mini
# ===========================================================================
# Release (on tag push)
# ===========================================================================
release:
needs: [build-windows, build-linux, build-macos, mini-windows, mini-linux, mini-macos]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --tags --force
- name: Get tag message
id: tag
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
echo "Tag name: $TAG_NAME"
TAG_MESSAGE=$(git for-each-ref --format='%(contents)' refs/tags/$TAG_NAME)
echo "message<<EOF" >> $GITHUB_OUTPUT
echo "$TAG_MESSAGE" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: List downloaded files
run: find . -type f
- name: Prepare release files
run: |
# --- Full builds (GUI + AI denoise) ---
# Windows
cp GeminiWatermarkTool-Windows-x64/GeminiWatermarkTool.exe ./GeminiWatermarkTool.exe
zip GeminiWatermarkTool-Windows-x64.zip GeminiWatermarkTool.exe
rm GeminiWatermarkTool.exe
# Linux
cp GeminiWatermarkTool-Linux-x64/GeminiWatermarkTool ./GeminiWatermarkTool
chmod +x GeminiWatermarkTool
zip GeminiWatermarkTool-Linux-x64.zip GeminiWatermarkTool
rm GeminiWatermarkTool
# macOS
cp GeminiWatermarkTool-macOS-Universal/GeminiWatermarkTool ./GeminiWatermarkTool
chmod +x GeminiWatermarkTool
zip GeminiWatermarkTool-macOS-Universal.zip GeminiWatermarkTool
rm GeminiWatermarkTool
# --- gwt-mini (CLI only, no GUI, UPX on win/linux) ---
# Windows mini
cp gwt-mini-windows-x64/gwt-mini.exe ./gwt-mini.exe
zip gwt-mini-windows-x64.zip gwt-mini.exe
rm gwt-mini.exe
# Linux mini
cp gwt-mini-linux-x64/gwt-mini ./gwt-mini
chmod +x gwt-mini
zip gwt-mini-linux-x64.zip gwt-mini
rm gwt-mini
# macOS mini
cp gwt-mini-macos-universal/gwt-mini ./gwt-mini
chmod +x gwt-mini
zip gwt-mini-macos-universal.zip gwt-mini
rm gwt-mini
- name: Generate SHA256SUMS.txt
run: |
sha256sum *.zip > SHA256SUMS.txt
echo "--- SHA256SUMS.txt ---"
cat SHA256SUMS.txt
- name: Create Release
uses: softprops/action-gh-release@v1
with:
body: ${{ steps.tag.outputs.message }}
files: |
GeminiWatermarkTool-Windows-x64.zip
GeminiWatermarkTool-Linux-x64.zip
GeminiWatermarkTool-macOS-Universal.zip
gwt-mini-windows-x64.zip
gwt-mini-linux-x64.zip
gwt-mini-macos-universal.zip
SHA256SUMS.txt
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}