Skip to content

Commit

Permalink
[nanokit] Set up GHA for releases
Browse files Browse the repository at this point in the history
  • Loading branch information
xychen committed Sep 2, 2024
1 parent 3f940ee commit f6bfc20
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
29 changes: 29 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]

jobs:
build:
Expand Down Expand Up @@ -45,10 +47,37 @@ jobs:
run: |
python tools/progen_compile.py -t cmake_gcc_arm -g ninja csk6_nanokit_bl csk6_nanokit_if
cp -v projectfiles/cmake_gcc_arm/*/build/*_crc.hex .
python tools/mergehex.py -o csk6_nanokit_factory_all.hex csk6_nanokit_bl_crc.hex csk6_nanokit_if_crc.hex
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: firmware_${{ github.run_id }}
path: |
*.hex
publish:
needs: build
if: github.event_name == 'release'

runs-on: ubuntu-latest

steps:
- name: Download distributables
uses: actions/download-artifact@v4
with:
pattern: firmware_*
path: firmware/

- name: Rename binaries
run: |
ls -la firmware/
for f in firmware/*.hex; do
mv $f ${f%.hex}_${{ github.event.release.tag_name }}.hex
done
- name: Upload assets to release
uses: csexton/release-asset-action@v3
with:
pattern: firmware/*
github-token: ${{ secrets.GITHUB_TOKEN }}
56 changes: 56 additions & 0 deletions tools/mergehex.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env python3
#
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

# This merges a set of input hex files into a single output hex file.
# Any conflicts will result in an error being reported.

from intelhex import IntelHex
from intelhex import AddressOverlapError

import argparse


def merge_hex_files(output, input_hex_files, overlap):
ih = IntelHex()

for hex_file_path in input_hex_files:
to_merge = IntelHex(hex_file_path)

# Since 'arm-none-eabi-objcopy' incorrectly inserts record
# type '03 - Start Segment Address', we need to remove the
# start_addr to avoid conflicts when merging.
to_merge.start_addr = None

try:
ih.merge(to_merge, overlap=overlap)
except AddressOverlapError:
raise AddressOverlapError("{} has merge issues".format(hex_file_path))

ih.write_hex_file(output)


def parse_args():
parser = argparse.ArgumentParser(
description="Merge hex files.",
formatter_class=argparse.RawDescriptionHelpFormatter, allow_abbrev=False)
parser.add_argument("-o", "--output", required=False, default="merged.hex",
type=argparse.FileType('w', encoding='UTF-8'),
help="Output file name.")
parser.add_argument("--overlap", default="error",
help="What to do when files overlap (error, ignore, replace). "
"See IntelHex.merge() for more info.")
parser.add_argument("input_files", nargs='*')
return parser.parse_args()


def main():
args = parse_args()

merge_hex_files(args.output, args.input_files, args.overlap)


if __name__ == "__main__":
main()

0 comments on commit f6bfc20

Please sign in to comment.