Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/actions/build-firmware/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ runs:
- name: 'Release'
shell: bash
run: Buildscripts/release.sh ${{ inputs.board_id }}
- name: 'Merge binary'
shell: bash
run: |
python -m pip install esptool
cd release/Tactility-${{ inputs.board_id }}
bash ./merge.sh ${{ inputs.arch }}
mv Binaries/merged_binary.bin ../Tactility-${{ inputs.board_id }}.bin
- name: 'Upload Artifact: Release'
uses: actions/upload-artifact@v4
with:
Expand All @@ -38,3 +45,9 @@ runs:
name: Tactility-${{ inputs.board_id }}-symbols
path: release/Tactility-${{ inputs.board_id }}-symbols
retention-days: 30
- name: 'Upload Artifact: Merged binary'
uses: actions/upload-artifact@v4
with:
name: Tactility-${{ inputs.board_id }}.bin
path: release/Tactility-${{ inputs.board_id }}.bin
retention-days: 30
2 changes: 1 addition & 1 deletion Buildscripts/CDN/generate-firmware-files.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def main(in_path: str, out_path: str, version: str):
devices=[]
)
for artifact_directory in artifact_directories:
if artifact_directory.endswith("-symbols") or artifact_directory.startswith("TactilitySDK-"):
if artifact_directory.endswith("-symbols") or artifact_directory.endswith(".bin") or artifact_directory.startswith("TactilitySDK-"):
continue
device_id = artifact_directory.removeprefix("Tactility-")
if not device_id:
Expand Down
26 changes: 26 additions & 0 deletions Buildscripts/Flashing/merge.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
param(
# "--chip esp32s3" is irrelevant, just need to be added, fallback to "esp32s3"
[string]$chip = "esp32s3"
)
Comment thread
coderabbitai[bot] marked this conversation as resolved.

if ($null -eq (Get-Command "esptool" -ErrorAction SilentlyContinue))
{
Write-Host "Unable to find esptool in your path. Make sure you have Python installed and on your path. Then run `pip install esptool`."
exit 1
}

# Create merge command based on partitions
$json = Get-Content .\Binaries\flasher_args.json -Raw | ConvertFrom-Json
$jsonClean = $json.flash_files -replace '[\{\}\@\;]', ''
$jsonClean = $jsonClean -replace '[\=]', ' '

$mergeArgs = @('--chip', $chip, 'merge-bin', '--output', 'merged_binary.bin') + ($jsonClean -split '\s+' | Where-Object { $_ })
Push-Location Binaries
& esptool @mergeArgs
$exitCode = $LASTEXITCODE
Pop-Location

if ($exitCode -ne 0) {
exit $exitCode
}

52 changes: 52 additions & 0 deletions Buildscripts/Flashing/merge.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env bash

# Usage:
# merge.sh [chip]
#
# Arguments:
# chip - optional ESP32 SOC variant (e.g. esp32, esp32s3, esp32c6)
#
# Requirements:
# jq - run 'pip install jq'
# esptool.py - run 'pip install esptool'
#
# Documentation:
# https://docs.espressif.com/projects/esptool/en/latest/esp32/
#

# Source: https://stackoverflow.com/a/53798785
function is_bin_in_path {
builtin type -P "$1" &> /dev/null
}

function require_bin {
program=$1
if ! is_bin_in_path $program; then
exit 1
else
exit 0
fi
}

# Find either esptool (installed via system package manager) or esptool.py (installed via pip)
if ! is_bin_in_path esptool; then
if ! is_bin_in_path esptool.py; then
echo "\e[31m⚠️ esptool not found! Install it from your package manager or install python and run 'pip install esptool'\e[0m"
exit 1
else
esptoolPath=esptool.py
fi
else
esptoolPath=esptool
fi

chip=${1:-esp32s3}

# Take the flash_arg file contents and join each line in the file into a single line
flash_args="$(tr '\n' ' ' < Binaries/flash_args)"
read -r -a flash_args_array <<< "$flash_args"
(
cd Binaries || exit 1
"$esptoolPath" --chip "$chip" merge-bin --output merged_binary.bin "${flash_args_array[@]}"
) || exit 1

Loading