Skip to content

feat(ci): create tarballs #300

feat(ci): create tarballs

feat(ci): create tarballs #300

Workflow file for this run

name: Build
on: [push]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
build-type: [Release]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev \
libxrandr-dev \
libgl1-mesa-dev \
libncurses5
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
if: runner.os != 'Windows' # Windows uses MSVC
with:
env: true
version: 17
- name: Install Ninja
uses: seanmiddleditch/gha-setup-ninja@master
with:
version: 1.12.1
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: "cd124b84feb0c02a24a2d90981e8358fdee0e077"
- name: Determine CMake Preset
id: select-preset
run: |
if [ "${{ runner.os }}" == "Windows" ]; then
prefix="win"
elif [ "${{ runner.os }}" == "Linux" ]; then
prefix="linux"
elif [ "${{ runner.os }}" == "macOS" ]; then
prefix="mac"
fi
preset="${prefix}-$(echo "${{ matrix.build-type }}" | tr '[:upper:]' '[:lower:]')"
echo "preset=$preset" >> $GITHUB_OUTPUT
shell: bash
- name: Use Developer Command Prompt for Microsoft Visual C++
if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Configure CMake
run: cmake --preset ${{ steps.select-preset.outputs.preset }}
env:
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
- name: Build
run: cmake --build . --preset ${{ steps.select-preset.outputs.preset }}
env:
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
- name: Prepare Binaries
id: prep
shell: bash
run: |
# Set up configuration variables
build_dir="bin/${{ matrix.build-type }}"
os="${{ runner.os }}"
build_type="${{ matrix.build-type }}"
arch="$(echo "${{ runner.arch }}" | tr '[:upper:]' '[:lower:]')"
configuration="$os-$build_type-$arch"
cd "$build_dir"
# Determine source and binary names
if [[ "$os" == "Windows" ]]; then
cli_source="blur-cli.exe"
gui_source="blur.exe"
cli_binary="blur-cli-$configuration.exe"
gui_binary="blur-$configuration.exe"
mv "$cli_source" "$cli_binary"
mv "$gui_source" "$gui_binary"
gui_path="$gui_binary"
cli_path="$cli_binary"
elif [[ "$os" == "Linux" ]]; then
cli_source="blur-cli"
gui_source="blur"
cli_binary="blur-cli-$configuration"
gui_binary="blur-$configuration"
mv "$cli_source" "$cli_binary"
tar -cvf "$configuration-cli.tar.gz" "$cli_binary"
cli_path="$configuration-cli.tar.gz"
mv "$gui_source" "$gui_binary"
tar -cvf "$configuration-gui.tar.gz" "$gui_binary"
gui_path="$configuration-gui.tar.gz"
elif [[ "$os" == "macOS" ]]; then
cli_source="blur-cli"
gui_source="blur.app"
cli_binary="blur-cli-$configuration"
gui_binary="blur-$configuration.dmg"
mv "$cli_source" "$cli_binary"
tar -cvf "$configuration-cli.tar.gz" "$cli_binary"
cli_path="$configuration-cli.tar.gz"
brew install create-dmg
mkdir source_folder
mv "$gui_source" source_folder
create-dmg \
--volname "Blur Installer" \
--hide-extension "Blur.app" \
"$gui_binary" \
"source_folder"
gui_path="$gui_binary"
fi
# Output for subsequent steps
echo "build_dir=$build_dir" >> $GITHUB_OUTPUT
echo "cli_path=$cli_path" >> $GITHUB_OUTPUT
echo "gui_path=$gui_path" >> $GITHUB_OUTPUT
echo "configuration=$configuration" >> $GITHUB_OUTPUT
- name: Upload Artifacts
uses: actions/upload-artifact@v3
with:
name: Blur-${{ steps.prep.outputs.configuration }}
path: |
${{ steps.prep.outputs.build_dir }}/${{ steps.prep.outputs.cli_path }}
${{ steps.prep.outputs.build_dir }}/${{ steps.prep.outputs.gui_path }}
- name: Release
uses: softprops/action-gh-release@v1
if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }}
with:
files: |
${{ steps.prep.outputs.build_dir }}/${{ steps.prep.outputs.cli_path }}
${{ steps.prep.outputs.build_dir }}/${{ steps.prep.outputs.gui_path }}