Feature: SolarRouterNG project #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json | |
name: Build | |
on: | |
workflow_dispatch: | |
# schedule: | |
# - cron: "0 1 * * *" | |
push: | |
branches: [ | |
"main", | |
"dev", | |
"*" | |
] | |
tags: ["v*"] | |
paths-ignore: | |
[ | |
"docs/**", | |
"**/*.md", | |
"site/**", | |
"**/portal/**", | |
"tools/**", | |
"test/**", | |
".github/workflows/website.yml", | |
".github/workflows/dependabot.yml", | |
".github/dependabot.yml", | |
".github/FUNDING.yml", | |
] | |
pull_request: | |
paths-ignore: | |
[ | |
"docs/**", | |
"**/*.md", | |
"site/**", | |
"**/portal/**", | |
"tools/**", | |
"test/**", | |
".github/workflows/website.yml", | |
".github/workflows/dependabot.yml", | |
".github/dependabot.yml", | |
".github/FUNDING.yml", | |
] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
cpplint: | |
name: cpplint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Cache | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-cpplint | |
path: ~/.cache/pip | |
- name: Pyhton | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: cpplint | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade cpplint | |
cpplint \ | |
--repository=. \ | |
--recursive \ | |
--filter=-whitespace/line_length,-whitespace/braces,-whitespace/comments,-runtime/indentation_namespace,-whitespace/indent,-readability/braces,-whitespace/newline,-readability/todo,-build/c++11 \ | |
--exclude=lib/ElegantOTAPro \ | |
--exclude=lib/ESPDASH \ | |
--exclude=lib/ESPDASHPro \ | |
--exclude=lib/WebSerialLite \ | |
lib \ | |
include \ | |
src | |
pio_envs: | |
name: Get PlatformIO Envs | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Cache | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-pio_envs | |
path: ~/.cache/pip | |
- name: Pyhton | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: PlatformIO | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade platformio | |
- name: Get Envs | |
id: envs | |
run: | | |
rm -f platformio_override.ini | |
echo "pio_name=$(pio project config --json-output | jq -cr '.[0][1][0][1]')" >> $GITHUB_OUTPUT | |
echo "pio_default_envs=$(pio project config --json-output | jq -cr '.[0][1][1][1]')" >> $GITHUB_OUTPUT | |
outputs: | |
pio_name: ${{ steps.envs.outputs.pio_name }} | |
pio_default_envs: ${{ steps.envs.outputs.pio_default_envs }} | |
YaSolR: | |
name: YaSolR | |
runs-on: ubuntu-latest | |
needs: [cpplint, pio_envs] | |
strategy: | |
matrix: | |
environment: ${{ fromJSON(needs.pio_envs.outputs.pio_default_envs) }} | |
steps: | |
- name: Checkout | |
if: ${{ startsWith(matrix.environment, 'oss-') || startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
uses: actions/checkout@v4 | |
- name: Get Tags | |
if: ${{ github.repository == 'mathieucarbou/YaSolR' }} | |
run: git fetch --force --tags origin | |
- name: Remove Pro Content | |
if: ${{ startsWith(matrix.environment, 'oss-') }} | |
run: | | |
rm -f -r -v \ | |
lib/ElegantOTAPro \ | |
lib/ESPDASH/portal \ | |
lib/ESPDASHPro \ | |
lib/WebSerialLite \ | |
site \ | |
docs \ | |
make-oss.sh | |
- name: Remove OSS Content | |
if: ${{ startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
run: | | |
rm -f -r -v \ | |
lib/ESPDASH | |
- name: Cache PlatformIO | |
if: ${{ startsWith(matrix.environment, 'oss-') || startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-pio | |
path: | | |
~/.cache/pip | |
~/.platformio | |
- name: Cache YaSolR OSS | |
if: ${{ startsWith(matrix.environment, 'oss-') }} | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-YaSolR-oss | |
path: .pio/libdeps | |
- name: Cache YaSolR Pro | |
if: ${{ startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-YaSolR-pro | |
path: .pio/libdeps | |
- name: Python | |
if: ${{ startsWith(matrix.environment, 'oss-') || startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Build | |
if: ${{ startsWith(matrix.environment, 'oss-') || startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade platformio | |
pio run -e ${{ matrix.environment }} | |
ref="${{ github.ref_name }}" | |
ref="${ref//\//_}" | |
mv .pio/build/${{ matrix.environment }}/firmware.bin ./${{ needs.pio_envs.outputs.pio_name }}-$ref-${{ matrix.environment }}.bin | |
mv .pio/build/${{ matrix.environment }}/firmware.factory.bin ./${{ needs.pio_envs.outputs.pio_name }}-$ref-${{ matrix.environment }}.factory.bin | |
- name: Upload | |
if: ${{ startsWith(matrix.environment, 'oss-') || startsWith(matrix.environment, 'pro-') && github.repository == 'mathieucarbou/YaSolR' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.environment }} | |
if-no-files-found: error | |
path: | | |
*.bin | |
release: | |
name: Release | |
if: ${{ github.repository == 'mathieucarbou/YaSolR' && github.event_name != 'pull_request' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) }} | |
runs-on: ubuntu-latest | |
needs: [cpplint, YaSolR] | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- name: Move | |
run: | | |
ls -R artifacts | |
find artifacts -name '*.bin' -exec mv {} artifacts/ \; | |
- name: Pre-Release | |
if: ${{ github.ref == 'refs/heads/main' }} | |
uses: mathieucarbou/marvinpinto-action-automatic-releases@latest | |
with: | |
repo_token: "${{ secrets.ACCESS_TOKEN }}" | |
automatic_release_tag: latest | |
prerelease: true | |
title: Pre-release Builds | |
files: | | |
artifacts/*.bin | |
- name: Changelog | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
id: github_release | |
uses: mikepenz/release-changelog-builder-action@v4 | |
with: | |
failOnError: true | |
commitMode: true | |
configuration: ".github/workflows/release-notes-config.json" | |
env: | |
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} | |
- name: Release | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
body: ${{steps.github_release.outputs.changelog}} | |
draft: false | |
files: artifacts/*.bin | |
env: | |
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} |