Merge pull request #786 from Murmele/update_links #2033
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
# https://docs.github.com/en/actions/learn-github-actions/contexts | |
--- | |
name: Gittyup | |
on: | |
push: | |
branches: | |
- master | |
tags: | |
- 'gittyup_v*' | |
pull_request: | |
page_build: | |
workflow_dispatch: | |
env: | |
IS_RELEASE: ${{ github.event_name == 'push' && github.ref_type == 'tag' && startswith(github.ref_name, 'gittyup_v') }} | |
jobs: | |
formatting-check: | |
name: Formatting Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Run clang-format style check for C/C++/Protobuf programs. | |
uses: jidicula/[email protected] | |
with: | |
clang-format-version: '13' | |
exclude-regex: 'dep' | |
- name: Check CMake code style | |
run: | | |
pip install cmake-format==0.6.13 && \ | |
find \( -type d -path './dep/*/*' -prune \) -o \( -name CMakeLists.txt -exec cmake-format --check {} + \) | |
flatpak: | |
name: "Flatpak" | |
runs-on: ubuntu-latest | |
container: | |
# image: bilelmoussaoui/flatpak-github-actions:kde-5.15-21.08 | |
image: archlinux:latest | |
options: --privileged | |
steps: | |
- name: Update | |
run: | | |
pacman --noconfirm -Suy | |
pacman --noconfirm -S flatpak flatpak-builder xorg-server-xvfb | |
flatpak install --assumeyes org.freedesktop.Sdk.Extension.golang//23.08 | |
- name: Show environment variables | |
run: > | |
echo IS_RELEASE: ${{ env.IS_RELEASE }} | |
# https://stackoverflow.com/questions/60916931/github-action-does-the-if-have-an-else | |
- name: Determine flatpak release branch | |
uses: haya14busa/action-cond@v1 | |
id: flatpak_release_branch | |
with: | |
cond: ${{ env.IS_RELEASE }} | |
if_true: 'stable' | |
if_false: 'development' | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Replace git tag by the commit id on which it runs | |
if: github.ref_type != 'tag' | |
run: > | |
sed -i 's@tag: .*@commit: "${{ (github.event.pull_request && github.event.pull_request.head.sha) || github.sha }}"@' com.github.Murmele.Gittyup.yml | |
- name: Use correct git tag | |
if: github.ref_type == 'tag' | |
run: > | |
sed -i 's@tag: .*$@tag: "${{ github.ref_name }}"@' com.github.Murmele.Gittyup.yml | |
- name: Replace source url | |
run: > | |
sed -i "s@url: .*Gittyup.git@url: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY@" com.github.Murmele.Gittyup.yml | |
- name: Add dev build marker to cmake options | |
if: github.ref_type != 'tag' | |
run: > | |
sed -i 's@config-opts: \["\(.*\)"\]@config-opts: ["\1", "-DDEV_BUILD=${{ github.ref_name }}"]@' com.github.Murmele.Gittyup.yml | |
- name: Replace desktop file name suffix | |
if: github.ref_type != 'tag' | |
run: > | |
sed -i 's@desktop-file-name-suffix: ""@desktop-file-name-suffix: " (Development)"@' com.github.Murmele.Gittyup.yml | |
- name: Enable automatic update | |
if: github.ref_type != 'tag' | |
run: > | |
sed -i 's@-DENABLE_UPDATE_OVER_GUI=OFF@-DENABLE_UPDATE_OVER_GUI=ON@' com.github.Murmele.Gittyup.yml | |
- name: Show Flatpak manifest | |
run: cat com.github.Murmele.Gittyup.yml | |
- name: Build package | |
uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v6 | |
with: | |
bundle: Gittyup.flatpak | |
manifest-path: com.github.Murmele.Gittyup.yml | |
cache: false | |
upload-artifact: true | |
verbose: true | |
branch: ${{ steps.flatpak_release_branch.outputs.value }} | |
- name: Publish build artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
path: Gittyup.flatpak | |
name: GittyupFlatpak | |
build: | |
runs-on: ${{ matrix.env.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
qt: | |
- version: 5.15.2 | |
check_only: false | |
- version: 5.12.0 | |
check_only: true | |
env: | |
- name: linux | |
os: ubuntu-latest | |
ninja_platform: linux | |
qt_platform: linux | |
qt_arch: gcc_64 | |
openssl_arch: linux-x86_64 | |
ld_library_arch: linux-x86-64 | |
cmake_flags: "-DGENERATE_APPDATA=ON -DCMAKE_INSTALL_PREFIX=/usr -DUSE_SYSTEM_QT=ON -DENABLE_UPDATE_OVER_GUI=OFF" | |
pack: 0 | |
cmake_env: {} | |
- name: macos | |
os: macos-12 | |
ninja_platform: mac | |
qt_platform: mac | |
openssl_arch: darwin64-x86_64-cc | |
cmake_env: {} | |
pack: 1 | |
- name: win64 | |
os: windows-latest | |
ninja_platform: win | |
qt_platform: windows | |
qt_arch: win64_msvc2019_64 | |
qt_arch_check_only: win64_msvc2017_64 | |
openssl_arch: VC-WIN64A | |
msvc_arch: x64 | |
cmake_flags: "-DUSE_BUNDLED_ZLIB=1" | |
cmake_env: | |
CMAKE_RC_FLAGS: "/C 1252" | |
CC: clang | |
CXX: clang++ | |
pack: 1 | |
- name: win32 | |
os: windows-latest | |
ninja_platform: win | |
qt_platform: windows | |
qt_arch: win32_msvc2019 | |
qt_arch_check_only: win32_msvc2017 | |
openssl_arch: VC-WIN32 | |
msvc_arch: x86 | |
cmake_flags: "-DUSE_BUNDLED_ZLIB=1" | |
cmake_env: | |
CMAKE_RC_FLAGS: "/C 1252" | |
CC: clang | |
CXX: clang++ | |
CMAKE_C_FLAGS: -m32 | |
CMAKE_CXX_FLAGS: -m32 | |
pack: 1 | |
steps: | |
# otherwise the testcases will fail, because signature is invalid | |
- name: Set git name and email | |
run: | | |
git config --global user.name "Your Name" | |
git config --global user.email "[email protected]" | |
git config --list | |
- name: Configure development build | |
if: github.ref_type != 'tag' | |
uses: allenevans/set-env@c4f231179ef63887be707202a295d9cb1c687eb9 | |
with: | |
CMAKE_FLAGS: '-DDEV_BUILD="${{ github.ref_name }}"' | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Initialize Submodules | |
uses: snickerbockers/submodules-init@v4 | |
- name: Install Perl | |
if: matrix.env.ninja_platform == 'win' | |
uses: shogo82148/actions-setup-perl@v1 | |
with: | |
perl-version: '5.30' | |
- name: Install Qt | |
uses: jurplel/[email protected] | |
timeout-minutes: 10 | |
if: "!matrix.qt.check_only" | |
with: | |
version: ${{ matrix.qt.version }} | |
target: desktop | |
host: ${{ matrix.env.qt_platform }} | |
arch: ${{ matrix.env.qt_arch }} | |
install-deps: true | |
modules: qtwebengine | |
- name: Install Qt | |
uses: jurplel/[email protected] | |
timeout-minutes: 10 | |
if: matrix.qt.check_only | |
with: | |
version: ${{ matrix.qt.version }} | |
target: desktop | |
host: ${{ matrix.env.qt_platform }} | |
arch: ${{ matrix.env.qt_arch_check_only }} | |
install-deps: true | |
modules: qtwebengine | |
- name: Install Ninja | |
uses: seanmiddleditch/gha-setup-ninja@v4 | |
with: | |
version: 1.11.1 | |
platform: ${{ matrix.env.ninja_platform }} | |
destination: ninja | |
- name: Setup MSVC environment | |
if: matrix.env.ninja_platform == 'win' | |
uses: seanmiddleditch/gha-setup-vsdevenv@v3 | |
with: | |
arch: ${{ matrix.env.msvc_arch }} | |
- name: Install NASM | |
if: matrix.env.ninja_platform == 'win' | |
uses: ilammy/[email protected] | |
- name: Build OpenSSL (Linux) | |
if: matrix.env.ninja_platform == 'linux' | |
run: | | |
cd dep/openssl/openssl | |
./config -fPIC | |
make | |
- name: Build OpenSSL (macOS) | |
if: matrix.env.ninja_platform == 'mac' | |
run: | | |
cd dep/openssl/openssl | |
# this is necessary until https://github.com/openssl/openssl/issues/18720 | |
# is fixed in OpenSSL 1.1.1r | |
export CFLAGS=-Wno-error=implicit-function-declaration | |
./Configure ${{ matrix.env.openssl_arch }} no-shared | |
make | |
- name: Build OpenSSL (Windows) | |
if: matrix.env.ninja_platform == 'win' | |
run: | | |
cd dep/openssl/openssl | |
perl Configure ${{ matrix.env.openssl_arch }} | |
nmake | |
- name: Configure Release | |
env: ${{ matrix.env.cmake_env }} | |
run: | | |
mkdir -p build/release | |
cd build/release | |
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DUPDATE_TRANSLATIONS=ON -DGITTYUP_CI_TESTS=ON ${{ env.CMAKE_FLAGS }} ${{ matrix.env.cmake_flags }} ../.. | |
- name: Build Information | |
run: | | |
echo "ninja version: $(ninja --version)" | |
git --version | |
qmake --version | |
cmake --version | |
- name: Build | |
run: | | |
cd build/release | |
ninja package | |
# Command copied from flathub build process | |
- name: Validate appdata file | |
if: matrix.env.ninja_platform == 'linux' && !matrix.qt.check_only | |
run: | | |
echo "Show generated appdata file" | |
cat ./build/release/rsrc/linux/com.github.Murmele.Gittyup.appdata.xml | |
echo "Start validating appdata file" | |
sudo apt install flatpak | |
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
sudo flatpak install -y org.freedesktop.appstream-glib | |
flatpak run --env=G_DEBUG=fatal-criticals org.freedesktop.appstream-glib validate ./build/release/rsrc/linux/com.github.Murmele.Gittyup.appdata.xml | |
- name: Publish build artifacts | |
if: matrix.env.pack && !matrix.qt.check_only | |
uses: actions/upload-artifact@v3 | |
with: | |
path: build/release/pack/Gittyup-* | |
name: Gittyup ${{ matrix.env.name }} | |
- name: Publish version file | |
if: matrix.env.pack && !matrix.qt.check_only | |
uses: actions/upload-artifact@v3 | |
with: | |
path: build/release/Version.txt | |
name: Gittyup-VERSION | |
- name: Check Version file | |
run: | | |
cd build/release | |
cat ./Version.txt | |
- name: Test | |
if: matrix.env.ninja_platform != 'win' && matrix.env.ninja_platform != 'mac' | |
uses: GabrielBB/xvfb-action@v1 | |
with: | |
working-directory: build/release | |
run: ninja check --verbose | |
- name: Test (Windows) | |
if: matrix.env.ninja_platform == 'win' | |
run: | | |
cd build/release | |
ninja check_no_win32_offscreen | |
- name: Build Appimage | |
if: matrix.env.ninja_platform == 'linux' && !matrix.qt.check_only | |
run: | | |
cd build/release | |
sudo apt -y install appstream | |
sudo apt -y install libfuse2 | |
sudo apt -y install libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-shape0 | |
sudo apt -y install libxcb-shm0 libxcb-sync1 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxcb-xrm0 libxcb-xv0 libxcb-xvmc0 libxcb1 | |
mkdir -p AppDir | |
DESTDIR=AppDir ninja install | |
export QTDIR=$RUNNER_WORKSPACE/Qt/${{ matrix.qt.version }}/${{ matrix.env.qt_arch }} | |
rm -rf ./AppDir/usr/include/ | |
strip ./AppDir/usr/bin/cmark ./AppDir/usr/bin/gittyup ./AppDir/usr/bin/indexer ./AppDir/usr/bin/relauncher | |
wget -c https://github.com/$(wget -q https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous -O - | grep "appimagetool-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2) | |
chmod +x appimagetool-*.AppImage | |
QTDIR=$QTDIR ./appimagetool-*.AppImage -s deploy ./AppDir/usr/share/applications/*.desktop --appimage-extract-and-run # Bundle EVERYTHING | |
# Modify the AppDir: move ld-linux into the same directory as the payload application | |
# and change AppRun accordingly; so that, e.g., Qt qApp->applicationDirPath() works | |
mv ./AppDir/lib64/ld-${{ matrix.env.ld_library_arch }}.so.2 ./AppDir/usr/bin/ | |
sed -i -e 's@^LD_LINUX.*@LD_LINUX=$(find "$HERE/usr/bin" -name "ld-*.so.*" | head -n 1)@g' ./AppDir/AppRun | |
rm ./AppDir/usr/share/metainfo/gittyup.appdata.xml | |
VERSION=$(cat ./Version.txt) | |
VERSION="$VERSION" ./appimagetool-*.AppImage ./AppDir # turn AppDir into AppImage | |
#ls -lh Gittyup-* | |
- name: Publish Appimage | |
if: matrix.env.ninja_platform == 'linux' && !matrix.qt.check_only | |
uses: actions/upload-artifact@v3 | |
with: | |
path: build/release/*.AppImage | |
name: GittyupAppImage | |
publish: | |
# https://github.com/marvinpinto/actions/issues/177 | |
needs: [flatpak, build] | |
runs-on: ubuntu-latest # does not matter which | |
# a prerelase is created when pushing to master | |
# a release is created when a tag will be set | |
# last condition is the same as IS_RELEASE, | |
# but environment variables cannot be used outside of steps | |
# so it was copied to here too | |
if: ${{ github.ref == 'refs/heads/master' || (github.event_name == 'push' && github.ref_type == 'tag' && startswith(github.ref_name, 'gittyup_v')) }} | |
steps: | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
# version is exported from cmake to file | |
- name: Retrieve version | |
run: | | |
echo "::set-output name=VERSION::$(cat artifacts/Gittyup-VERSION/Version.txt)" | |
id: version | |
- name: Update GitHub release (latest tag) | |
uses: marvinpinto/action-automatic-releases@latest | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: true | |
title: 'Latest Build (Development)' | |
automatic_release_tag: 'development' | |
files: | | |
**/artifacts/Gittyup win64/Gittyup*.exe | |
**/artifacts/Gittyup win32/Gittyup*.exe | |
**/artifacts/Gittyup macos/Gittyup*.dmg | |
**/artifacts/GittyupFlatpak/*.flatpak | |
**/artifacts/GittyupAppImage/Gittyup*.AppImage | |
- name: Update GitHub release (version tag) | |
uses: marvinpinto/action-automatic-releases@latest | |
if: ${{ env.IS_RELEASE == 'true'}} | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: false | |
title: Gittyup Release ${{ steps.version.outputs.VERSION }} | |
automatic_release_tag: ${{ github.ref_name }} | |
files: | | |
**/artifacts/Gittyup win64/Gittyup*.exe | |
**/artifacts/Gittyup win32/Gittyup*.exe | |
**/artifacts/Gittyup macos/Gittyup*.dmg | |
**/artifacts/GittyupFlatpak/*.flatpak | |
**/artifacts/GittyupAppImage/Gittyup*.AppImage | |
# needed otherwise the docs folder is not available | |
- name: Checkout repository | |
if: ${{ env.IS_RELEASE == 'true'}} | |
uses: actions/checkout@v3 | |
# update github pages only if it is a release | |
- name: Deploy Github pages | |
if: ${{ env.IS_RELEASE == 'true'}} | |
uses: JamesIves/[email protected] | |
with: | |
branch: gh-pages # The branch the action should deploy to. | |
folder: docs # The folder the action should deploy. | |
... |