name: PlatformIO CI # Only included into other workflows on: workflow_call: inputs: nightly_build: description: 'Flag to indicate this is a nightly build' required: false type: boolean default: false jobs: get_default_envs: name: Gather Environments runs-on: ubuntu-22.04 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.12' cache: 'pip' - name: Install PlatformIO run: pip install -r requirements.txt - name: Get default environments id: envs run: | echo "environments=$(pio project config --json-output | jq -cr '.[0][1][0][1]')" >> $GITHUB_OUTPUT outputs: environments: ${{ steps.envs.outputs.environments }} build: name: Builds runs-on: ubuntu-22.04 needs: get_default_envs strategy: fail-fast: false matrix: environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }} 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- - name: Cache PlatformIO uses: actions/cache@v4 with: path: ~/.platformio key: ${{ runner.os }}-${{ matrix.environment}} - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' - name: Install PlatformIO run: pip install -r requirements.txt - name: Build firmware env: WLED_RELEASE: True WLED_NIGHTLY_BUILD: ${{ inputs.nightly_build && 'true' || 'false' }} run: pio run -e ${{ matrix.environment }} - name: Rename Bin run: mv -v .pio/build/${{ matrix.environment }}/firmware.bin firmware-${{ matrix.environment }}.bin - uses: actions/upload-artifact@v4 with: name: firmware-${{ matrix.environment }} path: firmware-${{ matrix.environment }}.bin - uses: actions/upload-artifact@v4 if: startsWith(github.ref, 'refs/tags/') with: name: firmware-release-${{ matrix.environment }} path: build_output/release/*.bin