Initial qt-tests tray app with split amd64/arm64 AppImage CI workflows
This commit is contained in:
commit
7b056fb78e
66
.gitea/workflows/qt-linux-amd64.yml
Normal file
66
.gitea/workflows/qt-linux-amd64.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
name: qt-linux-amd64
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
tags: [ 'v*' ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
qt-linux-amd64:
|
||||||
|
runs-on: amd64-native
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install build dependencies
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
build-essential cmake ninja-build qt6-base-dev \
|
||||||
|
imagemagick file curl
|
||||||
|
|
||||||
|
- name: Configure + build
|
||||||
|
run: |
|
||||||
|
set -eu
|
||||||
|
cmake -S . -B build-out -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build build-out --parallel "$(nproc)"
|
||||||
|
|
||||||
|
- name: Build AppImage (amd64)
|
||||||
|
run: |
|
||||||
|
set -eu
|
||||||
|
rm -rf AppDir artifacts
|
||||||
|
mkdir -p AppDir/usr/bin AppDir/usr/share/applications AppDir/usr/share/icons/hicolor/256x256/apps artifacts
|
||||||
|
cp build-out/qt_tray_demo AppDir/usr/bin/qt_tray_demo
|
||||||
|
chmod +x AppDir/usr/bin/qt_tray_demo
|
||||||
|
convert build/appicon.svg -resize 256x256 AppDir/usr/share/icons/hicolor/256x256/apps/qt_tray_demo.png
|
||||||
|
cat > AppDir/usr/share/applications/qt_tray_demo.desktop <<'DESKTOP'
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Qt Tray Demo
|
||||||
|
Exec=qt_tray_demo
|
||||||
|
Icon=qt_tray_demo
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;
|
||||||
|
DESKTOP
|
||||||
|
curl -L -o linuxdeploy.AppImage https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
|
||||||
|
curl -L -o linuxdeploy-plugin-qt.AppImage https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
|
||||||
|
chmod +x linuxdeploy.AppImage linuxdeploy-plugin-qt.AppImage
|
||||||
|
export QMAKE=qmake6
|
||||||
|
APPIMAGE_EXTRACT_AND_RUN=1 ./linuxdeploy.AppImage --appdir AppDir \
|
||||||
|
-e AppDir/usr/bin/qt_tray_demo \
|
||||||
|
-d AppDir/usr/share/applications/qt_tray_demo.desktop \
|
||||||
|
-i AppDir/usr/share/icons/hicolor/256x256/apps/qt_tray_demo.png \
|
||||||
|
--plugin qt --output appimage
|
||||||
|
generated=$(ls -1 *.AppImage | head -n 1)
|
||||||
|
out="artifacts/qt_tray_demo-linux-amd64-run${{ github.run_number }}.AppImage"
|
||||||
|
mv "$generated" "$out"
|
||||||
|
chmod +x "$out"
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: qt_tray_demo-linux-amd64-run${{ github.run_number }}
|
||||||
|
path: artifacts/
|
||||||
|
retention-days: 14
|
||||||
66
.gitea/workflows/qt-linux-arm64.yml
Normal file
66
.gitea/workflows/qt-linux-arm64.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
name: qt-linux-arm64
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
tags: [ 'v*' ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
qt-linux-arm64:
|
||||||
|
runs-on: arm64-native
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install build dependencies
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
build-essential cmake ninja-build qt6-base-dev \
|
||||||
|
imagemagick file curl
|
||||||
|
|
||||||
|
- name: Configure + build
|
||||||
|
run: |
|
||||||
|
set -eu
|
||||||
|
cmake -S . -B build-out -G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||||
|
cmake --build build-out --parallel "$(nproc)"
|
||||||
|
|
||||||
|
- name: Build AppImage (arm64)
|
||||||
|
run: |
|
||||||
|
set -eu
|
||||||
|
rm -rf AppDir artifacts
|
||||||
|
mkdir -p AppDir/usr/bin AppDir/usr/share/applications AppDir/usr/share/icons/hicolor/256x256/apps artifacts
|
||||||
|
cp build-out/qt_tray_demo AppDir/usr/bin/qt_tray_demo
|
||||||
|
chmod +x AppDir/usr/bin/qt_tray_demo
|
||||||
|
convert build/appicon.svg -resize 256x256 AppDir/usr/share/icons/hicolor/256x256/apps/qt_tray_demo.png
|
||||||
|
cat > AppDir/usr/share/applications/qt_tray_demo.desktop <<'DESKTOP'
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Qt Tray Demo
|
||||||
|
Exec=qt_tray_demo
|
||||||
|
Icon=qt_tray_demo
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;
|
||||||
|
DESKTOP
|
||||||
|
curl -L -o linuxdeploy.AppImage https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-aarch64.AppImage
|
||||||
|
curl -L -o linuxdeploy-plugin-qt.AppImage https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-aarch64.AppImage
|
||||||
|
chmod +x linuxdeploy.AppImage linuxdeploy-plugin-qt.AppImage
|
||||||
|
export QMAKE=qmake6
|
||||||
|
APPIMAGE_EXTRACT_AND_RUN=1 ./linuxdeploy.AppImage --appdir AppDir \
|
||||||
|
-e AppDir/usr/bin/qt_tray_demo \
|
||||||
|
-d AppDir/usr/share/applications/qt_tray_demo.desktop \
|
||||||
|
-i AppDir/usr/share/icons/hicolor/256x256/apps/qt_tray_demo.png \
|
||||||
|
--plugin qt --output appimage
|
||||||
|
generated=$(ls -1 *.AppImage | head -n 1)
|
||||||
|
out="artifacts/qt_tray_demo-linux-arm64-run${{ github.run_number }}.AppImage"
|
||||||
|
mv "$generated" "$out"
|
||||||
|
chmod +x "$out"
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: qt_tray_demo-linux-arm64-run${{ github.run_number }}
|
||||||
|
path: artifacts/
|
||||||
|
retention-days: 14
|
||||||
15
CMakeLists.txt
Normal file
15
CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
project(qt_tray_demo LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
|
||||||
|
find_package(Qt6 REQUIRED COMPONENTS Widgets)
|
||||||
|
|
||||||
|
add_executable(qt_tray_demo
|
||||||
|
src/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(qt_tray_demo PRIVATE Qt6::Widgets)
|
||||||
5
build/appicon.svg
Normal file
5
build/appicon.svg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256">
|
||||||
|
<rect width="256" height="256" rx="28" fill="#10b981"/>
|
||||||
|
<rect x="48" y="48" width="160" height="160" rx="20" fill="#ffffff" fill-opacity="0.2"/>
|
||||||
|
<circle cx="128" cy="128" r="42" fill="#ffffff"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 296 B |
39
src/main.cpp
Normal file
39
src/main.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include <QAction>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
app.setApplicationName("qt_tray_demo");
|
||||||
|
|
||||||
|
QMainWindow window;
|
||||||
|
window.setWindowTitle("Qt Tray Demo");
|
||||||
|
auto *central = new QWidget();
|
||||||
|
auto *layout = new QVBoxLayout(central);
|
||||||
|
layout->addWidget(new QLabel("Qt test app window (tray + window)."));
|
||||||
|
layout->addWidget(new QLabel("Close hides to tray; use tray menu to quit."));
|
||||||
|
window.setCentralWidget(central);
|
||||||
|
window.resize(720, 420);
|
||||||
|
|
||||||
|
auto *tray = new QSystemTrayIcon(QIcon::fromTheme("applications-system"), &app);
|
||||||
|
auto *menu = new QMenu();
|
||||||
|
QAction *showAction = menu->addAction("Show Window");
|
||||||
|
QAction *quitAction = menu->addAction("Quit");
|
||||||
|
QObject::connect(showAction, &QAction::triggered, [&window]() {
|
||||||
|
window.show();
|
||||||
|
window.raise();
|
||||||
|
window.activateWindow();
|
||||||
|
});
|
||||||
|
QObject::connect(quitAction, &QAction::triggered, &app, &QApplication::quit);
|
||||||
|
tray->setContextMenu(menu);
|
||||||
|
tray->setToolTip("Qt Tray Demo");
|
||||||
|
tray->show();
|
||||||
|
|
||||||
|
QObject::connect(&window, &QMainWindow::windowTitleChanged, [](){});
|
||||||
|
window.show();
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user