Skip to content

Support OTA updating #255

Support OTA updating

Support OTA updating #255

Workflow file for this run

on:
push:
branches:
- master
- develop
pull_request:
branches:
- develop
types: [opened, reopened, synchronize]
workflow_call: # When another workflow invokes this one.
outputs:
matrix:
description: "Strategy matrix"
value: ${{ jobs.get-targets.outputs.matrix }}
workflow_dispatch: # Manually invoked by user.
name: ci-build
env:
NODE_VERSION: 16
PYTHON_VERSION: 3.12
OPENSHOCK_API_DOMAIN: api.shocklink.net
# OPENSHOCK_FW_VERSION:
# - If this is branch "master" or "develop", we use "0.0.0-master" or "0.0.0-develop" respectively.
# - All other scenarios we use "0.0.0-unknown", as we cannot guarantee SemVer compliance by accepting any branch name. So this is the safe option.
OPENSHOCK_FW_VERSION: ${{ (contains(fromJSON('["master","develop"]'), github.ref_name) && format('0.0.0-{0}', github.ref_name)) || '0.0.0-unknown' }}
OPENSHOCK_FW_COMMIT: ${{ github.sha }}
jobs:
# Read platformio.ini and extract all specific targets. See the referenced file for more info.
get-targets:
uses: ./.github/workflows/get-targets.yml
build-captive-portal:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
.github
WebUI
- uses: ./.github/actions/build-captive-portal
with:
node-version: ${{ env.NODE_VERSION }}
build-filesystem:
runs-on: ubuntu-latest
needs: build-captive-portal
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/build-filesystem
with:
python-version: ${{ env.PYTHON_VERSION }}
skip-checkout: true
build-firmware:
runs-on: ubuntu-latest
needs: get-targets
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.get-targets.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/build-firmware
with:
python-version: ${{ env.PYTHON_VERSION }}
board: ${{ matrix.board }}
skip-checkout: true
merge-images:
runs-on: ubuntu-latest
needs: [get-targets, build-filesystem, build-firmware]
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.get-targets.outputs.matrix )}}
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
.github
scripts
boards
chips
- uses: ./.github/actions/merge-images
with:
python-version: ${{ env.PYTHON_VERSION }}
board: ${{ matrix.board }}
skip-checkout: true
cdn-upload-firmware:
runs-on: ubuntu-latest
needs: [get-targets, merge-images]
environment: cdn-firmware-r2
strategy:
fail-fast: true
matrix: ${{ fromJson(needs.get-targets.outputs.matrix )}}
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
.github
# Set up rclone for CDN uploads.
- uses: ./.github/actions/cdn-prepare
with:
cf-account-id: ${{ vars.CF_ACCOUNT_ID }}
cf-access-key-id: ${{ vars.CF_ACCESS_KEY_ID }}
cf-secret-access-key: ${{ secrets.CF_SECRET_ACCESS_KEY }}
# Upload firmware to CDN.
- uses: ./.github/actions/cdn-upload-firmware
with:
cf-bucket: ${{ vars.CF_BUCKET }}
board: ${{ matrix.board }}
version: ${{ github.ref_name }}
release-channel: ${{ 'develop' }}
cdn-bump-version:
runs-on: ubuntu-latest
needs: [cdn-upload-firmware]
environment: cdn-firmware-r2
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
.github
# Set up rclone for CDN uploads.
- uses: ./.github/actions/cdn-prepare
with:
cf-account-id: ${{ vars.CF_ACCOUNT_ID }}
cf-access-key-id: ${{ vars.CF_ACCESS_KEY_ID }}
cf-secret-access-key: ${{ secrets.CF_SECRET_ACCESS_KEY }}
# Upload firmware to CDN.
- uses: ./.github/actions/cdn-bump-version
with:
cf-bucket: ${{ vars.CF_BUCKET }}
version: ${{ github.ref_name }}
release-channel: ${{ 'develop' }}
done:
runs-on: ubuntu-latest
needs: [build-filesystem, merge-images]
steps:
- run: echo "Done"