[PR #75] [MERGED] Add firmware build and release workflows #181

Closed
opened 2026-10-22 05:07:12 +00:00 by roman · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/safijari/openpuck/pull/75
Author: @Neikon
Created: 6/20/2026
Status: ✅ Merged
Merged: 6/22/2026
Merged by: @safijari

Base: main ← Head: main


📝 Commits (10+)

  • 67d89bf Add GitHub Actions for building and releasing
  • 88afd27 Merge branch 'safijari:main' into ci/build-and-release
  • d30803c Fix build outputs: copy files from ARDUINO_BUILD_OUTPUT_DIR before cleanup
  • 42a627f Fix build outputs copy: search in correct Adafruit core directories
  • 8a8471b Fix build outputs copy: handle empty build_outputs directory gracefully
  • 405dc9d Fix build outputs copying: search .arduino15 recursively for firmware files
  • b753c03 Fix firmware build release workflow
  • c041e9e Run firmware workflows only on main
  • 474bc0a Merge pull request #1 from Neikon/ci/build-and-release
  • 57b0f3b Merge upstream main

📊 Changes

4 files changed (+135 additions, -2 deletions)

View changed files

📝 .github/workflows/build.yml (+26 -1)
📝 .github/workflows/format.yml (+2 -1)
➕ .github/workflows/release.yml (+105 -0)
📝 .gitignore (+2 -0)

📄 Description

Summary

This adds GitHub Actions automation for OpenPuck firmware builds and per-main-commit release artifacts.

  • adds an Arduino firmware build workflow for the nRF52840 target
  • installs the Adafruit nRF52 core and adafruit-nrfutil in CI
  • generates OpenPuck/git_version.h before compiling so build provenance is embedded
  • writes Arduino outputs to deterministic build/openpuck paths instead of relying on runner/core temp paths
  • uploads standard build artifacts from CI (.hex, .elf, .map, .zip, plus .uf2/.bin if the core emits them)
  • adds a release workflow that builds both the normal firmware and OPK_FACTORY_RESET=1 recovery firmware
  • publishes prerelease assets on pushes to main using a build- tag
  • limits Format, Build, and Release workflows to push events on main, so development branches do not publish artifacts
  • ignores local build/ and release_assets/ output directories

Validation

Tested on the fork before opening this PR:

  • Format workflow completed successfully
  • Build workflow completed successfully
  • Release workflow completed successfully
  • Release assets were published for both standard and factory-reset builds: .elf, .hex, .map, and .zip
  • After restricting triggers to main, pushing to a development branch no longer started workflows

Notes

The release workflow intentionally creates prereleases for build- tags. That keeps automatic per-commit firmware builds available without replacing any manually curated stable release as Latest.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/safijari/openpuck/pull/75 **Author:** [@Neikon](https://github.com/Neikon) **Created:** 6/20/2026 **Status:** ✅ Merged **Merged:** 6/22/2026 **Merged by:** [@safijari](https://github.com/safijari) **Base:** `main` ← **Head:** `main` --- ### 📝 Commits (10+) - [`67d89bf`](https://github.com/safijari/openpuck/commit/67d89bf527d23c3deda2498bfe3d049b4d9e05ad) Add GitHub Actions for building and releasing - [`88afd27`](https://github.com/safijari/openpuck/commit/88afd27f85be402a9506f04313154d8ffba6d5d1) Merge branch 'safijari:main' into ci/build-and-release - [`d30803c`](https://github.com/safijari/openpuck/commit/d30803c9d2a2755146e997df941ce5cf3a7e4c58) Fix build outputs: copy files from ARDUINO_BUILD_OUTPUT_DIR before cleanup - [`42a627f`](https://github.com/safijari/openpuck/commit/42a627f6b95b8615af20643955d7c1c36ac8bb14) Fix build outputs copy: search in correct Adafruit core directories - [`8a8471b`](https://github.com/safijari/openpuck/commit/8a8471b288f9d4c22b46f5419eb79ebfcf9a2893) Fix build outputs copy: handle empty build_outputs directory gracefully - [`405dc9d`](https://github.com/safijari/openpuck/commit/405dc9dd3fdca2041ed032ac44cd9ea3740a6614) Fix build outputs copying: search .arduino15 recursively for firmware files - [`b753c03`](https://github.com/safijari/openpuck/commit/b753c038b2a04dcddbded9bdd7c7117031f4ffb4) Fix firmware build release workflow - [`c041e9e`](https://github.com/safijari/openpuck/commit/c041e9e62dc14315bb68fe474743b53167b1fb88) Run firmware workflows only on main - [`474bc0a`](https://github.com/safijari/openpuck/commit/474bc0a3c2def2f00ee33a0fb71d9eea44a414ce) Merge pull request #1 from Neikon/ci/build-and-release - [`57b0f3b`](https://github.com/safijari/openpuck/commit/57b0f3b6a190ba5fed6abae8e65a2703fcb91894) Merge upstream main ### 📊 Changes **4 files changed** (+135 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/build.yml` (+26 -1) 📝 `.github/workflows/format.yml` (+2 -1) ➕ `.github/workflows/release.yml` (+105 -0) 📝 `.gitignore` (+2 -0) </details> ### 📄 Description ## Summary This adds GitHub Actions automation for OpenPuck firmware builds and per-main-commit release artifacts. - adds an Arduino firmware build workflow for the nRF52840 target - installs the Adafruit nRF52 core and adafruit-nrfutil in CI - generates OpenPuck/git_version.h before compiling so build provenance is embedded - writes Arduino outputs to deterministic build/openpuck paths instead of relying on runner/core temp paths - uploads standard build artifacts from CI (.hex, .elf, .map, .zip, plus .uf2/.bin if the core emits them) - adds a release workflow that builds both the normal firmware and OPK_FACTORY_RESET=1 recovery firmware - publishes prerelease assets on pushes to main using a build-<sha> tag - limits Format, Build, and Release workflows to push events on main, so development branches do not publish artifacts - ignores local build/ and release_assets/ output directories ## Validation Tested on the fork before opening this PR: - Format workflow completed successfully - Build workflow completed successfully - Release workflow completed successfully - Release assets were published for both standard and factory-reset builds: .elf, .hex, .map, and .zip - After restricting triggers to main, pushing to a development branch no longer started workflows ## Notes The release workflow intentionally creates prereleases for build-<sha> tags. That keeps automatic per-commit firmware builds available without replacing any manually curated stable release as Latest. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
roman 2026-10-22 05:07:13 +00:00
Sign in to join this conversation.
No labels
pull-request
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
safijari/openpuck#181
No description provided.