Build and create packages #265
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
name: Build and create packages | ||
on: | ||
push: | ||
branches: | ||
- main | ||
- github-actions | ||
tags: | ||
- 'v*' | ||
pull_request: | ||
branches: | ||
- main | ||
jobs: | ||
build-cmake: | ||
name: Build ${{ matrix.config.name }} | ||
runs-on: ${{ matrix.config.os }} | ||
# see https://gist.github.com/NickNaso/0d478f1481686d5bcc868cac06620a60 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
name: "Windows MSVC", | ||
build_dir: "windows-msvc", | ||
os: windows-2022, | ||
build_type: "Release", | ||
cc: "cl", | ||
cxx: "cl", | ||
generators: "Ninja", | ||
} | ||
# - { | ||
# name: "Windows MinGW", | ||
# build_dir: "windows-mingw", | ||
# os: windows-latest, | ||
# build_type: "Release", | ||
# cc: "gcc", | ||
# cxx: "g++", | ||
# generators: "Ninja" | ||
# } | ||
- { | ||
name: "Windows Clang 16", | ||
build_dir: "windows-clang", | ||
os: windows-2022, | ||
build_type: "Release", | ||
cc: "clang", | ||
cxx: "clang++", | ||
generators: "Ninja", | ||
} | ||
- { | ||
name: "Ubuntu GCC", | ||
build_dir: "ubuntu-gcc", | ||
os: ubuntu-22.04, | ||
build_type: "Release", | ||
cc: "gcc", | ||
cxx: "g++", | ||
generators: "Ninja", | ||
} | ||
- { | ||
name: "Ubuntu Clang", | ||
build_dir: "ubuntu-clang", | ||
os: ubuntu-22.04, | ||
build_type: "Release", | ||
cc: "clang", | ||
cxx: "clang++", | ||
generators: "Ninja", | ||
} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: lukka/get-cmake@latest | ||
- name: Install Qt | ||
uses: jurplel/install-qt-action@v4 | ||
with: | ||
version: 6.7.1 | ||
modules: "qt5compat" | ||
cache: true | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: "3.11" | ||
- name: Install cmake-format | ||
run: pip3 install cmake-format | ||
- name: Setup MSVC (optional) | ||
if: ${{ matrix.config.cxx == 'cl' }} | ||
uses: ilammy/msvc-dev-cmd@v1 | ||
- name: Confiure | ||
working-directory: ${{ github.workspace }} | ||
id: runcmake | ||
run: | | ||
pwd | ||
cmake -B "build/${{ matrix.config.build_dir }}" -G "${{ matrix.config.generators }}" -DCMAKE_BUILD_TYPE="${{ matrix.config.build_type }}" -DCMAKE_C_COMPILER=${{ matrix.config.cc }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} | ||
pwd | ||
- name: Build | ||
working-directory: ${{ github.workspace }} | ||
id: runcmakebuild | ||
run: | | ||
cmake --build "build/${{ matrix.config.build_dir }}" --parallel --verbose | ||
- name: Install | ||
working-directory: ${{ github.workspace }} | ||
id: runcmakeinstall | ||
run: | | ||
cmake --install "build/${{ matrix.config.build_dir }}" --prefix="dist/${{ matrix.config.build_dir }}/usr" | ||
- name: Set version tag or commit SHA | ||
id: version | ||
run: | | ||
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then | ||
echo "version=${GITHUB_REF##refs/tags/}" >> $GITHUB_ENV | ||
else | ||
echo "version=${GITHUB_SHA::7}" >> $GITHUB_ENV | ||
fi | ||
shell: bash | ||
- name: Create AppImage (linux) | ||
if: matrix.config.os == 'ubuntu-22.04' && matrix.config.cc == 'gcc' | ||
run: | | ||
# Qt plugin does not bundle the needed plugins, do this manually | ||
mkdir -p "dist/${{ matrix.config.build_dir }}/usr/plugins/iconengines/" | ||
mkdir -p "dist/${{ matrix.config.build_dir }}/usr/plugins/platforms/" | ||
cp -arv ${QT_ROOT_DIR}/plugins/iconengines/* "dist/${{ matrix.config.build_dir }}/usr/plugins/iconengines/" | ||
cp -arv ${QT_ROOT_DIR}/plugins/platforms/libqwayland-*.so "dist/${{ matrix.config.build_dir }}/usr/plugins/platforms/" | ||
export LD_LIBRARY_PATH=dist/${{ matrix.config.build_dir }}/usr/lib:$LD_LIBRARY_PATH | ||
export OUTPUT=build/qtedit4-qt671-${{ env.version }}-x86_64.AppImage | ||
sudo apt install fuse libxkbcommon-x11-0 libxcb-cursor-dev libxkbcommon-dev | ||
wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" | ||
wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" | ||
chmod +x linuxdeploy*.AppImage | ||
./linuxdeploy-x86_64.AppImage --appdir "dist/${{ matrix.config.build_dir }}" --plugin qt --output appimage | ||
- name: Upload AppImage (linux) | ||
if: matrix.config.os == 'ubuntu-22.04' && matrix.config.cc == 'gcc' | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: qtedit4-qt671-${{ env.version }}-x86_64.AppImage | ||
path: build/qtedit4-qt671-${{ env.version }}-x86_64.AppImage | ||
- name: windeployqt (Windows) | ||
if: matrix.config.os == 'windows-2022' && matrix.config.cc == 'cl' | ||
run: | | ||
windeployqt --release --no-translations --no-system-d3d-compiler --no-compiler-runtime --no-opengl-sw dist/${{ matrix.config.build_dir }}/usr/bin/qtedit4.exe | ||
- name: Create setup (Windows) | ||
if: matrix.config.os == 'windows-2022' && matrix.config.cc == 'cl' | ||
uses: Minionguyjpro/[email protected] | ||
with: | ||
path: "setup_script.iss" | ||
options: /O+ | ||
- name: Rename and upload setup (Windows) | ||
if: matrix.config.os == 'windows-2022' && matrix.config.cc == 'cl' | ||
run: | | ||
copy dist\qtedit4-win64.exe dist\qtedit4-qt671-${{ env.version }}-x86_64.exe | ||
shell: cmd | ||
- name: Upload renamed setup (Windows) | ||
if: matrix.config.os == 'windows-2022' && matrix.config.cc == 'cl' | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: qtedit4-qt671-${{ env.version }}-x86_64.exe | ||
path: dist/qtedit4-qt671-${{ env.version }}-x86_64.exe | ||
- name: Generate Release Notes | ||
if: matrix.config.os == 'ubuntu-22.04' && matrix.config.cc == 'clang' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | ||
run: | | ||
gh release view ${{ github.ref_name }} --json body > release-notes.txt || echo "No previous release found" | ||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | ||
- name: Upload Release Notes | ||
if: matrix.config.os == 'ubuntu-22.04' && matrix.config.cc == 'clang' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: release-notes.txt | ||
path: release-notes.txt | ||
create-release: | ||
name: Draft GitHub Release | ||
needs: build-cmake | ||
runs-on: ubuntu-latest | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | ||
steps: | ||
- name: Download Release Notes | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: release-notes.txt | ||
path: ./ | ||
- name: Download all artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
merge-multiple: true | ||
path: ./artifacts | ||
- name: Create Draft Release | ||
run: | | ||
gh release create ${{ github.ref_name }} --title ${{ github.ref_name }} --notes-file release-notes.txt --draft | ||
- name: Upload assets to release | ||
run: | | ||
gh release upload ${{ github.ref_name }} ./artifacts/* |