add release pipeline

This commit is contained in:
Evgenii Alekseev 2023-05-18 01:39:03 +03:00
parent 09a3c32d0c
commit 338828da88
14 changed files with 61 additions and 378 deletions

View File

@ -1,12 +0,0 @@
FROM archlinux
RUN pacman -Sy
# toolchain
RUN echo -e 'y\ny' | pacman -S util-linux-libs
RUN pacman -S --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs
# kf5 and qt5 libraries
RUN pacman -S --noconfirm plasma-framework
# required by tests
RUN pacman -S --noconfirm xorg-server-xvfb

View File

@ -1,14 +0,0 @@
FROM ubuntu:focal
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
# toolchain
RUN apt-get install -yq cmake extra-cmake-modules g++ git gettext
# kf5 and qt5 libraries
RUN apt-get install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \
libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \
plasma-framework
# required by tests
RUN apt-get install -yq xvfb

View File

@ -1,14 +0,0 @@
#!/bin/bash
set -e
rm -rf build-arch
mkdir build-arch
# build
cd build-arch
cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources
make
# tests
xvfb-run -a make test

View File

@ -1,15 +0,0 @@
#!/bin/bash
set -e
rm -rf build-ubuntu
mkdir build-ubuntu
# patches
git apply patches/qt5.14-splitbehavior-and-qset.patch
# build
cd build-ubuntu
cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON ../sources
make package

View File

@ -1,17 +0,0 @@
#!/bin/bash
set -e
rm -rf build-ubuntu
mkdir build-ubuntu
# patches
git apply patches/qt5.14-splitbehavior-and-qset.patch
# build
cd build-ubuntu
cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources
make
# tests
xvfb-run -a make test

51
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,51 @@
name: release
on:
push:
tags:
- '*'
jobs:
make-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: create changelog
id: changelog
uses: jaywcjlove/changelog-generator@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
filter: 'Release \d+\.\d+\.\d+'
- name: create archive
run: bash create_archive.sh
env:
VERSION: ${{ steps.version.outputs.VERSION }}
- name: build debian package
run: >
apt update && \
apt install -yq cmake extra-cmake-modules g++ git gettext &&
apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev
libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev
plasma-workspace-dev &&
cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources &&
cd build-deb &&
make package &&
cd ..
- name: release
uses: softprops/action-gh-release@v1
with:
body: |
${{ steps.changelog.outputs.compareurl }}
${{ steps.changelog.outputs.changelog }}
files: |
awesome-widgets-*-src.tar.xz
build-deb/awesome-widgets-*.deb
fail_on_unmatched_files: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,14 +0,0 @@
sudo: required
language: generic
env:
- DOCKER_TAG_ARCH="arcan1s/awesome-widgets-arch"
services:
- docker
before_install:
- docker build --tag="${DOCKER_TAG_ARCH}" -f ".docker/Dockerfile-arch" ".docker"
script:
- docker run --rm -v "$(pwd):/opt/build" -w /opt/build "${DOCKER_TAG_ARCH}" sh -c ".docker/build-arch.sh"

View File

