docs(readme): announce Gemini 3.5 profile support #94
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
| # ============================================================================= | |
| # 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 }} |