Sync edgetx to Gitea

This commit is contained in:
2026-08-03 16:37:20 +08:00
commit 14eb5a3fb9
5364 changed files with 2835009 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
name: 'Auto-close marked issues'
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
with:
# Issue closure message
close-issue-message: 'This issue has been closed due to no activity in over four weeks after having been marked as closure pending.'
# Issue close reason
close-issue-reason: not_planned
# Do not mark issues or PRs as stale automaticaly
days-before-stale: -1
# Close issue/PR if no activity for four weeks after closure pending warning
days-before-close: 28
# Do not auto close PRs
days-before-pr-close: -1
# Do not auto-close an issue if it is assigned to a milestone
exempt-all-issue-milestones: true
# Stale issue label
stale-issue-label: 'closing 🚪'
+138
View File
@@ -0,0 +1,138 @@
---
name: Run tests and package firmware
on:
push:
branches:
- 'main'
- '[0-9]+.[0-9]+'
tags:
- v*
paths: &trigger-paths
- '.github/workflows/build_fw.yml'
- 'cmake/**'
- 'radio/**'
- 'tools/build-gh.sh'
- '.gitmodules'
- 'CMakeLists.txt'
pull_request:
paths: *trigger-paths
jobs:
test:
name: Run tests
runs-on: ubuntu-latest
if: |
github.event_name != 'pull_request' ||
!contains(github.event.pull_request.labels.*.name, 'ci: skip-fw')
strategy:
matrix:
target:
- x9dp2019;x9e
- tx15
- tx16s
- tx16smk3
- nv14
- el18
- pl18
- pl18ev
- t12max;t14
- t15
- t16
- t18
- t20;t20v2
- x10
- x12s
- mt12;gx12
- nb4p
- st16
- t15pro
- pa01
container:
image: ghcr.io/edgetx/edgetx-dev:latest
volumes:
- ${{ github.workspace }}:/src
steps:
- name: Check out the repo
uses: actions/checkout@v6
with:
submodules: recursive
- name: Test ${{ matrix.target }}
env:
FLAVOR: ${{ matrix.target }}
CMAKE_BUILD_PARALLEL_LEVEL: 4
run: |
echo "Running commit tests"
./tools/commit-tests.sh
build:
name: Run builds
needs: test
runs-on: ubuntu-latest
if: |
github.event_name != 'pull_request' ||
!contains(github.event.pull_request.labels.*.name, 'ci: skip-fw')
strategy:
matrix:
target:
- nv14;el18
- pl18;pl18ev
- pl18u;pa01
- t15;t16
- t14;t18;mt12
- zorro;pocket;commando8
- tprov2;tpros;bumblebee
- mt12;gx12;t20;t20v2
- t12max;tx12mk2;boxer
- tx15;tx16s
- x12s;f16
- v12;v14;v16
- x10;x10express
- x7access;x9dp2019;x9e;x9e-hall
- nb4p;st16
- tx16smk3;t14;t15pro
container:
image: ghcr.io/edgetx/edgetx-dev:latest
volumes:
- ${{ github.workspace }}:/src
steps:
- name: Check out the repo
uses: actions/checkout@v6
with:
submodules: recursive
- name: Build ${{ matrix.target }}
env:
FLAVOR: ${{ matrix.target }}
CMAKE_BUILD_PARALLEL_LEVEL: 4
run: |
echo "Running firmware build"
./tools/build-gh.sh
- name: Upload ${{ matrix.target }}
uses: actions/upload-artifact@v7
with:
name: firmware-${{ matrix.target }}
path: |
fw.json
LICENSE
*.bin
*.uf2
retention-days: 15
if-no-files-found: error
package:
name: Package firmwares
needs: build
runs-on: ubuntu-latest
steps:
- name: Compose release filename
run: echo "artifact_name=edgetx-firmware-${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: Merge firmware artifact packages
uses: actions/upload-artifact/merge@v7
with:
name: "${{ env.artifact_name }}"
pattern: firmware-*
delete-merged: true
retention-days: 15
+183
View File
@@ -0,0 +1,183 @@
name: Companion
on:
push:
branches:
- 'main'
tags:
- v*
paths:
- '.github/workflows/companion.yml'
- 'companion/**'
- 'tools/build-companion.sh'
- 'tools/build-wasm-modules.sh'
- 'cmake/wasm/CMakeLists.txt'
pull_request:
paths:
- '.github/workflows/companion.yml'
- 'companion/**'
- 'tools/build-companion.sh'
- 'tools/build-wasm-modules.sh'
- 'cmake/wasm/CMakeLists.txt'
workflow_dispatch:
inputs:
target:
description: 'Build target'
required: true
default: 'all'
type: choice
options:
- all
- linux
- macos
- windows
- wasm
jobs:
modules:
name: WASM Modules (${{ matrix.group.id }})
runs-on: macos-15
strategy:
matrix:
group:
- id: color-1
target: [nv14, el18, pl18, pl18ev]
- id: color-2
target: [pl18u, t15, t16, t18]
- id: bw-1
target: [zorro, pocket, mt12, commando8, tprov2, tpros, bumblebee, t14]
- id: bw-2
target: [mt12, gx12, t20, t20v2, t12max, tx12mk2, boxer]
- id: color-3
target: [tx15, tx16s, x12s, f16]
- id: mixed-1
target: [v12, v14, v16, x10, x10express]
- id: bw-3
target: [x7access, x9dp2019, x9e, x9e-hall]
- id: color-4
target: [nb4p, st16, pa01]
- id: color-5
target: [t15pro, tx16smk3]
steps:
- name: Check out the repo
uses: actions/checkout@v5
with:
submodules: true
- name: Setup Python Dependencies
uses: ./.github/actions/python_dependencies
- name: Setup WASI SDK
uses: ./.github/actions/wasi_sdk
- name: Build modules
shell: bash
env:
FLAVOR: ${{ join(matrix.group.target, ';') }}
CMAKE_BUILD_TYPE: 'Release'
run: |
mkdir output && \
tools/build-wasm-modules.sh "$(pwd)" "$(pwd)/output/"
- name: Archive production artifacts
uses: actions/upload-artifact@v7
with:
name: wasm-modules-${{ matrix.group.id }}
path: ${{github.workspace}}/output
if-no-files-found: error
retention-days: 15
build-linux:
name: Linux Companion
runs-on: ubuntu-latest
needs: modules
if: inputs.target == 'all' || inputs.target == 'linux' || inputs.target == ''
container:
image: ghcr.io/edgetx/edgetx-dev:latest
volumes:
- ${{ github.workspace }}:/src
steps:
- name: Check out the repo
uses: actions/checkout@v5
with:
submodules: recursive
- name: Download WASM modules
uses: actions/download-artifact@v7
with:
pattern: wasm-modules-*
path: wasm-modules
merge-multiple: true
- name: Setup and Build
uses: ./.github/actions/build_companion
with:
os: 'linux'
build-macos:
name: macOS Companion
runs-on: macos-15
needs: modules
if: inputs.target == 'all' || inputs.target == 'macos' || inputs.target == ''
env:
CMAKE_OSX_ARCHITECTURES: 'x86_64;arm64'
CMAKE_OSX_DEPLOYMENT_TARGET: '11.0'
steps:
- name: Check out the repo
uses: actions/checkout@v5
with:
submodules: recursive
- name: Download WASM modules
uses: actions/download-artifact@v7
with:
pattern: wasm-modules-*
path: wasm-modules
merge-multiple: true
- name: Setup and Build
uses: ./.github/actions/build_companion
with:
os: 'macos'
qt-arch: 'clang_64'
build-win64:
name: Windows Companion
runs-on: windows-2022
needs: modules
if: inputs.target == 'all' || inputs.target == 'windows' || inputs.target == ''
env:
CMAKE_GENERATOR: 'Ninja'
CXX: 'clang++'
CC: 'clang'
defaults:
run:
shell: bash
steps:
- name: Check out the repo
uses: actions/checkout@v5
with:
submodules: recursive
- name: Download WASM modules
uses: actions/download-artifact@v7
with:
pattern: wasm-modules-*
path: wasm-modules
merge-multiple: true
- name: Setup and Build
uses: ./.github/actions/build_companion
with:
os: 'win64'
qt-arch: 'win64_msvc2022_64'
+55
View File
@@ -0,0 +1,55 @@
name: Deploy Documentation
on:
push:
branches:
- main
paths:
- 'docs/**'
- 'mkdocs.yml'
- 'docs-requirements.txt'
- '.github/workflows/docs.yml'
tags:
- 'v[0-9]+.[0-9]+.[0-9]+' # release tags only, not -rc
pull_request:
paths:
- 'docs/**'
- 'mkdocs.yml'
- 'docs-requirements.txt'
- '.github/workflows/docs.yml'
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Configure git for mike
if: github.event_name != 'pull_request'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Build docs (PR check)
if: github.event_name == 'pull_request'
run: uv run --with-requirements docs-requirements.txt mkdocs build --strict
- name: Deploy as latest (main branch)
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: uv run --with-requirements docs-requirements.txt mike deploy --push --update-aliases latest
- name: Deploy release version
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: |
# Extract minor version from tag, e.g. v2.11.2 -> v2.11
VERSION=$(echo "${GITHUB_REF_NAME}" | sed 's/\.[0-9]*$//')
uv run --with-requirements docs-requirements.txt mike deploy --push --update-aliases "${VERSION}" stable
+148
View File
@@ -0,0 +1,148 @@
---
name: Build and deploy nightly release
on:
schedule:
- cron: '0 2 * * *' # run at 2 AM UTC
workflow_dispatch:
concurrency:
group: 'nightly'
cancel-in-progress: true
jobs:
build:
name: Build firmware
runs-on: ubuntu-latest
strategy:
matrix:
target:
- nv14;el18
- pl18;pl18ev;pl18u
- pa01
- t12max
- t15;t16;t18
- zorro;pocket;mt12;commando8
- tprov2;tpros;bumblebee
- t20;t20v2;t14
- tx12mk2;boxer;gx12
- tx16s
- tx16smk3
- f16
- v16
- x10;x10express
- x12s
- x7access
- x9dp2019
- x9e;x9e-hall
- mt12
- nb4p
- st16
- tx15
- t15pro
container:
image: ghcr.io/edgetx/edgetx-dev:latest
volumes:
- ${{ github.workspace }}:/src
steps:
- name: Check out the repo
uses: actions/checkout@v6
with:
submodules: recursive
- name: Build firmware ${{ matrix.target }}
env:
FLAVOR: ${{ matrix.target }}
EDGETX_VERSION_SUFFIX: nightly
CMAKE_BUILD_PARALLEL_LEVEL: 4
run: ./tools/build-gh.sh
- name: Package firmware ${{ matrix.target }}
uses: actions/upload-artifact@v7
with:
name: edgetx-firmware-nightly-${{ matrix.target }}
path: |
fw.json
LICENSE
*.bin
*.uf2
retention-days: 15
if-no-files-found: error
deploy:
name: Deploy release
runs-on: ubuntu-latest
needs: build
permissions:
contents: write
steps:
- name: Check out the repo
uses: actions/checkout@v6
with:
fetch-depth: 0 # Need full history for changelog
- name: Download artifacts
uses: actions/download-artifact@v8
with:
pattern: edgetx-firmware-nightly-*
path: edgetx-firmware-nightly
merge-multiple: true
- name: Compose release filename
run: |
echo "release_filename=edgetx-firmware-nightly-${GITHUB_SHA::8}.zip" >> $GITHUB_ENV
echo "build_date=$(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_ENV
echo "old_nightly_sha=$(git rev-parse nightly)" >> $GITHUB_ENV
- name: Zip release file
uses: montudor/action-zip@v1
with:
args: zip -qq -j -r ${{ env.release_filename }} ./edgetx-firmware-nightly
- name: Generate changelog
id: changelog
uses: orhun/git-cliff-action@v4
with:
config: cliff.toml
args: --verbose --strip all nightly..HEAD
env:
OUTPUT: CHANGELOG.md
- name: Update nightly tag
run: |
git config user.name github-actions
git config user.email github-actions@github.com
git tag -f nightly
git push -f origin nightly
- name: Delete previous nightly release
run: |
# Delete the existing nightly release to avoid accumulating assets
gh release delete nightly --yes || true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy nightly release
uses: softprops/action-gh-release@v2 #softprops/action-gh-release/pull/670 or v3 to clear nodejs log warning
with:
tag_name: nightly
prerelease: true
name: "Nightly Build"
body: |
## Automated Nightly Build
**Commit:** ${{ github.sha }}
**Built:** ${{ env.build_date }}
This is an automated nightly build of EdgeTX firmware. These builds are for testing purposes and may contain bugs. Please be sure to report any issues you encounter!
### Installation
Download `${{ env.release_filename }}` and extract the firmware file for your radio model, or use [EdgeTX Buddy](https://buddy.edgetx.org/#/flash?version=nightly&source=releases&filters=includePrereleases) with the "Include pre-releases" Filter option enabled so you can select the "Nightly" version.
## Changes since last nightly build
${{ steps.changelog.outputs.content }}
---
**Full Diff:** https://github.com/${{ github.repository }}/compare/${{ env.old_nightly_sha }}...${{ github.sha }}
files: |
${{ env.release_filename }}
+214
View File
@@ -0,0 +1,214 @@
name: Create Release Draft
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to create release for'
required: true
type: string
permissions:
contents: write
jobs:
release:
name: Create draft release
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Check out the repo
uses: actions/checkout@v6
with:
ref: ${{ inputs.tag }}
fetch-depth: 0
- name: Clean up any previous drafts for this version
run: |
TAG="${{ inputs.tag }}"
if gh release view "$TAG" --json isDraft --jq '.isDraft' 2>/dev/null | grep -q true; then
echo "Deleting existing draft release for tag: $TAG"
gh release delete "$TAG" --yes
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Extract version info
id: version
continue-on-error: false
run: |
VERSION="${{ inputs.tag }}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
# Extract codename from CMakeLists.txt
if [ -f "CMakeLists.txt" ]; then
CODENAME=$(grep -oP 'set\(CODENAME\s+"\K[^"]+' CMakeLists.txt || echo "")
if [ -n "$CODENAME" ]; then
if [ "$CODENAME" = "dev" ]; then
echo "::error::CODENAME is set to 'dev' for a tagged release! Please update the CODENAME in CMakeLists.txt before creating a release."
exit 1
fi
echo "codename=$CODENAME" >> $GITHUB_OUTPUT
echo "has_codename=true" >> $GITHUB_OUTPUT
echo "Found codename: $CODENAME"
else
echo "has_codename=false" >> $GITHUB_OUTPUT
echo "No codename found"
fi
else
echo "has_codename=false" >> $GITHUB_OUTPUT
echo "CMakeLists.txt not found"
fi
- name: Install git-cliff
run: |
VERSION=$(wget -qO- https://api.github.com/repos/orhun/git-cliff/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//')
FILENAME="git-cliff-${VERSION}-x86_64-unknown-linux-gnu.tar.gz"
wget -O git-cliff.tar.gz "https://github.com/orhun/git-cliff/releases/download/v${VERSION}/${FILENAME}"
tar -xzvf git-cliff.tar.gz
mv git-cliff-${VERSION}/git-cliff /usr/local/bin/
- name: Generate Changelog and Contributors List
id: changelog
run: |
# Find the previous tag relative to the input tag
PREV_TAG=$(git describe --tags --abbrev=0 "${{ inputs.tag }}^" 2>/dev/null || echo "")
if [ -z "$PREV_TAG" ]; then
echo "No previous tag found. Generating full history for ${{ inputs.tag }}"
RANGE="${{ inputs.tag }}"
CONTRIB_RANGE="${{ inputs.tag }}"
else
echo "Found previous tag: $PREV_TAG"
RANGE="$PREV_TAG..${{ inputs.tag }}"
CONTRIB_RANGE="$RANGE"
fi
# Generate the changelog using the explicit range
git-cliff $RANGE --strip all --output CHANGELOG.md
# Get unique contributors from the same commit range
CONTRIBUTORS=$(git log --format='%aN' $CONTRIB_RANGE 2>/dev/null | sort -u | sed 's/^/- /' || echo "")
# Combine
CHANGELOG_CONTENT=$(cat CHANGELOG.md)
{
echo "changelog<<EOF"
echo "$CHANGELOG_CONTENT"
if [ -n "$CONTRIBUTORS" ]; then
echo ""
echo "## Thank you to the following contributors who made this release possible!"
echo "$CONTRIBUTORS"
fi
echo "EOF"
} >> $GITHUB_OUTPUT
- name: Download all release artifacts
run: |
TAG="${{ inputs.tag }}"
COMMIT_SHA=$(git rev-parse "${TAG}^{commit}")
echo "Tag $TAG points to commit: $COMMIT_SHA"
# Get the latest successful run ID for each unique workflow
WORKFLOW_RUNS=$(gh run list --commit "$COMMIT_SHA" --status success --json workflowName,databaseId,createdAt --jq 'group_by(.workflowName) | map(sort_by(.createdAt) | last) | .[].databaseId')
mkdir -p release-assets
for run_id in $WORKFLOW_RUNS; do
echo "Processing Run ID: $run_id"
gh run download "$run_id" --dir release-assets 2>/dev/null || true
done
cd release-assets
# Clean up: Delete any folders ending in "-logs" BEFORE we start zipping
echo "Cleaning up log artifacts..."
rm -rf *-logs/
# Package remaining folders into zips
for dir in */; do
# Ensure we are actually looking at a directory
[ -d "$dir" ] || continue
dir_name="${dir%/}"
echo "Processing folder: $dir_name"
# Check for existing zip inside (e.g. if firmware was already zipped)
INNER_ZIP=$(find "$dir" -maxdepth 1 -name "*.zip" | head -n 1)
if [ -n "$INNER_ZIP" ]; then
echo " Found existing zip, pulling it out..."
mv "$INNER_ZIP" "${dir_name}.zip"
else
echo " No zip found, creating ${dir_name}.zip..."
(cd "$dir" && zip -r "../${dir_name}.zip" .)
fi
# Remove the folder after zipping/moving
rm -rf "$dir"
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: List release assets
run: |
echo "Release assets to upload:"
ls -lh release-assets/*.zip
- name: Create draft release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag }}
draft: true
prerelease: ${{ contains(inputs.tag, '-rc') || contains(inputs.tag, '-beta') || contains(inputs.tag, '-alpha') }}
name: EdgeTX "${{ steps.version.outputs.codename }}" ${{ steps.version.outputs.version }}
body: |
We are pleased to offer EdgeTX "${{ steps.version.outputs.codename }}" ${{ steps.version.outputs.version }}.
${{ (contains(inputs.tag, '-rc') || contains(inputs.tag, '-beta') || contains(inputs.tag, '-alpha')) && '> [!WARNING]
> As this is a pre-release, it is virtually guaranteed there will still be some minor issues that need resolving before final release - some may be documented already under "known issues" section of these release notes or the associated tracking issue. During pre-releases, the matching SD card pack and voice pack versions to use are those marked/tagged ''Latest''.
>
> We **need** _your_ help in testing this release to ensure there are no major bugs or faults that will cause problems during flight. Please ensure you back up your model and radio settings before updating, fully bench-test your models after updating, and report any issues you encounter. It is only with your feedback and testing by you, our community (and the assistance provided by partner manufacturers) which will allow us to identify and squash both new and old bugs, and progress onto a stable release version!! We simply cannot do this without you! :hugs: :beers:' || '' }}
> [!WARNING]
> If you are using a STM32 F2 based radio, *stop right now*, this release is not for you! EdgeTX v2.11 is the last release series to support these radios. Check [this list](https://hackmd.io/@edgetx/B12oQyQKye) if you are unsure if this affects you. Because of this, EdgeTX v2.11 will continue to be supported alongside 2.12, 3.0, etc., with a focus on bug fixes.
> [!WARNING]
> Radios based on STM32H7 MCUs update differently to older radios. Do **not** use the "Flash via USB" option in EdgeTX Buddy with them (yet). To update radios such as the Flysky PA01 & ST16, Jumper T15 Pro, RM TX15 and RM TX16S MK3, please follow the instructions in the [EdgeTX Manual](https://manual.edgetx.org/installing-and-updating-edgetx/updating-your-stm32h7-radio).
> [!NOTE]
> For MacOS users, Companion is now only compiled for MacOS 12 and above. Stay with v2.10.5 or earlier if you need support for an older version of MacOS.
> [!NOTE]
> **Migration Information**
> - If you have an old OpenTX Companion (`.otx`) file you need to convert or open, you will need to use EdgeTX Companion v2.10 or earlier.
> - If you wish to upgrade from OpenTX 2.3 or EdgeTX 2.4/2.5, you must use either EdgeTX v2.8.x firmware or EdgeTX Companion v2.10.x.
>
> See the [EdgeTX Manual](https://manual.edgetx.org/installing-and-updating-edgetx) for more information.
## Changes
${{ steps.changelog.outputs.changelog }}
## Supported radios
The full list of supported radios and their support status can be viewed [here on the EdgeTX website](https://edgetx.org/supportedradios).
## Installation Guide
https://manual.edgetx.org/installing-and-updating-edgetx
## Flash firmware via Chrome based browser
https://buddy.edgetx.org/#/flash?version=${{ steps.version.outputs.version }}
## Language and Custom builds
[CloudBuild option in EdgeTX Buddy](https://buddy.edgetx.org/) will allow you build your own (supported) language firmware, with just a few clicks. Additionally, EdgeTX Companion also has some support for CloudBuild, and will automatically fetch firmware for a supported language when you use the "Update components" option. But you can also build your own firmware online [following this guide](https://github.com/EdgeTX/edgetx/wiki/Building-radio-firmware-in-a-web-browser-with-GitHub-CodeSpaces), request a specific build at TODO or ask on Discord for someone to build one for you.
## Known Limitations and Issues
${{ (contains(inputs.tag, '-rc') || contains(inputs.tag, '-beta') || contains(inputs.tag, '-alpha')) && '> [!WARNING]
- Please check TODO during the release candidate phase for any other release candidate-specific issues and status of fixes.' || '' }}
## UI/UX behavioral changes and/or new capabilities:
files: release-assets/*.zip
fail_on_unmatched_files: true
+50
View File
@@ -0,0 +1,50 @@
name: Sync from EdgeTX upstream
on:
schedule:
- cron: '0 2 * * 1' # Weekly on Monday at 2 AM UTC
workflow_dispatch: # Manual trigger option
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.SYNC_PAT }}
- name: Configure git
run: |
git config user.name "EdgeTX Sync Bot"
git config user.email "sync-bot@edgetx.org"
- name: Sync branches from upstream (hard reset)
env:
BRANCHES: "main 2.11" # Add/modify branches here as needed
run: |
git remote add upstream https://github.com/EdgeTX/edgetx.git
git fetch upstream
for branch in $BRANCHES; do
echo "=== Syncing branch: $branch ==="
# Check if upstream has this branch
if ! git ls-remote --heads upstream | grep -q "refs/heads/$branch"; then
echo "⚠️ Branch $branch does not exist in upstream, skipping..."
continue
fi
# Hard reset to upstream (creates exact copy with same SHA)
git checkout -B $branch upstream/$branch
# Force push to origin
git push origin $branch --force
echo "✓ Branch $branch synced (SHA: $(git rev-parse HEAD))"
done
echo ""
echo "=== Sync Complete ==="
echo "All specified branches are now exact copies of upstream"
+31
View File
@@ -0,0 +1,31 @@
---
name: Validate fw.json
on:
push:
branches:
- 'main'
- '[0-9]+.[0-9]+'
tags:
- v*
paths:
- 'fw.json'
pull_request:
branches:
- 'main'
- '[0-9]+.[0-9]+'
paths:
- 'fw.json'
workflow_dispatch:
jobs:
json-validate:
name: Validate fw.json file
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Validate fw.json syntax and schema
run: python3 tools/validate-json.py --syntax-only
- name: Validate fw.json alphabetical order
run: python3 tools/validate-json.py --order-only
+41
View File
@@ -0,0 +1,41 @@
name: Validate hw_defs
on:
push:
branches:
- 'main'
- '[0-9]+.[0-9]+'
paths:
- 'radio/util/hw_defs/**'
- 'radio/src/boards/hw_defs/**'
pull_request:
paths:
- 'radio/util/hw_defs/**'
- 'radio/src/boards/hw_defs/**'
workflow_dispatch:
jobs:
validate:
name: Validate hw_defs
runs-on: ubuntu-latest
defaults:
run:
working-directory: radio/util/hw_defs
steps:
- name: Check out the repo
uses: actions/checkout@v6
- name: Set up uv
uses: astral-sh/setup-uv@v7
- name: Install Python dependencies
working-directory: .
run: uv venv && uv pip install -r requirements.txt
- name: Check Python script syntax
run: uv run python3 -m py_compile *.py
- name: Validate JSON schemas
run: uv run python3 json_validator.py ../../src/boards/hw_defs
- name: Test template generation (all boards x all templates)
run: uv run python3 test_templates.py ../../src/boards/hw_defs