@ -1,7 +1,7 @@
awesome-widgets (ex-pytextmonitor) awesome-widgets (ex-pytextmonitor)
================================== ==================================
[![Build Status](https://travis-ci.org/arcan1s/awesome-widgets.svg?branch=development)](https://travis-ci.org/arcan1s/awesome-widgets) [![build & tests](https://github.com/arcan1s/awesome-widgets/actions/workflows/build.yml/badge.svg)](https://github.com/arcan1s/awesome-widgets/actions/workflows/build.yml)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/8254/badge.svg)](https://scan.coverity.com/projects/awesome-widgets) [![Coverity Scan Build Status](https://scan.coverity.com/projects/8254/badge.svg)](https://scan.coverity.com/projects/awesome-widgets)
Information Information
@ -62,10 +62,6 @@ Installation
**NOTE** on Plasma 5 it very likely requires `-DKDE_INSTALL_USE_QT_SYS_PATHS=ON` flag **NOTE** on Plasma 5 it very likely requires `-DKDE_INSTALL_USE_QT_SYS_PATHS=ON` flag
**NOTE** if you are going to build from git, you need to init submodules first, e.g.:
git submodule update --init --recursive
Additional information Additional information
====================== ======================

View File

@ -1,32 +1,20 @@
#!/bin/bash #!/bin/bash
SRCDIR="sources" SRCDIR="sources"
MAJOR=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') VERSION="$(git describe --tags --abbrev=0)"
MINOR=$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/')
PATCH=$(grep -m1 PROJECT_VERSION_PATCH sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/')
VERSION="${MAJOR}.${MINOR}.${PATCH}"
# update submodules
git submodule update --init --recursive
# build widget # build widget
ARCHIVE="awesome-widgets" ARCHIVE="awesome-widgets"
FILES="AUTHORS CHANGELOG COPYING packages patches" FILES="AUTHORS CHANGELOG COPYING packages patches sources"
IGNORELIST="build usr .kdev4 *.kdev4 .idea packages/*src.tar.xz" IGNORELIST="build usr .kdev4 *.kdev4 .idea packages/*src.tar.xz"
# create archive # create archive
[[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz" [[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz"
[[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}" [[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}"
cp -r "${SRCDIR}" "${ARCHIVE}" cp -r "${SRCDIR}" "${ARCHIVE}"
for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done
for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done
tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}"
ln -sf "../${ARCHIVE}-${VERSION}-src.tar.xz" packages
rm -rf "${ARCHIVE}"
# update md5sum tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}"
MD5SUMS=$(md5sum ${ARCHIVE}-${VERSION}-src.tar.xz | awk '{print $1}')
sed -i "/md5sums=('[0-9A-Fa-f]*/s/[^'][^)]*/md5sums=('${MD5SUMS}'/" packages/PKGBUILD rm -rf "${ARCHIVE}"
sed -i "s/pkgver=[0-9.]*/pkgver=${VERSION}/" packages/PKGBUILD
# clear
find . -type f -name '*src.tar.xz' -not -name "*${VERSION}-src.tar.xz" -exec rm -rf {} \;
find packages -type l -xtype l -exec rm -rf {} \;

View File

@ -1,11 +0,0 @@
cmake
extra-cmake-modules
g++
git
libkf5i18n-dev
libkf5notifications-dev
libkf5service-dev
libkf5windowsystem-dev
plasma-framework-dev
qtbase5-dev
qtdeclarative5-dev

View File

@ -1,255 +0,0 @@
diff --git a/sources/awdebug.cpp b/sources/awdebug.cpp
index 7135db6..a2870ec 100644
--- a/sources/awdebug.cpp
+++ b/sources/awdebug.cpp
@@ -67,7 +67,7 @@ QString AWDebug::getAboutText(const QString &_type)
translator = QString("<li>%1</li>").arg(translator);
text = i18n("Translators:") + "<ul>" + translatorList.join("") + "</ul>";
} else if (_type == "3rdparty") {
- QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(';', Qt::SkipEmptyParts);
+ QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(';', QString::SkipEmptyParts);
for (int i = 0; i < trdPartyList.count(); i++)
trdPartyList[i] = QString("<li><a href=\"%3\">%1</a> (%2 license)</li>")
.arg(trdPartyList.at(i).split(',')[0])
@@ -75,7 +75,7 @@ QString AWDebug::getAboutText(const QString &_type)
.arg(trdPartyList.at(i).split(',')[2]);
text = i18n("This software uses:") + "<ul>" + trdPartyList.join("") + "</ul>";
} else if (_type == "thanks") {
- QStringList thanks = QString(SPECIAL_THANKS).split(';', Qt::SkipEmptyParts);
+ QStringList thanks = QString(SPECIAL_THANKS).split(';', QString::SkipEmptyParts);
for (int i = 0; i < thanks.count(); i++)
thanks[i] = QString("<li><a href=\"%2\">%1</a></li>")
.arg(thanks.at(i).split(',')[0])
diff --git a/sources/awesome-widget/plugin/awabstractpairhelper.cpp b/sources/awesome-widget/plugin/awabstractpairhelper.cpp
index 55a4e91..f7c2969 100644
--- a/sources/awesome-widget/plugin/awabstractpairhelper.cpp
+++ b/sources/awesome-widget/plugin/awabstractpairhelper.cpp
@@ -61,7 +61,7 @@ QStringList AWAbstractPairHelper::values() const
QSet<QString> AWAbstractPairHelper::valuesSet() const
{
auto values = m_pairs.values();
- return QSet(values.cbegin(), values.cend());
+ return QSet<QString>::fromList(values);
}
@@ -138,4 +138,4 @@ bool AWAbstractPairHelper::removeUnusedKeys(const QStringList &_keys) const
settings.sync();
return (settings.status() == QSettings::NoError);
-}
\ No newline at end of file
+}
diff --git a/sources/awesome-widget/plugin/awkeycache.cpp b/sources/awesome-widget/plugin/awkeycache.cpp
index 15aab94..54b47b3 100644
--- a/sources/awesome-widget/plugin/awkeycache.cpp
+++ b/sources/awesome-widget/plugin/awkeycache.cpp
@@ -83,9 +83,9 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL
<< _tooltip;
// initial copy
- QSet<QString> used(_keys.cbegin(), _keys.cend());
- used.unite(QSet(_bars.cbegin(), _bars.cend()));
- used.unite(QSet(_userKeys.cbegin(), _userKeys.cend()));
+ auto used = QSet<QString>::fromList(_keys);
+ used.unite(QSet<QString>::fromList(_bars));
+ used.unite(QSet<QString>::fromList(_userKeys));
// insert keys from tooltip
for (auto &key : _tooltip.keys()) {
if ((key.endsWith("Tooltip")) && (_tooltip[key].toBool())) {
diff --git a/sources/awesomewidgets/awjsonformatter.cpp b/sources/awesomewidgets/awjsonformatter.cpp
index bbdd7ce..8a1c5e0 100644
--- a/sources/awesomewidgets/awjsonformatter.cpp
+++ b/sources/awesomewidgets/awjsonformatter.cpp
@@ -178,7 +178,7 @@ QVariant AWJsonFormatter::getFromMap(const QVariant &_value, const QString &_key
void AWJsonFormatter::initPath()
{
m_splittedPath.clear();
- QStringList splittedByDot = m_path.split('.', Qt::SkipEmptyParts);
+ QStringList splittedByDot = m_path.split('.', QString::SkipEmptyParts);
for (auto &element : splittedByDot) {
bool ok;
diff --git a/sources/awesomewidgets/extscript.cpp b/sources/awesomewidgets/extscript.cpp
index 3017dac..da009f9 100644
--- a/sources/awesomewidgets/extscript.cpp
+++ b/sources/awesomewidgets/extscript.cpp
@@ -218,7 +218,7 @@ void ExtScript::readConfiguration()
setExecutable(settings.value("Exec", executable()).toString());
setStrRedirect(settings.value("X-AW-Redirect", strRedirect()).toString());
// api == 3
- setFilters(settings.value("X-AW-Filters", filters()).toString().split(',', Qt::SkipEmptyParts));
+ setFilters(settings.value("X-AW-Filters", filters()).toString().split(',', QString::SkipEmptyParts));
settings.endGroup();
bumpApi(AW_EXTSCRIPT_API);
diff --git a/sources/awesomewidgets/extupgrade.cpp b/sources/awesomewidgets/extupgrade.cpp
index 0195779..0081cc9 100644
--- a/sources/awesomewidgets/extupgrade.cpp
+++ b/sources/awesomewidgets/extupgrade.cpp
@@ -219,8 +219,8 @@ void ExtUpgrade::updateValue()
= QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed();
m_values[tag("pkgcount")] = [this](const QString &output) {
return filter().isEmpty()
- ? output.split('\n', Qt::SkipEmptyParts).count() - null()
- : output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count();
+ ? output.split('\n', QString::SkipEmptyParts).count() - null()
+ : output.split('\n', QString::SkipEmptyParts).filter(QRegExp(filter())).count();
}(qoutput);
emit(dataReceived(m_values));
diff --git a/sources/awesomewidgets/qcronscheduler.cpp b/sources/awesomewidgets/qcronscheduler.cpp
index 6f67590..c72abc9 100644
--- a/sources/awesomewidgets/qcronscheduler.cpp
+++ b/sources/awesomewidgets/qcronscheduler.cpp
@@ -87,7 +87,7 @@ QList<int> QCronScheduler::parseField(const QString &_value, const int _min, con
parsedField.fromRange(field.split('/').first(), _min, _max);
if (field.contains('/')) {
bool status;
- parsedField.div = field.split('/', Qt::SkipEmptyParts).at(1).toInt(&status);
+ parsedField.div = field.split('/', QString::SkipEmptyParts).at(1).toInt(&status);
if (!status)
parsedField.div = 1;
}
@@ -107,7 +107,7 @@ void QCronScheduler::QCronField::fromRange(const QString &_range, const int _min
minValue = _min;
maxValue = _max;
} else if (_range.contains("-")) {
- auto interval = _range.split('-', Qt::SkipEmptyParts);
+ auto interval = _range.split('-', QString::SkipEmptyParts);
if (interval.count() != 2)
return;
bool status;
diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp
index 88b6e39..5bdc7f3 100644
--- a/sources/extsysmon/extsysmon.cpp
+++ b/sources/extsysmon/extsysmon.cpp
@@ -126,7 +126,7 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri
} else if (_rawConfig["HDDDEV"] == "disable") {
_rawConfig["HDDDEV"] = "";
} else {
- QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts);
+ QStringList deviceList = _rawConfig["HDDDEV"].split(',', QString::SkipEmptyParts);
QStringList devices;
QRegExp diskRegexp = QRegExp("^/dev/[hms]d[a-z]$");
for (auto &device : deviceList)
diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp
index 6281637..e81be26 100644
--- a/sources/extsysmonsources/gpuloadsource.cpp
+++ b/sources/extsysmonsources/gpuloadsource.cpp
@@ -132,7 +132,7 @@ void GPULoadSource::updateValue()
qCInfo(LOG_ESS) << "Output" << qoutput;
if (m_device == "nvidia") {
- for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
+ for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
if (!str.contains("<gpu_util>"))
continue;
auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
@@ -140,10 +140,10 @@ void GPULoadSource::updateValue()
break;
}
} else if (m_device == "ati") {
- for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
+ for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
if (!str.contains("load"))
continue;
- QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%');
+ QString load = str.split(' ', QString::SkipEmptyParts)[3].remove('%');
m_values["gpu/load"] = load.toFloat();
break;
}
diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp
index 55fbadc..dce0c6e 100644
--- a/sources/extsysmonsources/gputempsource.cpp
+++ b/sources/extsysmonsources/gputempsource.cpp
@@ -112,7 +112,7 @@ void GPUTemperatureSource::updateValue()
qCInfo(LOG_ESS) << "Output" << qoutput;
if (m_device == "nvidia") {
- for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
+ for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
if (!str.contains("<gpu_temp>"))
continue;
QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>");
@@ -120,10 +120,10 @@ void GPUTemperatureSource::updateValue()
break;
}
} else if (m_device == "ati") {
- for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
+ for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
if (!str.contains("Temperature"))
continue;
- QString temp = str.split(' ', Qt::SkipEmptyParts).at(4);
+ QString temp = str.split(' ', QString::SkipEmptyParts).at(4);
m_values["gpu/temperature"] = temp.toFloat();
break;
}
diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp
index efaae08..dad47a3 100644
--- a/sources/extsysmonsources/hddtempsource.cpp
+++ b/sources/extsysmonsources/hddtempsource.cpp
@@ -31,7 +31,7 @@ HDDTemperatureSource::HDDTemperatureSource(QObject *_parent, const QStringList &
Q_ASSERT(_args.count() == 2);
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
- m_devices = _args.at(0).split(',', Qt::SkipEmptyParts);
+ m_devices = _args.at(0).split(',', QString::SkipEmptyParts);
m_cmd = _args.at(1).split(' '); // lets hope no one put cmd with spaces here lol
m_smartctl = m_cmd.contains("smartctl");
@@ -131,17 +131,17 @@ void HDDTemperatureSource::updateValue(const QString &_device)
// parse
if (m_smartctl) {
- QStringList lines = qoutput.split('\n', Qt::SkipEmptyParts);
+ QStringList lines = qoutput.split('\n', QString::SkipEmptyParts);
for (auto &str : lines) {
if (!str.startsWith("194"))
continue;
- if (str.split(' ', Qt::SkipEmptyParts).count() < 9)
+ if (str.split(' ', QString::SkipEmptyParts).count() < 9)
continue;
- m_values[_device] = str.split(' ', Qt::SkipEmptyParts).at(9).toFloat();
+ m_values[_device] = str.split(' ', QString::SkipEmptyParts).at(9).toFloat();
break;
}
} else {
- QStringList lines = qoutput.split(':', Qt::SkipEmptyParts);
+ QStringList lines = qoutput.split(':', QString::SkipEmptyParts);
if (lines.count() >= 3) {
QString temp = lines.at(2);
temp.remove(QChar(0260)).remove('C');
diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp
index aaca22f..e127a05 100644
--- a/sources/extsysmonsources/playersource.cpp
+++ b/sources/extsysmonsources/playersource.cpp
@@ -256,11 +256,11 @@ void PlayerSource::mpdSocketReadyRead()
qCInfo(LOG_ESS) << "Output" << qoutput;
// parse
- for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) {
- if (str.split(": ", Qt::SkipEmptyParts).count() == 2) {
+ for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
+ if (str.split(": ", QString::SkipEmptyParts).count() == 2) {
// "Metadata: data"
- QString metadata = str.split(": ", Qt::SkipEmptyParts).first().toLower();
- QString data = str.split(": ", Qt::SkipEmptyParts).last().trimmed();
+ QString metadata = str.split(": ", QString::SkipEmptyParts).first().toLower();
+ QString data = str.split(": ", QString::SkipEmptyParts).last().trimmed();
// there are one more time...
if ((metadata == "time") && (data.contains(':'))) {
QStringList times = data.split(':');
diff --git a/sources/test/testawtelemetryhandler.cpp b/sources/test/testawtelemetryhandler.cpp
index ffb0e79..b4181e0 100644
--- a/sources/test/testawtelemetryhandler.cpp
+++ b/sources/test/testawtelemetryhandler.cpp
@@ -51,7 +51,7 @@ void TestAWTelemetryHandler::test_get()
QStringList output = plugin->get(telemetryGroup);
QVERIFY(!output.isEmpty());
- QCOMPARE(QSet<QString>(output.cbegin(), output.cend()).count(), output.count());
+ QCOMPARE(QSet<QString>::fromList(output).count(), output.count());
QVERIFY(output.contains(telemetryData));
}

View File

@ -59,8 +59,8 @@ DPAdds::~DPAdds()
{ {
qCDebug(LOG_DP) << __PRETTY_FUNCTION__; qCDebug(LOG_DP) << __PRETTY_FUNCTION__;
delete m_vdi; m_vdi->deleteLater();
delete m_taskModel; m_taskModel->deleteLater();
} }

View File

@ -38,7 +38,7 @@ DesktopSource::~DesktopSource()
{ {
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
delete m_vdi; m_vdi->deleteLater();
} }