--- /dev/null
+name: Manual Version Bump
+
+on:
+ workflow_dispatch:
+ inputs:
+ bump_type:
+ description: "Type of bump"
+ required: true
+ default: "patch"
+ type: choice
+ options:
+ - patch
+ - minor
+ - major
+
+jobs:
+ bump:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "github-actions[bot]@users.noreply.github.com"
+
+ - name: Calculate and Push New Tag
+ run: |
+ # Get current tag
+ CURRENT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
+ echo "Current tag: $CURRENT_TAG"
+
+ # Remove 'v' prefix
+ VERSION=${CURRENT_TAG#v}
+
+ # Split version
+ IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
+
+ # Calculate next version
+ case "${{ inputs.bump_type }}" in
+ major)
+ MAJOR=$((MAJOR + 1))
+ MINOR=0
+ PATCH=0
+ ;;
+ minor)
+ MINOR=$((MINOR + 1))
+ PATCH=0
+ ;;
+ patch)
+ PATCH=$((PATCH + 1))
+ ;;
+ esac
+
+ NEW_TAG="v$MAJOR.$MINOR.$PATCH"
+ echo "New tag: $NEW_TAG"
+
+ # Create and push tag
+ git tag "$NEW_TAG"
+ git push origin "$NEW_TAG"
resources.qrc
)
+# Versioning
+if(NOT NUTRA_VERSION)
+ execute_process(
+ COMMAND git describe --tags --always --dirty
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_VERSION
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(GIT_VERSION)
+ set(NUTRA_VERSION "${GIT_VERSION}")
+ else()
+ set(NUTRA_VERSION "v0.0.0-unknown")
+ endif()
+endif()
+add_compile_definitions(NUTRA_VERSION_STRING="${NUTRA_VERSION}")
+
add_test(NAME FoodRepoTest COMMAND test_nutra)
-install(TARGETS nutra DESTINATION bin)
-install(FILES nutra.desktop DESTINATION share/applications)
-install(FILES resources/nutrition_icon-no_bg.png DESTINATION share/icons/hicolor/128x128/apps RENAME nutra.png)
+include(GNUInstallDirs)
+set(NUTRA_EXECUTABLE "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/nutra")
+configure_file(nutra.desktop.in ${CMAKE_BINARY_DIR}/nutra.desktop @ONLY)
+
+install(TARGETS nutra DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(FILES ${CMAKE_BINARY_DIR}/nutra.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
+install(FILES resources/nutrition_icon-no_bg.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps RENAME nutra.png)
if(NUTRA_DB_FILE AND EXISTS "${NUTRA_DB_FILE}")
install(FILES "${NUTRA_DB_FILE}" DESTINATION share/nutra RENAME usda.sqlite3)
CTEST := ctest
SRC_DIRS := src
+# Get version from git
+VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "v0.0.0")
+
# Find source files for linting
LINT_LOCS_CPP ?= $(shell git ls-files '*.cpp')
LINT_LOCS_H ?= $(shell git ls-files '*.h')
$(CMAKE) \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
+ -DNUTRA_VERSION="$(VERSION)" \
-B $(BUILD_DIR)
.PHONY: debug
.PHONY: release
release:
$(CMAKE) -E make_directory $(BUILD_DIR)
- $(CMAKE) -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=Release
+ $(CMAKE) -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=Release -DNUTRA_VERSION="$(VERSION)"
$(CMAKE) --build $(BUILD_DIR) --config Release
.PHONY: clean
SearchWidget *searchWidget;
DetailsWidget *detailsWidget;
MealWidget *mealWidget;
+
+private slots:
+ void onAbout();
};
#endif // MAINWINDOW_H
[Desktop Entry]
Name=Nutra
Comment=Nutrition Tracker and USDA Database
-Exec=nutra
+Exec=@NUTRA_EXECUTABLE@
Icon=nutra
Terminal=false
Type=Application
#include "mainwindow.h"
+#include <QMenu>
+#include <QMenuBar>
+#include <QMessageBox>
#include <QVBoxLayout>
#include <QDebug>
setWindowIcon(QIcon(":/resources/nutrition_icon-no_bg.png"));
resize(1000, 700);
+ // Menu Bar
+ auto *helpMenu = menuBar()->addMenu("&Help");
+ auto *aboutAction = helpMenu->addAction("&About");
+ connect(aboutAction, &QAction::triggered, this, &MainWindow::onAbout);
+
auto *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
// tabs->setCurrentWidget(mealWidget);
});
}
+
+void MainWindow::onAbout() {
+ QMessageBox::about(
+ this, "About Nutrient Coach",
+ QString("<h3>Nutrient Coach %1</h3>"
+ "<p>A C++/Qt application for tracking nutrition.</p>"
+ "<p>Homepage: <a "
+ "href=\"https://github.com/nutratech/gui\">https://github.com/"
+ "nutratech/gui</a></p>")
+ .arg(NUTRA_VERSION_STRING));
+}