diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 35a2fe9f74..23c3edf2ac 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 9384ad9236..554493f1d1 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 7e95cb8b5c..e5231eb4fb 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 f876cf3882..ac090a2f7c 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 ade4767ff9..cd68988ecd 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 0000000000..a1b1d6e7e4 --- /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/version.dtsi b/config/version.dtsi new file mode 100644 index 0000000000..e69de29bb2