release.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. name: Release
  2. on:
  3. push:
  4. branches:
  5. - main
  6. permissions:
  7. contents: write
  8. jobs:
  9. build-release:
  10. runs-on: ubuntu-latest
  11. steps:
  12. - name: Check out repository
  13. uses: actions/checkout@v4
  14. - name: Set up Arduino CLI
  15. uses: arduino/setup-arduino-cli@v2
  16. - name: Set up Python
  17. uses: actions/setup-python@v5
  18. with:
  19. python-version: '3.x'
  20. - name: Install adafruit-nrfutil
  21. run: pip install adafruit-nrfutil
  22. - name: Install Adafruit nRF52 core
  23. run: |
  24. arduino-cli config init --overwrite
  25. arduino-cli config set board_manager.additional_urls https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
  26. arduino-cli core update-index
  27. arduino-cli core install adafruit:nrf52
  28. - name: Generate version header
  29. run: ./gen_version.sh
  30. - name: Compile OpenPuck
  31. run: |
  32. mkdir -p build/openpuck build/cache/openpuck
  33. arduino-cli compile \
  34. -b adafruit:nrf52:feather52840 \
  35. --clean \
  36. --build-path build/cache/openpuck \
  37. --output-dir build/openpuck \
  38. --build-property "build.extra_flags=-DNRF52840_XXAA {build.flags.usb} -DCFG_TUD_HID=4" \
  39. OpenPuck
  40. - name: Generate UF2 (standard)
  41. run: ./gen_uf2.sh build/openpuck/OpenPuck.ino.hex build/openpuck/OpenPuck.ino.uf2
  42. - name: Compile ReversePuckFirmware
  43. run: |
  44. mkdir -p build/reversepuck build/cache/reversepuck
  45. arduino-cli compile \
  46. -b adafruit:nrf52:feather52840 \
  47. --clean \
  48. --build-path build/cache/reversepuck \
  49. --output-dir build/reversepuck \
  50. --build-property "build.extra_flags=-DNRF52840_XXAA {build.flags.usb}" \
  51. ReversePuckFirmware
  52. - name: Generate UF2 (ReversePuckFirmware)
  53. run: ./gen_uf2.sh build/reversepuck/ReversePuckFirmware.ino.hex build/reversepuck/ReversePuckFirmware.ino.uf2
  54. - name: Compile recovery build
  55. run: |
  56. mkdir -p build/openpuck-recovery build/cache/openpuck-recovery
  57. arduino-cli compile \
  58. -b adafruit:nrf52:feather52840 \
  59. --clean \
  60. --build-path build/cache/openpuck-recovery \
  61. --output-dir build/openpuck-recovery \
  62. --build-property "build.extra_flags=-DNRF52840_XXAA {build.flags.usb} -DCFG_TUD_HID=4 -DOPK_FACTORY_RESET=1" \
  63. OpenPuck
  64. - name: Generate UF2 (recovery)
  65. run: ./gen_uf2.sh build/openpuck-recovery/OpenPuck.ino.hex build/openpuck-recovery/OpenPuck.ino.uf2
  66. - name: Collect artifacts
  67. run: |
  68. mkdir -p release_assets
  69. REF="${GITHUB_REF_NAME}"
  70. SAFE_REF="$(printf '%s' "$REF" | tr -c 'A-Za-z0-9._-' '-')"
  71. SHA_SHORT="$(git rev-parse --short=8 HEAD)"
  72. VERSION="${SAFE_REF}-${SHA_SHORT}"
  73. find build/openpuck build/openpuck-recovery \
  74. -maxdepth 1 -type f \
  75. \( -name '*.uf2' -o -name '*.zip' \) \
  76. -print | while read -r f; do
  77. # Keep only the extension; the arduino base name (OpenPuck.ino.*)
  78. # is redundant once we prefix with OpenPuck-<version>-<flavor>.
  79. ext="${f##*.}"
  80. dir="$(basename "$(dirname "$f")")"
  81. if [ "$dir" = "openpuck-recovery" ]; then
  82. flavor="factory-reset"
  83. else
  84. flavor="standard"
  85. fi
  86. cp "$f" "release_assets/OpenPuck-${VERSION}-${flavor}.${ext}"
  87. done
  88. find build/reversepuck \
  89. -maxdepth 1 -type f \
  90. \( -name '*.uf2' -o -name '*.zip' \) \
  91. -print | while read -r f; do
  92. ext="${f##*.}"
  93. cp "$f" "release_assets/ReversePuckFirmware-${VERSION}.${ext}"
  94. done
  95. test -n "$(find release_assets -maxdepth 1 -type f -print -quit)"
  96. ls -la release_assets
  97. - name: Create GitHub Release
  98. uses: softprops/action-gh-release@v2
  99. with:
  100. tag_name: ${{ format('build-{0}', github.sha) }}
  101. target_commitish: ${{ github.sha }}
  102. name: ${{ format('Build {0}', github.sha) }}
  103. prerelease: true
  104. files: release_assets/*
  105. body: |
  106. OpenPuck Firmware Release
  107. Build: ${{ github.sha }}
  108. Ref: ${{ github.ref_name }}
  109. ### Files included:
  110. - `OpenPuck-*-standard.*` — puck firmware (standard)
  111. - `OpenPuck-*-factory-reset.*` — puck firmware (factory reset)
  112. - `ReversePuckFirmware-*.*` — reverse-puck firmware (controller emulator)
  113. - `.zip` files for Adafruit DFU tool
  114. - `.uf2` files for drag-and-drop flashing (BOOT/UF2 drive)
  115. env:
  116. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}