From 3e2443a8618a9c7a657f707b72f234c5aa038022 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 27 Nov 2017 22:46:03 -0500 Subject: [PATCH 1/4] Add support for nightly builds to release tool --- CMakeLists.txt | 23 ++++++++++++++-- Dockerfile | 1 + cmake/FindArgon2.cmake | 2 +- release-tool | 44 ++++++++++++++++++++++++++----- share/translations/CMakeLists.txt | 2 +- src/CMakeLists.txt | 4 ++- src/config-keepassx.h.cmake | 2 ++ src/gui/AboutDialog.cpp | 3 +++ src/gui/DatabaseTabWidget.cpp | 3 ++- src/gui/MainWindow.cpp | 7 +++++ 10 files changed, 79 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3708667a7..4c5709404 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,8 @@ option(WITH_ASAN "Enable address sanitizer checks (Linux / macOS only)" OFF) option(WITH_COVERAGE "Use to build with coverage tests (GCC only)." OFF) option(WITH_APP_BUNDLE "Enable Application Bundle for macOS" ON) +set(WITH_XC_ALL OFF CACHE BOOLEAN "Build in all available plugins") + option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) option(WITH_XC_NETWORKING "Include networking code (e.g. for downlading website icons)." OFF) option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) @@ -53,14 +55,31 @@ if(WITH_XC_HTTP) set(WITH_XC_NETWORKING ON CACHE BOOL "Include networking code (e.g. for downlading website icons)." FORCE) endif() +if(WITH_XC_ALL) + # Enable all options + set(WITH_XC_AUTOTYPE ON) + set(WITH_XC_NETWORKING ON) + set(WITH_XC_BROWSER ON) + set(WITH_XC_HTTP ON) # Deprecated + set(WITH_XC_YUBIKEY ON) + set(WITH_XC_SSHAGENT ON) +endif() + # Process ui files automatically from source files set(CMAKE_AUTOUIC ON) set(KEEPASSXC_VERSION_MAJOR "2") -set(KEEPASSXC_VERSION_MINOR "2") -set(KEEPASSXC_VERSION_PATCH "4") +set(KEEPASSXC_VERSION_MINOR "3") +set(KEEPASSXC_VERSION_PATCH "0") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") +set(KEEPASSXC_RELEASE_BUILD OFF CACHE BOOLEAN "Remove stability warnings") +if(NOT KEEPASSXC_RELEASE_BUILD) + set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") +endif() + +message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") + # Distribution info set(KEEPASSXC_DIST True) set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution type") diff --git a/Dockerfile b/Dockerfile index 69db2ac1f..6b3132772 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,7 @@ RUN set -x \ && apt-get install -y \ cmake3 \ g++ \ + git \ libgcrypt20-18-dev \ libargon2-0-dev \ libsodium-dev \ diff --git a/cmake/FindArgon2.cmake b/cmake/FindArgon2.cmake index 5f196fc8d..c0fb53b41 100644 --- a/cmake/FindArgon2.cmake +++ b/cmake/FindArgon2.cmake @@ -18,7 +18,7 @@ if (MINGW) # find static library on Windows, and redefine used symbols to # avoid definition name conflicts with libsodium find_library(ARGON2_SYS_LIBRARIES libargon2.a) - message(STATUS "Patching libargon2...") + message(STATUS "Patching libargon2...\n") execute_process(COMMAND objcopy --redefine-sym argon2_hash=libargon2_argon2_hash --redefine-sym argon2_error_message=libargon2_argon2_error_message diff --git a/release-tool b/release-tool index 601e66474..10e25522c 100755 --- a/release-tool +++ b/release-tool @@ -37,9 +37,10 @@ DOCKER_CONTAINER_NAME="keepassxc-build-container" CMAKE_OPTIONS="" COMPILER="g++" MAKE_OPTIONS="-j8" -BUILD_PLUGINS="autotype http yubikey" +BUILD_PLUGINS="all" INSTALL_PREFIX="/usr/local" BUILD_SOURCE_TARBALL=true +BUILD_SNAPSHOT=false ORIG_BRANCH="" ORIG_CWD="$(pwd)" @@ -111,6 +112,7 @@ Options: -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}') -p, --plugins Space-separated list of plugins to build (default: ${BUILD_PLUGINS}) + --snapshot Don't checkout the release tag -n, --no-source-tarball Don't build source tarball -h, --help Show this help EOF @@ -310,6 +312,13 @@ checkOsslsigncodeCommandExists() { fi } +checkSigntoolCommandExists() { + command -v signtool > /dev/null + if [ 0 -ne $? ]; then + exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH." + fi +} + checkCodesignCommandExists() { command -v codesign > /dev/null if [ 0 -ne $? ]; then @@ -556,6 +565,9 @@ build() { -n|--no-source-tarball) BUILD_SOURCE_TARBALL=false ;; + + --snapshot) + BUILD_SNAPSHOT=true ;; -h|--help) printUsage "build" @@ -574,8 +586,16 @@ build() { OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" - logInfo "Checking out release tag '${TAG_NAME}'..." - git checkout "$TAG_NAME" + if $BUILD_SNAPSHOT; then + TAG_NAME="HEAD" + local branch=`git rev-parse --abbrev-ref HEAD` + logInfo "Using current branch ${branch} to build..." + RELEASE_NAME="${RELEASE_NAME}-snapshot" + else + logInfo "Checking out release tag '${TAG_NAME}'..." + git checkout "$TAG_NAME" + CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_RELEASE_BUILD=ON" + fi logInfo "Creating output directory..." mkdir -p "$OUTPUT_DIR" @@ -866,10 +886,10 @@ appsign() { echo for f in "${sign_files[@]}"; do - if [[ ${f: -4} == '.exe' ]]; then + if [[ ${f: -4} == ".exe" ]]; then logInfo "Signing file '${f}' using osslsigncode..." # output a signed exe; we have to use a different name due to osslsigntool limitations - osslsigncode sign -pkcs12 "${signtool_key}" -pass "${password}" \ + osslsigncode sign -pkcs12 "${signtool_key}" -pass "${password}" -n "KeePassXC" \ -t "http://timestamp.comodoca.com/authenticode" -in "${f}" -out "${f}.signed" if [ 0 -ne $? ]; then @@ -879,8 +899,20 @@ appsign() { # overwrite the original exe with the signed exe mv -f "${f}.signed" "${f}" + elif [[ ${f: -4} == ".msi" ]]; then + # Make sure we can find the signtool + checkSigntoolCommandExists + + # osslsigncode does not succeed at signing MSI files at this time... + logInfo "Signing file '${f}' using Microsoft signtool..." + signtool sign -f "${signtool_key}" -p "${password}" -d "KeePassXC" \ + -t "http://timestamp.comodoca.com/authenticode" "${f}" + + if [ 0 -ne $? ]; then + exitError "Signing failed!" + fi else - logInfo "Skipping non-EXE file '${f}'..." + logInfo "Skipping non-executable file '${f}'..." fi done diff --git a/share/translations/CMakeLists.txt b/share/translations/CMakeLists.txt index c0b1a49b8..78ff0bcc4 100644 --- a/share/translations/CMakeLists.txt +++ b/share/translations/CMakeLists.txt @@ -18,7 +18,7 @@ file(GLOB TRANSLATION_FILES *.ts) get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE) list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts) list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS}) -message(STATUS "${TRANSLATION_FILES}") +message(STATUS "Including translations...\n") qt5_add_translation(QM_FILES ${TRANSLATION_FILES}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acc01e2bc..f00e93531 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -345,11 +345,13 @@ if(MINGW) "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) + set(CPACK_GENERATOR "ZIP;NSIS") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) - set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION}) + set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake index e98830b09..805438b1a 100644 --- a/src/config-keepassx.h.cmake +++ b/src/config-keepassx.h.cmake @@ -24,6 +24,8 @@ #cmakedefine KEEPASSXC_DIST_SNAP #cmakedefine KEEPASSXC_DIST_APPIMAGE +#cmakedefine KEEPASSXC_RELEASE_BUILD + #cmakedefine HAVE_PR_SET_DUMPABLE 1 #cmakedefine HAVE_RLIMIT_CORE 1 #cmakedefine HAVE_PT_DENY_ATTACH 1 diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 9ce3eda5d..4481dd82d 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -54,6 +54,9 @@ AboutDialog::AboutDialog(QWidget* parent) QString debugInfo = "KeePassXC - "; debugInfo.append(tr("Version %1\n").arg(KEEPASSX_VERSION)); +#ifndef KEEPASSXC_RELEASE_BUILD + debugInfo.append(tr("Build Type: Snapshot\n")); +#endif if (!commitHash.isEmpty()) { debugInfo.append(tr("Revision: %1").arg(commitHash.left(7)).append("\n")); } diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index 47ff597b8..f9b7fbd72 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -173,7 +173,8 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw, } else { dbStruct.dbWidget->switchToOpenDatabase(dbStruct.fileInfo.absoluteFilePath()); } - emit messageDismissGlobal(); + + emit messageDismissTab(); } void DatabaseTabWidget::importCsv() diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index b25f9d554..302a81eb5 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -424,6 +424,13 @@ MainWindow::MainWindow() connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(showKeePassHTTPDeprecationNotice())); } #endif + +#ifndef KEEPASSXC_RELEASE_BUILD + m_ui->globalMessageWidget->showMessage(tr("WARNING: You are using an unstable build of KeePassXC!\n" + "There is a high risk of corruption, maintain a backup of your databases.\n" + "This version is not meant for production use."), + MessageWidget::Warning, -1); +#endif } MainWindow::~MainWindow() From 5b72407746fbff4d569c417d6fe312b980b94a3e Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 27 Jan 2018 23:10:03 -0500 Subject: [PATCH 2/4] Deconflict snapshot warning with http deprecation warning --- src/gui/MainWindow.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 302a81eb5..def6e6575 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -420,8 +420,8 @@ MainWindow::MainWindow() } #ifdef WITH_XC_HTTP if (config()->get("Http/Enabled", false).toBool() && config()->get("Http/DeprecationNoticeShown", 0).toInt() < 3) { - // show message after tab widget dismissed all messages - connect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(showKeePassHTTPDeprecationNotice())); + // show message after global widget dismissed all messages + connect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), this, SLOT(showKeePassHTTPDeprecationNotice())); } #endif @@ -430,6 +430,9 @@ MainWindow::MainWindow() "There is a high risk of corruption, maintain a backup of your databases.\n" "This version is not meant for production use."), MessageWidget::Warning, -1); +#else + // Show the HTTP deprecation message if enabled above + emit m_ui->globalMessageWidget->hideAnimationFinished(); #endif } @@ -448,7 +451,7 @@ void MainWindow::showKeePassHTTPDeprecationNotice() MessageWidget::Warning, true, -1); config()->set("Http/DeprecationNoticeShown", warningNum + 1); - disconnect(m_ui->tabWidget, SIGNAL(messageDismissGlobal()), this, SLOT(showKeePassHTTPDeprecationNotice())); + disconnect(m_ui->globalMessageWidget, SIGNAL(hideAnimationFinished()), this, SLOT(showKeePassHTTPDeprecationNotice())); } void MainWindow::appExit() From d8649f7a6088a2234acbebf4cbc9edd8f8357a8a Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 29 Jan 2018 23:00:52 -0500 Subject: [PATCH 3/4] Check for tag to automatically determine release build --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c5709404..e63c6d29a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,13 @@ set(KEEPASSXC_VERSION_PATCH "0") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") set(KEEPASSXC_RELEASE_BUILD OFF CACHE BOOLEAN "Remove stability warnings") -if(NOT KEEPASSXC_RELEASE_BUILD) +# Check if on a tag, if so build as a release +execute_process(COMMAND git tag --points-at HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG) +if(GIT_TAG) + set(KEEPASSXC_RELEASE_BUILD ON) +elseif(NOT KEEPASSXC_RELEASE_BUILD) set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") endif() From 053d9981039c5623d84d7e88083bef635035a92f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 28 Jan 2018 22:26:12 -0500 Subject: [PATCH 4/4] Appimage docker container bump to resolve dependencies --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6b3132772..91eb6f395 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ FROM ubuntu:14.04 -ENV REBUILD_COUNTER=2 +ENV REBUILD_COUNTER=4 ENV QT5_VERSION=59 ENV QT5_PPA_VERSION=${QT5_VERSION}2