Skip to content

Publish Firmware

Publish Firmware #9

name: Publish Firmware
on:
release:
types: [published]
workflow_run:
workflows:
- "Semantic Release"
types:
- completed
permissions:
contents: write
env:
FIRMWARE_FILES_LIST: firmware-files.txt
jobs:
set-release-version:
name: Extract Release Version
runs-on: ubuntu-latest
# Only run if workflow_run was successful or if it's a direct release trigger
if: github.event_name == 'release' || github.event.workflow_run.conclusion == 'success'
outputs:
release_version: ${{ steps.set-version.outputs.release_version }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract release-version
id: set-version
run: |
if [ "${{ github.event.release.tag_name }}" != "" ]; then
# Direct release trigger
echo "Release version from event: ${{ github.event.release.tag_name }}"
echo "release_version=${{ github.event.release.tag_name }}" | tee -a $GITHUB_OUTPUT
else
# Workflow run trigger - get the latest release tag
echo "Fetching latest release tag..."
LATEST_TAG=$(git describe --tags --abbrev=0)
echo "release_version=${LATEST_TAG}" | tee -a $GITHUB_OUTPUT
fi
check-esphome-names:
name: Check for Duplicate ESPHome Names
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: pip install pyyaml
- name: Check for duplicate ESPHome names
run: python3 scripts/check-esphome-names.py ${{ env.FIRMWARE_FILES_LIST }}
read-firmware-files:
name: Read Firmware Files List
runs-on: ubuntu-latest
outputs:
files: ${{ steps.read-files.outputs.files }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Read firmware files list
id: read-files
run: |
echo "files<<EOF" >> $GITHUB_OUTPUT
cat ${{ env.FIRMWARE_FILES_LIST }} | grep -v '^#' | grep -v '^$' | tee -a $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
build-firmware:
name: Build Firmware
needs:
- set-release-version
- check-esphome-names
- read-firmware-files
uses: esphome/workflows/.github/workflows/build.yml@2025.4.0
with:
files: ${{ needs.read-firmware-files.outputs.files }}
esphome-version: 2025.7.2
combined-name: buderus-km271
release-version: ${{ needs.set-release-version.outputs.release_version }}
upload-to-release:
name: Upload to Release
needs:
- build-firmware
- set-release-version
- read-firmware-files
uses: esphome/workflows/.github/workflows/upload-to-gh-release.yml@2025.4.0
with:
version: ${{ needs.set-release-version.outputs.release_version }}