From 096f5ff30f7ed0fb371cce1a58756d0b140fd6a7 Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sat, 23 Aug 2025 11:49:22 +0200 Subject: [PATCH 1/7] fix : keep Qt 6.4 compatibility --- src/ui/qt/icons.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ui/qt/icons.cpp b/src/ui/qt/icons.cpp index 4b6200d1..43c01f07 100644 --- a/src/ui/qt/icons.cpp +++ b/src/ui/qt/icons.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "structure_view/structure_conflict_colinear_edges.hpp" #include "structure_view/structure_conflict_too_close_meshline_policies.hpp" @@ -40,11 +41,15 @@ QPixmap make_pixmap(Drawer const& draw) { QPixmap icon(size, size); icon.fill(Qt::transparent); QPainter painter(&icon); +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) switch(QGuiApplication::styleHints()->colorScheme()) { default: [[fallthrough]]; case Qt::ColorScheme::Light: painter.setPen(Qt::black); break; case Qt::ColorScheme::Dark: painter.setPen(Qt::white); break; } +#else + painter.setPen(Qt::black); +#endif draw(size, painter); return icon; }; @@ -76,6 +81,7 @@ QPixmap apply(QTransform const& transform, QPixmap const& pixmap) { } //****************************************************************************** +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) #define PIXMAP_MAKER_DEF(NAME, FUNC) \ QPixmap const& Icons::NAME() { \ switch(QGuiApplication::styleHints()->colorScheme()) { \ @@ -90,6 +96,13 @@ QPixmap apply(QTransform const& transform, QPixmap const& pixmap) { } \ } \ } +#else +#define PIXMAP_MAKER_DEF(NAME, FUNC) \ + QPixmap const& Icons::NAME() { \ + static QPixmap const light = FUNC; \ + return light; \ + } +#endif //****************************************************************************** PIXMAP_MAKER_DEF(edge, make_pixmap(draw_icon_from_text("/"))) From 95ac62e8fc0af30dd10eecd5455c2927e7229169 Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sat, 23 Aug 2025 15:11:28 +0200 Subject: [PATCH 2/7] add XDG .desktop & install icons --- CMakeLists.txt | 1 + default.nix | 1 + flake.nix | 4 ++-- icon/CMakeLists.txt | 16 ++++++++++++++++ pack/CMakeLists.txt | 6 ++++++ pack/openemsh.desktop | 8 ++++++++ 6 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 pack/CMakeLists.txt create mode 100644 pack/openemsh.desktop diff --git a/CMakeLists.txt b/CMakeLists.txt index 9417de4c..6c85da6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,7 @@ set( CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS add_subdirectory( "${CMAKE_SOURCE_DIR}/src" ) add_subdirectory( "${CMAKE_SOURCE_DIR}/test" ) add_subdirectory( "${CMAKE_SOURCE_DIR}/icon" ) +add_subdirectory( "${CMAKE_SOURCE_DIR}/pack" ) add_subdirectory( "${CMAKE_SOURCE_DIR}/doc" ) if( CMakeUtils_FOUND ) diff --git a/default.nix b/default.nix index 9a1b2aea..d1f1f2aa 100644 --- a/default.nix +++ b/default.nix @@ -22,6 +22,7 @@ stdenv.mkDerivation { "src" "doc" "icon" + "pack" "test" "CMakeLists.txt" "CMakePresets.json" diff --git a/flake.nix b/flake.nix index 998434b6..63c879e6 100644 --- a/flake.nix +++ b/flake.nix @@ -66,8 +66,8 @@ mkdir -p $out/bin printf '${script}' > $out/bin/${package.pname} chmod +x $out/bin/${package.pname} -# mkdir -p $out/share -# ${pkgs.xorg.lndir}/bin/lndir -silent ${package}/share $out/share + mkdir -p $out/share + ${pkgs.xorg.lndir}/bin/lndir -silent ${package}/share $out/share ''; }; diff --git a/icon/CMakeLists.txt b/icon/CMakeLists.txt index 6f771137..f75bc4ea 100644 --- a/icon/CMakeLists.txt +++ b/icon/CMakeLists.txt @@ -37,3 +37,19 @@ if( CMakeUtils_Icon_FOUND ) COMMENT "Copying icon png and ico files back to ${CMAKE_CURRENT_SOURCE_DIR}/" ) endif() + +foreach( I IN ITEMS 256 128 64 48 32 22 16 ) + install( + FILES "${CMAKE_SOURCE_DIR}/icon/openemsh.${I}.png" + DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${I}x${I}/apps" + RENAME "openemsh.png" + CONFIGURATIONS Release + ) +endforeach() + +install( + FILES "${CMAKE_SOURCE_DIR}/icon/openemsh.svg" + DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps" + RENAME "openemsh.svg" + CONFIGURATIONS Release + ) diff --git a/pack/CMakeLists.txt b/pack/CMakeLists.txt new file mode 100644 index 00000000..f23804e0 --- /dev/null +++ b/pack/CMakeLists.txt @@ -0,0 +1,6 @@ + +install( + FILES "${CMAKE_SOURCE_DIR}/pack/openemsh.desktop" + DESTINATION "${CMAKE_INSTALL_DATADIR}/applications" + CONFIGURATIONS Release + ) diff --git a/pack/openemsh.desktop b/pack/openemsh.desktop new file mode 100644 index 00000000..917585b0 --- /dev/null +++ b/pack/openemsh.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=OpenEMSH +TryExec=openemsh +Exec=bash -c "F="%f" && test -n "$F" && openemsh -G -i $F || openemsh" +Icon=openemsh +Type=Application +Comment=OpenEMS mesher draft +Categories=Education;Electronics; From d3552b41b9118ae9165b84e430354dc3763384d0 Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sun, 24 Aug 2025 01:48:01 +0200 Subject: [PATCH 3/7] add CHANGELOG --- CHANGELOG | 5 +++++ CMakeLists.txt | 20 +++++++++++++++++++- default.nix | 6 +++++- doc/CMakeLists.txt | 14 ++++++++++++++ src/CMakeLists.txt | 2 +- 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 CHANGELOG diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 00000000..b501f014 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,5 @@ +openemsh (0.0.0) + + * Project creation + + -- Thomas Lepoix 13 Feb 2021 diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c85da6b..f4c12d07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,26 @@ cmake_minimum_required( VERSION 3.16 ) +# PROJECT_VERSION_LONG : ..++g (Debian native compatible `git describe --tags`) +# PROJECT_VERSION : ... +file( STRINGS "${CMAKE_SOURCE_DIR}/CHANGELOG" PROJECT_VERSION + LIMIT_COUNT 1 + ) +string( REGEX REPLACE + "^[^ ]+ \\((.*)\\)$" "\\1" + PROJECT_VERSION_LONG "${PROJECT_VERSION}" + ) +string( REGEX REPLACE + "[\\+~-]" "." + PROJECT_VERSION "${PROJECT_VERSION}" + ) +string( REGEX REPLACE + "^[^ ]+ \\(([0-9]+(\\.[0-9]+)?(\\.[0-9]+)?(\\.[0-9]+)?).*\\)$" "\\1" + PROJECT_VERSION "${PROJECT_VERSION}" + ) + project( openemsh LANGUAGES CXX - VERSION 0.0.0 + VERSION "${PROJECT_VERSION}" DESCRIPTION "openEMS mesher" HOMEPAGE_URL "https://github.com/Open-RFlab/openemsh" ) diff --git a/default.nix b/default.nix index d1f1f2aa..22c084c7 100644 --- a/default.nix +++ b/default.nix @@ -13,7 +13,10 @@ stdenv.mkDerivation { pname = "openemsh"; - version = "0.0.0"; + version = + let + firstLine = builtins.elemAt (lib.strings.split "\n" (builtins.readFile ./CHANGELOG)) 0; + in builtins.elemAt (builtins.match "^[^ ]+ \\((.*)\\)$" firstLine) 0; src = lib.nix-filter { root = ./.; @@ -26,6 +29,7 @@ stdenv.mkDerivation { "test" "CMakeLists.txt" "CMakePresets.json" + "CHANGELOG" ]; }; diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index f49f1353..8706138f 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,5 +1,19 @@ add_custom_target( doc ) +file( ARCHIVE_CREATE + OUTPUT "${CMAKE_BINARY_DIR}/doc/changelog.gz" + PATHS "${CMAKE_SOURCE_DIR}/CHANGELOG" + FORMAT raw + COMPRESSION GZip + COMPRESSION_LEVEL 9 + ) + +install( + FILES "${CMAKE_BINARY_DIR}/doc/changelog.gz" + DESTINATION "${CMAKE_INSTALL_DOCDIR}" + CONFIGURATIONS Release + ) + if( D2 ) set( D2_INDIVIDUAL_STEPS_FILES diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 53f59fe7..ffffffae 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -122,7 +122,7 @@ target_sources( openemsh_bin target_compile_definitions( openemsh_bin PRIVATE - OEMSH_VERSION="${PROJECT_VERSION}" + OEMSH_VERSION="${PROJECT_VERSION_LONG}" OEMSH_HOMEPAGE="${PROJECT_HOMEPAGE_URL}" OEMSH_FUNDING="${OEMSH_FUNDING}" OEMSH_BUGREPORT="${OEMSH_BUGREPORT}" From ce8fc925716eeda1d29466beb1f67130cec5f0b1 Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sun, 24 Aug 2025 02:12:17 +0200 Subject: [PATCH 4/7] nix : add Debian source support --- default.nix | 1 + flake.nix | 30 ++++++++++++++++++++++++++++++ pack/debian/changelog | 1 + pack/debian/compat | 1 + pack/debian/control | 24 ++++++++++++++++++++++++ pack/debian/copyright | 1 + pack/debian/rules | 11 +++++++++++ pack/debian/source/format | 1 + 8 files changed, 70 insertions(+) create mode 100644 pack/debian/changelog create mode 100644 pack/debian/compat create mode 100644 pack/debian/control create mode 100644 pack/debian/copyright create mode 100644 pack/debian/rules create mode 100644 pack/debian/source/format diff --git a/default.nix b/default.nix index 22c084c7..15006c8d 100644 --- a/default.nix +++ b/default.nix @@ -23,6 +23,7 @@ stdenv.mkDerivation { include = [ "cmake" "src" + "debian" "doc" "icon" "pack" diff --git a/flake.nix b/flake.nix index 63c879e6..78e0429e 100644 --- a/flake.nix +++ b/flake.nix @@ -87,6 +87,35 @@ ''; }; + debianSource = package: { distributions ? [ "unstable" ], metadata ? [ "urgency=medium" ] }: + pkgs.stdenvNoCC.mkDerivation { + inherit (package) version meta src; + pname = "${package.pname}-deb-source"; + doCheck = false; + nativeBuildInputs = [ pkgs.dpkg ]; + unpackPhase = '' + cp -r ${package.src} ${package.name} + chmod -R u+w ${package.name} + ''; + patchPhase = '' + mv ${package.name}/pack/debian ${package.name}/debian + # Add APT stuff and reformat timestamps + # https://manpages.debian.org/testing/dpkg-dev/deb-changelog.5.en.html + sed < ${package.name}/CHANGELOG -E \ + -e 's/^(\S+ \(\S+\))$/\1 ${toString distributions}; ${lib.strings.concatStringsSep "," metadata}/g' \ + -e 's/^( -- .+ <\S+@\S+> )([0-9]{1,2} [a-zA-Z]{3} [0-9]{4})$/echo "\1$(date -R --date "\2")"/e' \ + > ${package.name}/debian/changelog + cat ${package.name}/debian/changelog + ''; + buildPhase = '' + dpkg-source -b ${package.name} + ''; + installPhase = '' + mkdir -p $out + mv ${package.pname}_${package.version}.* $out/ + ''; + }; + in { devShells = { default = pkgs.mkShell { @@ -126,6 +155,7 @@ openemshMingw64 = pkgs-mingw.openemshMingw64; openemshMingw64Zip = zipWrapper pkgs-mingw.openemshMingw64; openemshWine64 = wineWrapper (pkgs-mingw.openemshMingw64.override { withPortabilityTweaks = true; }); + openemshDebSource = debianSource pkgs.openemsh {}; }; }) // { overlays = { diff --git a/pack/debian/changelog b/pack/debian/changelog new file mode 100644 index 00000000..4abb8b1e --- /dev/null +++ b/pack/debian/changelog @@ -0,0 +1 @@ +Placeholder for a slightly reformated copy of CHANGELOG, see flake.nix diff --git a/pack/debian/compat b/pack/debian/compat new file mode 100644 index 00000000..f599e28b --- /dev/null +++ b/pack/debian/compat @@ -0,0 +1 @@ +10 diff --git a/pack/debian/control b/pack/debian/control new file mode 100644 index 00000000..5ab7ae72 --- /dev/null +++ b/pack/debian/control @@ -0,0 +1,24 @@ +Source: openemsh +Section: electronics +Priority: optional +Maintainer: Thomas Lepoix +Uploaders: Thomas Lepoix +Homepage: https://github.com/Open-RFlab/openemsh +Vcs-Git: https://github.com/Open-RFlab/openemsh +Vcs-Browser: https://github.com/Open-RFlab/openemsh +Build-Depends: + debhelper, + gcc (>= 13), + cmake, + qt6-base-dev, + libcli11-dev (>= 2.4), + libpugixml-dev +# texlive-xetex +# fonts-lato + +Package: openemsh +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Suggests: openems, octave-openems, python3-openems +Enhances: openems, octave-openems, python3-openems +Description: OpenEMS mesher draft diff --git a/pack/debian/copyright b/pack/debian/copyright new file mode 100644 index 00000000..37df8bd6 --- /dev/null +++ b/pack/debian/copyright @@ -0,0 +1 @@ +GPL-3.0-or-later diff --git a/pack/debian/rules b/pack/debian/rules new file mode 100644 index 00000000..e80b009d --- /dev/null +++ b/pack/debian/rules @@ -0,0 +1,11 @@ +#!/usr/bin/make -f + +export DEB_BUILD_OPTIONS = nocheck + +%: + dh $@ + +override_dh_auto_configure: + dh_auto_configure -- \ + -DCMAKE_BUILD_TYPE=Release \ + -DCPM_DISABLE=ON diff --git a/pack/debian/source/format b/pack/debian/source/format new file mode 100644 index 00000000..89ae9db8 --- /dev/null +++ b/pack/debian/source/format @@ -0,0 +1 @@ +3.0 (native) From f842a04b597daab4602eca3d20878a75fc4bd628 Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sun, 24 Aug 2025 05:46:32 +0200 Subject: [PATCH 5/7] CI : add Debian release & adapt Windows release to CHANGELOG --- .github/workflows/release_debian.yml | 66 +++++++++++++++++++++++++++ .github/workflows/release_windows.yml | 27 ++++++----- README.md | 1 + tool/changelog_add_upstream_entry.sh | 45 ++++++++++++++++++ 4 files changed, 127 insertions(+), 12 deletions(-) create mode 100755 tool/changelog_add_upstream_entry.sh diff --git a/.github/workflows/release_debian.yml b/.github/workflows/release_debian.yml index 0610a494..00df7fdc 100644 --- a/.github/workflows/release_debian.yml +++ b/.github/workflows/release_debian.yml @@ -2,3 +2,69 @@ name: Release Debian on: workflow_dispatch: + release: + types: published + +env: + PACKAGE: ${{ github.event.repository.name }} + OBS_USER: thomaslepoix + OBS_PROJECT: home:${OBS_USER}:open-rflab + +jobs: + run: + + runs-on: ubuntu-latest + + steps: + - name: Chekout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: 'Dependencies: Nix' + uses: cachix/install-nix-action@v26 + with: + nix_path: nixpkgs=channel:nixos-unstable + + - name: Setup Nix cache + uses: DeterminateSystems/magic-nix-cache-action@v4 + + - name: Extract informations + id: extract + shell: bash + run: | + echo "upload_url=$(curl -sL ${{ github.api_url }}/repos/${{ github.repository }}/releases/tags/${{ github.ref_name }}} | jq -r '.upload_url')" >> $GITHUB_OUTPUT + echo "version=$(git describe --tags --abbrev=7 | sed 's/-/+/g')" >> $GITHUB_OUTPUT + + - name: Update CHANGELOG + if: ${{ github.event_name != 'release' }} + run: | + OLD_VERSION="$(head -1 CHANGELOG | sed -E 's/^\S+ \((\S+)\)$/\1/')" + tool/changelog_add_upstream_entry.sh CHANGELOG + ADDED_LINES="$(git diff --numstat CHANGELOG | awk '{print $1}')" + [ "${ADDED_LINES}" != 0 ] && \ + echo "::warning file=CHANGELOG,line=1,endLine=${ADDED_LINES},title=Manualy triggered release::Version: ${{ steps.extract.outputs.version }} (last was: ${OLD_VERSION})" + + - name: Package + run: nix build -L --no-update-lock-file --show-trace .#${{ env.PACKAGE }}DebSource + + - name: Deploy source package as Github workflow artifact + uses: actions/upload-artifact@v4 + with: + retention-days: 90 + name: ${{ env.PACKAGE }}_${{ steps.extract.outputs.version }}.deb-src + path: | + result/${{ env.PACKAGE }}_${{ steps.extract.outputs.version }}.dsc + result/${{ env.PACKAGE }}_${{ steps.extract.outputs.version }}.tar.xz + + - name: Deploy source package on OBS + run: | + FILES={ + FILES+=result/${{ env.PACKAGE }}_${{ steps.extract.outputs.version }}.dsc, + FILES+=result/${{ env.PACKAGE }}_${{ steps.extract.outputs.version }}.tar.xz + FILES+=} + curl \ + --fail-with-body \ + --user ${{ env.OBS_USER }}:${{ secrets.OBS_PASSWORD }} \ + https://api.opensuse.org/source/${{ env.OBS_PROJECT }}/${{ env.PACKAGE }}/ \ + -T "${FILES}" diff --git a/.github/workflows/release_windows.yml b/.github/workflows/release_windows.yml index 8ee94293..6c698031 100644 --- a/.github/workflows/release_windows.yml +++ b/.github/workflows/release_windows.yml @@ -29,16 +29,24 @@ jobs: - name: Setup Nix cache uses: DeterminateSystems/magic-nix-cache-action@v4 - - name: Build - run: nix build -L --no-update-lock-file --show-trace --impure .#${{ env.PACKAGE }}Mingw64Zip - - name: Extract informations id: extract shell: bash run: | echo "upload_url=$(curl -sL ${{ github.api_url }}/repos/${{ github.repository }}/releases/tags/${{ github.ref_name }}} | jq -r '.upload_url')" >> $GITHUB_OUTPUT - echo "version=$(nix derivation show --impure .#${{ env.PACKAGE }}Mingw64 | jq -r 'to_entries | .[0].value.env.version')" >> $GITHUB_OUTPUT - echo "git_describe=$(git describe --tags --dirty --abbrev=7 | sed 's/-/+/')" >> $GITHUB_OUTPUT + echo "version=$(git describe --tags --abbrev=7 | sed 's/-/+/g')" >> $GITHUB_OUTPUT + + - name: Update CHANGELOG + if: ${{ github.event_name != 'release' }} + run: | + OLD_VERSION="$(head -1 CHANGELOG | sed -E 's/^\S+ \((\S+)\)$/\1/')" + tool/changelog_add_upstream_entry.sh CHANGELOG + ADDED_LINES="$(git diff --numstat CHANGELOG | awk '{print $1}')" + [ "${ADDED_LINES}" != 0 ] && \ + echo "::warning file=CHANGELOG,line=1,endLine=${ADDED_LINES},title=Manualy triggered release::Version: ${{ steps.extract.outputs.version }} (last was: ${OLD_VERSION})" + + - name: Build + run: nix build -L --no-update-lock-file --show-trace --impure .#${{ env.PACKAGE }}Mingw64Zip - name: Deploy .zip as Github release asset if: ${{ github.event_name == 'release' }} @@ -57,11 +65,6 @@ jobs: with: # TODO Currently no way not to double zip. # https://github.com/actions/upload-artifact/issues/39 - name: ${{ env.PACKAGE }}-x86_64-w64-mingw32-${{ steps.extract.outputs.git_describe }}.zip - path: result/${{ env.PACKAGE }}-x86_64-w64-mingw32-${{ steps.extract.outputs.version }}.zip retention-days: 90 - - - name: Warn for manual trigger - if: ${{ github.event_name != 'release' }} - run: | - echo "::warning title=Manual trigger::Package is uploaded as workflow artifact instead of release asset.%0AGit ref: ${{ github.ref_name }}%0AGit describe: ${{ steps.extract.outputs.git_describe }}" + name: ${{ env.PACKAGE }}-x86_64-w64-mingw32-${{ steps.extract.outputs.version }}.zip + path: result/${{ env.PACKAGE }}-x86_64-w64-mingw32-${{ steps.extract.outputs.version }}.zip diff --git a/README.md b/README.md index b2bf8fc5..9a4fd93b 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ [![SonarCloud quality gate](https://sonarcloud.io/api/project_badges/measure?project=Open-RFlab_openemsh&metric=alert_status)](https://sonarcloud.io/dashboard?id=Open-RFlab_openemsh) [![SonarCloud coverage](https://sonarcloud.io/api/project_badges/measure?project=Open-RFlab_openemsh&metric=coverage)](https://sonarcloud.io/dashboard?id=Open-RFlab_openemsh) +[![Package Debian](https://img.shields.io/github/actions/workflow/status/Open-RFlab/openemsh/release_debian.yml?label=package&logo=debian)](https://software.opensuse.org/download.html?project=home:thomaslepoix:open-rflab&package=openemsh) [![Package Windows](https://img.shields.io/github/actions/workflow/status/Open-RFlab/openemsh/release_windows.yml?label=package&logo=mingww64)](https://github.com/Open-RFlab/openemsh/releases) # OpenEMSH : OpenEMS Mesher [WIP] diff --git a/tool/changelog_add_upstream_entry.sh b/tool/changelog_add_upstream_entry.sh new file mode 100755 index 00000000..55819cef --- /dev/null +++ b/tool/changelog_add_upstream_entry.sh @@ -0,0 +1,45 @@ +#! /usr/bin/env bash + +# $1: CHANGELOG file + +if [ -z "${1}" ] +then + echo "Error: No CHANGELOG file given" + exit 1 +elif [ ! -w "${1}" ] +then + echo "Error: Invalid or unwritable CHANGELOG file: ${1}" + exit 1 +fi + +CHANGELOG="$(realpath "${1}")" +DIR="$(dirname "${CHANGELOG}")" +cd "${DIR}" +GIT_DIR="$(git rev-parse --show-toplevel)" + +if [ "${DIR}" != "${GIT_DIR}" ] +then + echo "\ +Error: CHANGELOG is not at top level of a git repository + CHANGELOG path: ${CHANGELOG} + Git directory: ${GIT_DIR}\ +" + exit 1 +fi + +PROJECT="$(head -1 "${CHANGELOG}" | cut -f 1 -d ' ')" +CHANGELOG_LAST_VERSION="$(head -1 "${CHANGELOG}" | sed -E 's/^\S+ \((\S+)\)$/\1/')" +GIT_HEAD_VERSION="$(git describe --tags --abbrev=7 | sed 's/-/+/g')" + +if [ "${GIT_HEAD_VERSION}" != "${CHANGELOG_LAST_VERSION}" ] +then + unset ENTRY + ENTRY+="${PROJECT} (${GIT_HEAD_VERSION})\n\n" + ENTRY+=" * Package from upstream sources\n\n" + ENTRY+=" -- Thomas Lepoix $(LC_TIME=POSIX date '+%d %b %Y')\n" + + sed -i "${CHANGELOG}" -e "1i ${ENTRY}" + git --no-pager diff --color=always "${CHANGELOG}" +else + echo "Nothing to do: Git HEAD already on last CHANGELOG entry: ${GIT_HEAD_VERSION}" +fi From f1573d9369b8b2a549606d7a495f9e08c77a7e0a Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Sun, 24 Aug 2025 23:20:39 +0200 Subject: [PATCH 6/7] CI : fix release changelog warning : drop file lines annotation --- .github/workflows/release_debian.yml | 5 ++--- .github/workflows/release_windows.yml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release_debian.yml b/.github/workflows/release_debian.yml index 00df7fdc..0b1c5363 100644 --- a/.github/workflows/release_debian.yml +++ b/.github/workflows/release_debian.yml @@ -41,9 +41,8 @@ jobs: run: | OLD_VERSION="$(head -1 CHANGELOG | sed -E 's/^\S+ \((\S+)\)$/\1/')" tool/changelog_add_upstream_entry.sh CHANGELOG - ADDED_LINES="$(git diff --numstat CHANGELOG | awk '{print $1}')" - [ "${ADDED_LINES}" != 0 ] && \ - echo "::warning file=CHANGELOG,line=1,endLine=${ADDED_LINES},title=Manualy triggered release::Version: ${{ steps.extract.outputs.version }} (last was: ${OLD_VERSION})" + [ "${OLD_VERSION}" != "${{ steps.extract.outputs.version }}" ] && \ + echo "::warning title=Version updated::Version: ${OLD_VERSION} -> ${{ steps.extract.outputs.version }}%0AGit ref: ${{ github.ref_name }}" - name: Package run: nix build -L --no-update-lock-file --show-trace .#${{ env.PACKAGE }}DebSource diff --git a/.github/workflows/release_windows.yml b/.github/workflows/release_windows.yml index 6c698031..f4ae78df 100644 --- a/.github/workflows/release_windows.yml +++ b/.github/workflows/release_windows.yml @@ -41,9 +41,8 @@ jobs: run: | OLD_VERSION="$(head -1 CHANGELOG | sed -E 's/^\S+ \((\S+)\)$/\1/')" tool/changelog_add_upstream_entry.sh CHANGELOG - ADDED_LINES="$(git diff --numstat CHANGELOG | awk '{print $1}')" - [ "${ADDED_LINES}" != 0 ] && \ - echo "::warning file=CHANGELOG,line=1,endLine=${ADDED_LINES},title=Manualy triggered release::Version: ${{ steps.extract.outputs.version }} (last was: ${OLD_VERSION})" + [ "${OLD_VERSION}" != "${{ steps.extract.outputs.version }}" ] && \ + echo "::warning title=Version updated::Version: ${OLD_VERSION} -> ${{ steps.extract.outputs.version }}%0AGit ref: ${{ github.ref_name }}" - name: Build run: nix build -L --no-update-lock-file --show-trace --impure .#${{ env.PACKAGE }}Mingw64Zip From 3ac738004107639f8d581851f9a7608abc37ca0b Mon Sep 17 00:00:00 2001 From: thomaslepoix Date: Mon, 25 Aug 2025 07:13:38 +0200 Subject: [PATCH 7/7] add RELASE.md & tool/changelog_2_md.sh --- RELEASE.md | 5 +++++ tool/changelog_2_md.sh | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 RELEASE.md create mode 100755 tool/changelog_2_md.sh diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 00000000..adede3bd --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,5 @@ +# Release process + +- Update `CHANGELOG`. +- Use `tool/changelog_2_md.sh` to help produce the release text. +- Publish a Github release (Windows executable will be automatically produced and uploaded on the release page, Debian source package will be forwarded to OBS). diff --git a/tool/changelog_2_md.sh b/tool/changelog_2_md.sh new file mode 100755 index 00000000..dfda9d98 --- /dev/null +++ b/tool/changelog_2_md.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +# $1: CHANGELOG file + +if [ -z "${1}" ] +then + echo "Error: No CHANGELOG file given" + exit 1 +elif [ ! -f "${1}" ] || [ ! -r "${1}" ] +then + echo "Error: Invalid or unreadable CHANGELOG file: ${1}" + exit 1 +fi + +CHANGELOG="$(realpath "${1}")" + +sed -E \ + -e 's/ \*/-/g' `#Bullet points` \ + -e 's/ \*/ -/g' `#Bullet points` \ + -e 's/ -- ([^<]+)<.*> +(.*)/*\1 - \2*\n\n---/g' `#Signature/Date line` \ + -e "s/(\S+ \([0-9.]+\))/### \1/g" `#Release title line` \ + -e 's/ \[ (.*) \]/#### \1/g' `#Category line` \ + "${CHANGELOG}"