From cdcec22e609688812bf0f5ac303cc9c6970efb23 Mon Sep 17 00:00:00 2001 From: ReFil <31960031+ReFil@users.noreply.github.com> Date: Thu, 16 Nov 2023 07:49:39 +0000 Subject: [PATCH] Version compiled FW with automatic macro (#267) * Version compiled FW with hash Auto generates a macro to type out version info, local and github compilation now includes commit hash and timestamp in final uf2 files * Fix local builds makefile doesn't like the script returning the macro, directed to null for local builds as version.dtsi file accessible --- .github/workflows/build.yml | 15 ++++++++-- CHANGELOG.md | 2 ++ Makefile | 5 +++- README.md | 4 +++ bin/build.sh | 5 ++-- bin/get_version.sh | 57 +++++++++++++++++++++++++++++++++++++ config/adv360.keymap | 11 ++++++- config/version.dtsi | 0 8 files changed, 92 insertions(+), 7 deletions(-) create mode 100755 bin/get_version.sh create mode 100644 config/version.dtsi diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 35a2fe9..23c3edf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,15 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + - name: Get version data + id: get_info + run: | + timestamp=$(date +"%Y%m%d%H%M") + commit=$(echo "${{ github.sha }}" | cut -c1-7) + file_prefix=$timestamp-$commit + branch_name=$(echo "${{ github.ref }}" | awk -F'/' '{print $3}' | cut -c1-4) + echo "file_prefix=$file_prefix" >> $GITHUB_OUTPUT + bin/get_version.sh $branch_name $commit - name: Cache west modules uses: actions/cache@v3 env: @@ -42,11 +51,11 @@ jobs: - name: Adv360 Right Kconfig file run: grep -vE '(^#|^$)' build/right/zephyr/.config - name: Rename zmk.uf2 - run: cp build/left/zephyr/zmk.uf2 left.uf2 && cp build/right/zephyr/zmk.uf2 right.uf2 + run: cp build/left/zephyr/zmk.uf2 ${{ steps.get_info.outputs.file_prefix }}-left.uf2 && cp build/right/zephyr/zmk.uf2 ${{ steps.get_info.outputs.file_prefix }}-right.uf2 - name: Archive (Adv360) uses: actions/upload-artifact@v3 with: name: firmware path: | - left.uf2 - right.uf2 + ${{ steps.get_info.outputs.file_prefix }}-left.uf2 + ${{ steps.get_info.outputs.file_prefix }}-right.uf2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9384ad9..554493f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ Here's all notable changes and commits to both the configuration repo and the ba Many thanks to all those who have submitted issues and pull requests to make this firmware better! ## Config repo +11/15/2023 - Add and document the new automatic versioning system [#267](https://github.com/KinesisCorporation/Adv360-Pro-ZMK/pull/267) + 11/7/2023 - Add and document a new configuration option for extended NKRO ranges [#264](https://github.com/KinesisCorporation/Adv360-Pro-ZMK/pull/264) 11/2/2023 - Update the documentation to note the new configuration options, other miscellaneous improvements based on feedback [#260](https://github.com/KinesisCorporation/Adv360-Pro-ZMK/pull/260) diff --git a/Makefile b/Makefile index 7e95cb8..e5231eb 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ DOCKER := $(shell { command -v podman || command -v docker; }) -TIMESTAMP := $(shell date -u +"%Y%m%d%H%M%S") +TIMESTAMP := $(shell date -u +"%Y%m%d%H%M") +COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null) detected_OS := $(shell uname) # Classify UNIX OS ifeq ($(strip $(detected_OS)),Darwin) #We only care if it's OS X SELINUX1 := @@ -12,11 +13,13 @@ endif .PHONY: all clean all: + $(shell bin/get_version.sh >> /dev/null) $(DOCKER) build --tag zmk --file Dockerfile . $(DOCKER) run --rm -it --name zmk \ -v $(PWD)/firmware:/app/firmware$(SELINUX1) \ -v $(PWD)/config:/app/config:ro$(SELINUX2) \ -e TIMESTAMP=$(TIMESTAMP) \ + -e COMMIT=$(COMMIT) \ zmk clean: diff --git a/README.md b/README.md index f876cf3..ac090a2 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,10 @@ If you encounter a git conflict when updating your repository to V3.0 please fol Updating from V2.0 based firmwares to V3.0 based firmwares can be a rather complex process. There are reset files for every major firmware revision as well as documentation on the update process available [here](https://kinesis-ergo.com/support/kb360pro/#firmware-updates). +## Versioning + +Starting on 11/15/2023 the Advantage 360 Pro will now automatically record the compilation date, branch and Git commit hash in a macro that can be accessed with Mod+V. This will type out the following string: YYYYMMDD-XXXX-YYYYYY, where XXXX is the first 4 characters of the Git branch and YYYYYY is the Git commit hash. In addition to this the builds compiled by GitHub actions are now timestamped and also record the commit hash in the filename. + ## Bluetooth LE Privacy Since the update on 20/10/2023, BLE privacy is now disabled by default and due to an update in upstream ZMK cannot be enabled again as it will cause issues for the split halves connecting to each other. diff --git a/bin/build.sh b/bin/build.sh index ade4767..cd68988 100755 --- a/bin/build.sh +++ b/bin/build.sh @@ -3,7 +3,8 @@ set -eu PWD=$(pwd) -TIMESTAMP="${TIMESTAMP:-$(date -u +"%Y%m%d%H%M%S")}" +TIMESTAMP="${TIMESTAMP:-$(date -u +"%Y%m%d%H%M")}" +COMMIT="${COMMIT:-$(echo xxxxxx)}" # West Build (left) west build -s zmk/app -d build/left -b adv360_left -- -DZMK_CONFIG="${PWD}/config" @@ -14,4 +15,4 @@ west build -s zmk/app -d build/right -b adv360_right -- -DZMK_CONFIG="${PWD}/con # Adv360 Right Kconfig file grep -vE '(^#|^$)' build/right/zephyr/.config # Rename zmk.uf2 -cp build/left/zephyr/zmk.uf2 "./firmware/${TIMESTAMP}-left.uf2" && cp build/right/zephyr/zmk.uf2 "./firmware/${TIMESTAMP}-right.uf2" +cp build/left/zephyr/zmk.uf2 "./firmware/${TIMESTAMP}-${COMMIT}-left.uf2" && cp build/right/zephyr/zmk.uf2 "./firmware/${TIMESTAMP}-${COMMIT}-right.uf2" diff --git a/bin/get_version.sh b/bin/get_version.sh new file mode 100755 index 0000000..a1b1d6e --- /dev/null +++ b/bin/get_version.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Get the date, first 4 chars of branch name and short commit hash +date=$(date -u +"%Y%m%d") +branch=${1:-$(git rev-parse --abbrev-ref HEAD | cut -c1-4)} +commit=${2:-$(git rev-parse --short HEAD)} + +# Function to transform characters to ZMK key behaviours +transform_char() { + local char=$1 + if [[ $char =~ [A-Za-z] ]]; then + echo "<&kp ${char^^}>, " + elif [[ $char =~ [0-9] ]]; then + echo "<&kp N${char}>, " + elif [ "$char" = "." ]; then + echo "<&kp DOT>, " + fi +} + +# Iterate over the date and format characters +formatted_date="" +for ((i = 0; i < ${#date}; i++)); do + formatted_date+=$(transform_char "${date:$i:1}") +done + +# Insert separator between date and branch +formatted_date+="<&kp MINUS>, " + +# Iterate over the branch and format characters +formatted_branch="" +for ((i = 0; i < ${#branch}; i++)); do + formatted_branch+=$(transform_char "${branch:$i:1}") +done + +# Insert separator between branch and commit hash +formatted_branch+="<&kp MINUS>, " + +# Iterate over the commit hash and format characters +formatted_commit="" +for ((i = 0; i < ${#commit}; i++)); do + formatted_commit+=$(transform_char "${commit:$i:1}") +done + +# Combine the formatted string, add trailing carriage return +formatted_result="$formatted_date$formatted_branch$formatted_commit" +formatted_result+="<&kp RET>" + +echo $formatted_result +# Create new macro to define version, overwrite previous one + +echo '#define VERSION_MACRO' > "config/version.dtsi" +echo 'macro_ver: macro_ver {' >> "config/version.dtsi" +echo 'compatible = "zmk,behavior-macro";' >> "config/version.dtsi" +echo 'label = "macro_ver";' >> "config/version.dtsi" +echo '#binding-cells = <0>;' >> "config/version.dtsi" +echo "bindings = $formatted_result;" >> "config/version.dtsi" +echo '};' >> "config/version.dtsi" diff --git a/config/adv360.keymap b/config/adv360.keymap index 8ece1db..cf80f15 100644 --- a/config/adv360.keymap +++ b/config/adv360.keymap @@ -7,6 +7,15 @@ / { behaviors { #include "macros.dtsi" + #include "version.dtsi" + #ifndef VERSION_MACRO + macro_ver: macro_ver { + compatible = "zmk,behavior-macro"; + label = "macro_version"; + #binding-cells = <0>; + bindings = <&kp RET>; + }; + #endif hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; @@ -54,7 +63,7 @@ &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &none &trans &none &none &none &none &none &none &none &none &none &none &none &none &bootloader &bootloader &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &bt BT_CLR &none &rgb_ug RGB_MEFS_CMD 5 &none &none &none &none &none &none - &none &none &none &none &none &none &none &none &none &none &none &none &none &none + &none &none &none &none ¯o_ver &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &bl BL_TOG &rgb_ug RGB_TOG &bl BL_INC &bl BL_DEC &none &none &none >; }; diff --git a/config/version.dtsi b/config/version.dtsi new file mode 100644 index 0000000..e69de29