* Add experimental BSD job to CI * Remove container * cd into ` synergy/synergy/` * Change unix to bsd * Use only run param and not prepare * Install python3 on FreeBSD * Add missing command to prepare param * Add all the Unix-like BSD-derived * Use latest python3 for NetBSD and DragonFly BSD * Use env for cmd and correct prepare commands * Add deps config for unix-like * Install Python deps on Unix-like * Return matching entry in `get_unix_like_os` * Add cmake dep for cmakelang py module * Back out Unix-like support in `install_deps.py` (Python is tricky on BSD) * Back out BSD from config * Create install_deps.sh script for BSD-derived * Use .sh script instead of .py for BSD-derived * Add other case and fixed syntax * Use /usr/bin/env * Use more available sh * Restore debian command * Fixed syntax error * Remove prepare args * Remove space * Use which instead of command * Add libX11 dep * Add other BSD-derivatives * Set CMAKE_REQUIRED_INCLUDES * Fixed bad separator for CMAKE_REQUIRED_INCLUDES * Add debug lines * Set CMAKE_REQUIRED_LIBRARIES to lib names * use CMAKE_REQUIRED_QUIET * Set CMAKE_REQUIRED_FLAGS for BSD * Message for BSD packaging * Make PKG_CONFIG_FOUND optional * Move debug to all OS * Remove solaris for now, too many missing packages * Add missing override to XWindowsScreen.h * Add PC_GLIB_INCLUDE_DIRS * Fixed glib include * Make libnotify optional * Set CMAKE_LIBRARY_PATH * Only run tests if toml++ available * Also run integ tests * Remove DragonFly (C++ version too old) * Fixed NetBSD command * Aww sucks. Well, I tried. Patches welcome * Update ChangeLog * Fixed README for OpenBSD, NetBSD, DragonFly BSD, Solaris * Add missing case for SunOS * Drop redundant virtual specifiers * Print libs on FreeBSD * Restore link_directories * Beef up to ubuntu-24.04-16-core-x64, export QT_QPA_PLATFORM, improve comment * Remove debug line * Simplify debug text * Restore ubuntu-latest * Fixed really stupid typo * Beef up with ubuntu-22.04-16-core-x64 * Revert "Beef up with ubuntu-22.04-16-core-x64" This reverts commit 3de5773ef6c6eea99b93d3ee8448b0b95dc00dde. * Add missing name * Make .sh file primary deps file * Tweaked deps instruction label
367 lines
11 KiB
YAML
367 lines
11 KiB
YAML
# All-in-one continuous integration (CI) workflow.
|
|
# Runs on all platforms (Windows, macOS, and Linux)
|
|
# for all events (pull request, release, and schedule).
|
|
|
|
name: CI
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: Synergy version number
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- reopened
|
|
- synchronize
|
|
- ready_for_review
|
|
schedule:
|
|
- cron: "0 5 * * *" # 5am UTC
|
|
|
|
env:
|
|
GIT_SHA: ${{ github.sha }}
|
|
SYNERGY_PRODUCT_NAME: ${{ vars.SYNERGY_PRODUCT_NAME }}
|
|
SYNERGY_PACKAGE_PREFIX: ${{ vars.SYNERGY_PACKAGE_PREFIX }}
|
|
SYNERGY_LICENSED_PRODUCT: ${{ vars.SYNERGY_LICENSED_PRODUCT }}
|
|
SYNERGY_ENABLE_ACTIVATION: ${{ vars.SYNERGY_ENABLE_ACTIVATION }}
|
|
PACKAGE_BUILD: ${{ !github.event.pull_request.draft }}
|
|
PACKAGE_UPLOAD: ${{ !github.event.pull_request.draft && github.ref_name != 'master' }}
|
|
UPLOAD_TO_GITHUB: ${{ github.event_name == 'pull_request' && !github.event.pull_request.draft }}
|
|
UPLOAD_TO_GDRIVE: ${{ github.event_name != 'pull_request' }}
|
|
|
|
jobs:
|
|
setup:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Test setup
|
|
uses: ./.github/actions/run-tests-setup
|
|
|
|
windows:
|
|
name: ${{ matrix.target.name }}
|
|
runs-on: ${{ matrix.target.runs-on }}
|
|
container: ${{ matrix.target.container }}
|
|
timeout-minutes: 20
|
|
|
|
strategy:
|
|
# Normally, we want to fail fast, but in this case we shouldn't since one target may
|
|
# fail due to transient issues unrelated to the build.
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
target:
|
|
- name: windows-2022-x64
|
|
runs-on: windows-2022-8-core-x64
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Get version
|
|
uses: ./.github/actions/get-version
|
|
|
|
- name: Cache vcpkg dir
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: vcpkg_installed
|
|
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
|
|
restore-keys: vcpkg-${{ runner.os }}
|
|
|
|
- name: Cache Python env
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: build/python
|
|
key: python_env-${{ runner.os }}-${{ hashFiles('scripts/pyproject.toml') }}
|
|
|
|
- name: Cache deps dir
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ./deps
|
|
key: ${{ runner.os }}-deps-${{ hashFiles('config.yaml') }}
|
|
|
|
# This effectively runs `vcvarsall.bat`, etc. It's not actually installing
|
|
# VC++ as that's already pre-installed on the Windows runner.
|
|
- name: Setup VC++ environment
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
|
|
# Install Ninja with an action instead of using Chocolatey, as it's more
|
|
# reliable and faster. The Ninja install action is pretty good as it
|
|
# downloads directly from the `ninja-build` GitHub project releases.
|
|
- name: Install Ninja
|
|
uses: seanmiddleditch/gha-setup-ninja@master
|
|
|
|
- name: Install dependencies
|
|
run: python ./scripts/install_deps.py
|
|
|
|
- name: Configure
|
|
run: cmake -B build --preset=windows-release
|
|
|
|
- name: Build
|
|
run: cmake --build build -j8
|
|
|
|
- name: Tests
|
|
uses: ./.github/actions/run-tests
|
|
timeout-minutes: 2
|
|
with:
|
|
job: ${{ matrix.target.name }}
|
|
|
|
- name: Package
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_BUILD == 'true' }}
|
|
run: python ./scripts/package.py
|
|
env:
|
|
WINDOWS_PFX_CERTIFICATE: ${{ secrets.WINDOWS_PFX }}
|
|
WINDOWS_PFX_PASSWORD: ${{ secrets.WINDOWS_PFX_PASS }}
|
|
|
|
- name: Upload
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_UPLOAD == 'true' }}
|
|
uses: ./.github/actions/dist-upload
|
|
with:
|
|
use_github: ${{ env.UPLOAD_TO_GITHUB }}
|
|
use_gdrive: ${{ env.UPLOAD_TO_GDRIVE }}
|
|
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.target.name }}"
|
|
gdrive-target-base-dir: ${{ vars.GDRIVE_TARGET_BASE_DIR }}
|
|
gdrive-secret-key: ${{ secrets.GOOGLE_DRIVE_KEY }}
|
|
gdrive-parent-folder-id: ${{ secrets.GOOGLE_DRIVE_TECH_DRIVE }}
|
|
package-version: ${{ env.SYNERGY_VERSION }}
|
|
|
|
macos:
|
|
name: ${{ matrix.target.name }}
|
|
runs-on: ${{ matrix.target.os }}
|
|
timeout-minutes: ${{ matrix.target.timeout }}
|
|
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.target.shell }}
|
|
|
|
strategy:
|
|
# Normally, we want to fail fast, but in this case we shouldn't since one target may
|
|
# fail due to transient issues unrelated to the build.
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
target:
|
|
- name: "macos-14-arm64"
|
|
timeout: 10
|
|
os: "macos-14"
|
|
arch: arm64
|
|
shell: "/usr/bin/arch -arch arm64e /bin/bash --noprofile --norc -eo pipefail {0}"
|
|
|
|
- name: "macos-14-x64"
|
|
timeout: 20
|
|
os: "macos-14-large"
|
|
arch: x64
|
|
shell: "bash"
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Get version
|
|
uses: ./.github/actions/get-version
|
|
|
|
- name: Cache deps dir
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ./deps
|
|
key: ${{ runner.os }}-deps-${{ hashFiles('config.yaml') }}
|
|
|
|
- name: Install dependencies
|
|
run: ./scripts/install_deps.py
|
|
|
|
- name: Configure
|
|
run: cmake -B build --preset=macos-release
|
|
|
|
- name: Build
|
|
run: cmake --build build -j8
|
|
|
|
- name: Tests
|
|
uses: ./.github/actions/run-tests
|
|
timeout-minutes: 2
|
|
with:
|
|
job: ${{ matrix.target.name }}
|
|
|
|
- name: Package
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_BUILD == 'true' }}
|
|
run: ./scripts/package.py
|
|
env:
|
|
APPLE_CODESIGN_ID: ${{ secrets.APPLE_CODESIGN_ID }}
|
|
APPLE_P12_CERTIFICATE: ${{ secrets.APPLE_P12_CERTIFICATE }}
|
|
APPLE_P12_PASSWORD: ${{ secrets.APPLE_P12_PASSWORD }}
|
|
APPLE_NOTARY_USER: ${{ secrets.APPLE_NOTARY_USER }}
|
|
APPLE_NOTARY_PASSWORD: ${{ secrets.APPLE_NOTARY_PASSWORD }}
|
|
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
|
|
- name: Upload
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_UPLOAD == 'true' }}
|
|
uses: ./.github/actions/dist-upload
|
|
with:
|
|
use_github: ${{ env.UPLOAD_TO_GITHUB }}
|
|
use_gdrive: ${{ env.UPLOAD_TO_GDRIVE }}
|
|
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.target.name }}"
|
|
gdrive-target-base-dir: ${{ vars.GDRIVE_TARGET_BASE_DIR }}
|
|
gdrive-secret-key: ${{ secrets.GOOGLE_DRIVE_KEY }}
|
|
gdrive-parent-folder-id: ${{ secrets.GOOGLE_DRIVE_TECH_DRIVE }}
|
|
package-version: ${{ env.SYNERGY_VERSION }}
|
|
|
|
linux:
|
|
name: linux-${{ matrix.distro.name }}
|
|
runs-on: ${{ matrix.distro.runs-on }}
|
|
container: ${{ matrix.distro.container }}
|
|
timeout-minutes: 20
|
|
|
|
strategy:
|
|
# Normally, we want to fail fast, but in this case we shouldn't since one distro may
|
|
# fail due to transient issues unrelated to the build.
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
distro:
|
|
- name: debian-13-amd64
|
|
container: symless/synergy-core:debian-13-amd64
|
|
runs-on: ubuntu-latest
|
|
extra-packages: true
|
|
|
|
- name: debian-12-arm64
|
|
container: symless/synergy-core:debian-12-arm64
|
|
runs-on: ubuntu-24.04-8-core-arm64
|
|
extra-packages: true
|
|
|
|
- name: debian-12-amd64
|
|
container: symless/synergy-core:debian-12-amd64
|
|
runs-on: ubuntu-latest
|
|
extra-packages: true
|
|
|
|
- name: ubuntu-24.04-amd64
|
|
container: symless/synergy-core:ubuntu-24.04-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: ubuntu-22.04-amd64
|
|
container: symless/synergy-core:ubuntu-22.04-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: fedora-40-arm64
|
|
container: symless/synergy-core:fedora-40-arm64
|
|
runs-on: ubuntu-24.04-8-core-arm64
|
|
|
|
- name: fedora-40-amd64
|
|
container: symless/synergy-core:fedora-40-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: fedora-39-amd64
|
|
container: symless/synergy-core:fedora-39-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: opensuse-amd64
|
|
container: symless/synergy-core:opensuse-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: rockylinux-9-amd64
|
|
container: symless/synergy-core:rockylinux-9-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: almalinux-9-amd64
|
|
container: symless/synergy-core:almalinux-9-amd64
|
|
runs-on: ubuntu-latest
|
|
|
|
- name: archlinux-amd64
|
|
container: symless/synergy-core:archlinux-amd64
|
|
runs-on: ubuntu-latest
|
|
package-user: build
|
|
|
|
- name: manjaro-amd64
|
|
container: symless/synergy-core:manjaro-amd64
|
|
runs-on: ubuntu-latest
|
|
package-user: build
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Get version
|
|
uses: ./.github/actions/get-version
|
|
|
|
- name: Config Git safe dir
|
|
run: git config --global --add safe.directory $GITHUB_WORKSPACE
|
|
|
|
- name: Install dependencies
|
|
run: ./scripts/install_deps.py
|
|
env:
|
|
# Prevent apt prompting for input.
|
|
DEBIAN_FRONTEND: noninteractive
|
|
|
|
- name: Configure
|
|
run: cmake -B build --preset=linux-release
|
|
|
|
- name: Build
|
|
run: cmake --build build -j8
|
|
|
|
- name: Tests
|
|
uses: ./.github/actions/run-tests
|
|
timeout-minutes: 2
|
|
with:
|
|
job: linux-${{ matrix.distro.name }}
|
|
|
|
- name: Package
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_BUILD == 'true' }}
|
|
env:
|
|
LINUX_EXTRA_PACKAGES: ${{ matrix.distro.extra-packages }}
|
|
LINUX_PACKAGE_USER: ${{ matrix.distro.package-user }}
|
|
run: ./scripts/package.py
|
|
|
|
- name: Upload
|
|
if: ${{ vars.SYNERGY_ENABLE_PACKAGING && env.PACKAGE_UPLOAD == 'true' }}
|
|
uses: ./.github/actions/dist-upload
|
|
with:
|
|
use_github: ${{ env.UPLOAD_TO_GITHUB }}
|
|
use_gdrive: ${{ env.UPLOAD_TO_GDRIVE }}
|
|
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.distro.name }}"
|
|
gdrive-target-base-dir: ${{ vars.GDRIVE_TARGET_BASE_DIR }}
|
|
gdrive-secret-key: ${{ secrets.GOOGLE_DRIVE_KEY }}
|
|
gdrive-parent-folder-id: ${{ secrets.GOOGLE_DRIVE_TECH_DRIVE }}
|
|
package-version: ${{ env.SYNERGY_VERSION }}
|
|
|
|
# Technically, "unix" is a misnomer, but we use it here to mean "Unix-like BSD-derived".
|
|
unix:
|
|
name: unix-${{ matrix.distro.name }}
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
|
|
env:
|
|
SYNERGY_BUILD_CMD: |
|
|
./scripts/install_deps.sh;
|
|
cmake -B build;
|
|
cmake --build build -j8;
|
|
export QT_QPA_PLATFORM=offscreen;
|
|
./build/bin/unittests
|
|
./build/bin/integtests
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
distro:
|
|
- name: freebsd
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: "recursive"
|
|
|
|
- name: Build on FreeBSD
|
|
if: ${{ matrix.distro.name == 'freebsd' }}
|
|
uses: vmactions/freebsd-vm@v1
|
|
with:
|
|
usesh: true
|
|
run: ${{ env.SYNERGY_BUILD_CMD }}
|