Implement customer-focused code based on Deskflow #23
Workflow file for this run
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
# 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 }} | |
PACKAGE_BUILD: ${{ !github.event.pull_request.draft }} | |
PACKAGE_UPLOAD: ${{ !github.event.pull_request.draft }} | |
SYNERGY_PRODUCT_NAME: ${{ vars.SYNERGY_PRODUCT_NAME }} | |
SYNERGY_PACKAGE_PREFIX: ${{ vars.SYNERGY_PACKAGE_PREFIX }} | |
jobs: | |
# Quality gate to allow PR merge, used in the branch protection rules. | |
ci-passed: | |
runs-on: ubuntu-latest | |
needs: [windows, macos, linux] | |
steps: | |
- run: echo "✅ CI passed" > $GITHUB_STEP_SUMMARY | |
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 | |
# HACK: Download Deskflow git repo first, but don't install deps. | |
# Maybe we should use submodules instead? That way we can just add the submodule | |
# arg to `actions/checkout`. | |
# Submodules suck, but maybe this is the appropriate use case. | |
- name: Install dependencies | |
run: python ./scripts/setup.py --no-install-deps | |
- name: Cache vcpkg dir | |
uses: actions/cache@v4 | |
with: | |
path: | | |
deskflow/vcpkg | |
deskflow/vcpkg_installed | |
key: vcpkg-${{ runner.os }}-${{ hashFiles('deskflow/vcpkg.json', 'deskflow/vcpkg-configuration.json') }} | |
- name: Cache deps dir | |
uses: actions/cache@v4 | |
with: | |
path: deskflow/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 | |
env: | |
VCPKG_ROOT: "" # Unset deliberately to suppress 'already installed' warning. | |
run: python ./scripts/setup.py | |
- name: Get version | |
uses: ./deskflow/.github/actions/get-version | |
- name: Configure | |
run: cmake -B build --preset=windows-release | |
- name: Build | |
run: cmake --build build -j8 | |
- name: Tests | |
uses: ./deskflow/.github/actions/run-tests | |
timeout-minutes: 2 | |
with: | |
job: ${{ matrix.target.name }} | |
bin-dir: build/deskflow/bin | |
- name: Package | |
if: ${{ 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: ${{ env.PACKAGE_UPLOAD == 'true' }} | |
uses: ./deskflow/.github/actions/dist-upload | |
with: | |
use-github: true | |
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.target.name }}" | |
package-version: ${{ env.DESKFLOW_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 | |
- name: Cache deps dir | |
uses: actions/cache@v4 | |
with: | |
path: deskflow/deps | |
key: ${{ runner.os }}-deps-${{ hashFiles('config.yaml') }} | |
- name: Install dependencies | |
run: ./scripts/setup.py | |
- name: Debug | |
run: ls -R | |
- name: Get version | |
uses: ./deskflow/.github/actions/get-version | |
- name: Configure | |
run: cmake -B build --preset=mac-release | |
- name: Build | |
run: cmake --build build -j8 | |
- name: Tests | |
uses: ./deskflow/.github/actions/run-tests | |
timeout-minutes: 2 | |
with: | |
job: ${{ matrix.target.name }} | |
bin-dir: build/deskflow/bin | |
- name: Package | |
if: ${{ 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: ${{ env.PACKAGE_UPLOAD == 'true' }} | |
uses: ./deskflow/.github/actions/dist-upload | |
with: | |
use-github: true | |
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.target.name }}" | |
package-version: ${{ env.DESKFLOW_VERSION }} | |
linux-matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
json-matrix: ${{ steps.get.outputs.json }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: ./scripts/setup.py --no-install-deps | |
- name: Get JSON file | |
id: get | |
run: | | |
json_file="./deskflow/.github/workflows/ci-linux.json" | |
json=$(cat $json_file) | |
echo "json=$(echo $json)" >> $GITHUB_OUTPUT | |
linux: | |
needs: linux-matrix | |
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: ${{fromJson(needs.linux-matrix.outputs.json-matrix)}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Config Git safe dir | |
run: git config --global --add safe.directory $GITHUB_WORKSPACE | |
- name: Install dependencies | |
run: ./scripts/setup.py ${{ matrix.distro.extra-dep-args }} | |
env: | |
# Prevent apt prompting for input. | |
DEBIAN_FRONTEND: noninteractive | |
- name: Get version | |
uses: ./deskflow/.github/actions/get-version | |
- name: Configure | |
run: cmake -B build --preset=linux-release ${{ matrix.distro.extra-cmake-args }} | |
- name: Build | |
run: cmake --build build -j8 | |
- name: Tests | |
uses: ./deskflow/.github/actions/run-tests | |
timeout-minutes: 2 | |
with: | |
job: linux-${{ matrix.distro.name }} | |
bin-dir: build/deskflow/bin | |
- name: Package | |
if: ${{ 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: ${{ env.PACKAGE_UPLOAD == 'true' }} | |
uses: ./deskflow/.github/actions/dist-upload | |
with: | |
use-github: true | |
github-target-filename: "${{ env.SYNERGY_PACKAGE_PREFIX }}-${{ matrix.distro.name }}" | |
package-version: ${{ env.DESKFLOW_VERSION }} |