this updates the partition scheme for devices with 4 MB of flash memory to have only a single app partition, doubling its size, but sacrificing their OTA update capability. the replacement environment for "generic_esop32" is called "generic_esp32_4mb_no_ota". the new default partition scheme is targeted for devices with at least 8 MB of flash memory. the previous two app partitions are merged into one, and one additional app partition of the same new size is added to the back of the table. the change preserves the littlefs partition (position and size), allowing for upgrades without loosing the configuration. another new environment is added, called "generic_esp32_8mb", which uses the new default partition layout. environment "generic" is removed. it was merely a variant of "generic_esp32" with some pins pre-defined. we want users to install a pin_mapping.json and use the generic firmwares. environments for boards that have no version with at least 8 MB of flash memory are setup using the 4 MB partition layout (no OTA updates). all users must flash the factory.bin for their respective environment using esptool (or compatible software) using the USB port of their board. in other words: updating to the new partition scheme using an OTA update is NOT possible. hint: the ESP32-S3 builds have a smaller code footprint. this means ESP32-S3 boards can be updated using OTA without updating the partition layout on the devices for some unspecified time longer, i.e., until their firmware binary actually becomes too large for the old sketch partition size. the non-factory binary for generic_esp32_4mb_no_ota is NOT collected as an artifact. going forward, users must update using the factory binary and using the USB connection to their boards.
181 lines
5.4 KiB
YAML
181 lines
5.4 KiB
YAML
name: OpenDTU-OnBattery Build
|
|
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- docs/**
|
|
- '**/*.md'
|
|
branches:
|
|
- master
|
|
- development
|
|
tags-ignore:
|
|
- 'v**'
|
|
pull_request:
|
|
paths-ignore:
|
|
- docs/**
|
|
- '**/*.md'
|
|
|
|
jobs:
|
|
get_default_envs:
|
|
name: Gather Environments
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Cache pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
|
|
- name: Install PlatformIO
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install --upgrade platformio
|
|
|
|
- name: Get default environments
|
|
id: envs
|
|
run: |
|
|
echo "environments=$(pio project config --json-output | jq -cr '.[1][1][0][1]|split(",")')" >> $GITHUB_OUTPUT
|
|
|
|
outputs:
|
|
environments: ${{ steps.envs.outputs.environments }}
|
|
|
|
build:
|
|
name: Build Enviornments
|
|
runs-on: ubuntu-latest
|
|
needs: get_default_envs
|
|
strategy:
|
|
matrix:
|
|
environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Get tags
|
|
run: git fetch --force --tags origin
|
|
|
|
- name: Create and switch to a meaningful branch for pull-requests
|
|
if: github.event_name == 'pull_request'
|
|
run: |
|
|
OWNER=${{ github.repository_owner }}
|
|
NAME=${{ github.event.repository.name }}
|
|
ID=${{ github.event.pull_request.number }}
|
|
DATE=$(date +'%Y%m%d%H%M')
|
|
git switch -c ${OWNER}/${NAME}/pr${ID}-${DATE}
|
|
|
|
- name: Cache pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
|
|
- name: Cache PlatformIO
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.platformio
|
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
|
|
- name: Install PlatformIO
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install --upgrade platformio setuptools
|
|
|
|
- name: Setup Node.js and yarn
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "20"
|
|
cache: "yarn"
|
|
cache-dependency-path: "webapp/yarn.lock"
|
|
|
|
- name: Install WebApp dependencies
|
|
run: yarn --cwd webapp install --frozen-lockfile
|
|
|
|
- name: Build WebApp
|
|
run: yarn --cwd webapp build
|
|
|
|
- name: Build firmware
|
|
run: pio run -e ${{ matrix.environment }}
|
|
|
|
- name: Rename Firmware
|
|
run: mv .pio/build/${{ matrix.environment }}/firmware.bin .pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.bin
|
|
|
|
- name: Rename Factory Firmware
|
|
run: mv .pio/build/${{ matrix.environment }}/firmware.factory.bin .pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.factory.bin
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: opendtu-onbattery-${{ matrix.environment }}
|
|
path: |
|
|
.pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.bin
|
|
!.pio/build/generic_esp32_4mb_no_ota/opendtu-onbattery-generic_esp32_4mb_no_ota.bin
|
|
.pio/build/${{ matrix.environment }}/opendtu-onbattery-${{ matrix.environment }}.factory.bin
|
|
|
|
release:
|
|
name: Create Release
|
|
runs-on: ubuntu-latest
|
|
needs: [get_default_envs, build]
|
|
if: startsWith(github.ref, 'refs/tags/2')
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Get tags
|
|
run: git fetch --force --tags origin
|
|
|
|
- name: Get openDTU core release
|
|
run: |
|
|
echo "OPEN_DTU_CORE_RELEASE=$(git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags | grep 'refs/tags/v' | tail -1 | sed 's#.*/##' | sed 's/ .*//')" >> $GITHUB_ENV
|
|
|
|
- name: Create openDTU-core-release-Badge
|
|
uses: schneegans/dynamic-badges-action@v1.6.0
|
|
with:
|
|
auth: ${{ secrets.GIST_SECRET }}
|
|
gistID: 68b47cc8c8994d04ab3a4fa9d8aee5e6
|
|
filename: openDTUcoreRelease.json
|
|
label: based on original OpenDTU
|
|
message: ${{ env.OPEN_DTU_CORE_RELEASE }}
|
|
color: lightblue
|
|
|
|
- name: Build Changelog
|
|
id: github_release
|
|
uses: mikepenz/release-changelog-builder-action@v4
|
|
with:
|
|
failOnError: true
|
|
commitMode: true
|
|
configuration: ".github/workflows/config/release-notes-config.json"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
path: artifacts/
|
|
|
|
- name: Move all files to the same location
|
|
run: |
|
|
ls -R
|
|
cd artifacts
|
|
for i in */; do cp ${i}opendtu-onbattery-*.bin ./; done
|
|
|
|
- name: Create release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
body: ${{steps.github_release.outputs.changelog}}
|
|
draft: False
|
|
files: |
|
|
artifacts/*.zip, artifacts/*.bin
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|