Skip to content

Feature: SolarRouterNG project #1

Feature: SolarRouterNG project

Feature: SolarRouterNG project #1

Workflow file for this run

# 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 }}