Sync edgetx to Gitea
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
name: 🐞 Bug
|
||||
description: File a bug report
|
||||
labels: ["bug 🪲", "triage"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
|
||||
Please note that this is not the place to make feature requests or ask for
|
||||
help. For this, please use the [Discord server](https://discord.gg/wF9wUKnZ6H) or [Discussion forum](https://github.com/EdgeTX/edgetx/discussions).
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing issue for this problem?
|
||||
description: Please search to see if an issue already exists for the bug you encountered.
|
||||
options:
|
||||
- label: I have searched the existing issues
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: component-affected
|
||||
attributes:
|
||||
label: What part of EdgeTX is the focus of this bug?
|
||||
description: Is it the radio firmware, companion software or something else?
|
||||
options:
|
||||
- Transmitter firmware
|
||||
- Companion
|
||||
- Simulator
|
||||
- Build system
|
||||
- Other (Please specify below)
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Current Behavior
|
||||
description: A clean and concise description of what you're experiencing.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: What is it that you expected to happen?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps To Reproduce
|
||||
description: Steps to reproduce the behavior.
|
||||
placeholder: |
|
||||
1. Push throttle up.
|
||||
2. Push throttle down.
|
||||
3. Flick SWC on and off three times.
|
||||
4. See error.
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of EdgeTX software are you running?
|
||||
options:
|
||||
- 2.12.1
|
||||
- 2.12.0
|
||||
- 2.11.5
|
||||
- 2.11.4
|
||||
- 2.11.3
|
||||
- 2.11.2
|
||||
- 2.11.1
|
||||
- 2.11.0
|
||||
- 2.10.6
|
||||
- 2.10.5
|
||||
- 2.10.4
|
||||
- 2.10.3
|
||||
- 2.10.2
|
||||
- 2.10.1
|
||||
- 2.10.0
|
||||
- 2.9.4
|
||||
- 2.8.5
|
||||
- Nightly (Please give date/commit below)
|
||||
- Other (Please specify below)
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: transmitter
|
||||
attributes:
|
||||
label: Transmitter
|
||||
description: |
|
||||
What transmitter are you using? You can pick more than one if this is
|
||||
affecting more than one transmitter.
|
||||
multiple: true
|
||||
options:
|
||||
- BetaFPV LiteRadio3 Pro
|
||||
- iFlight Commando8
|
||||
- Fatfish F16
|
||||
- Flysky EL18
|
||||
- Flysky NB4+
|
||||
- Flysky NV14
|
||||
- Flysky PA01
|
||||
- Flysky PL18/PL18EV
|
||||
- Flysky ST16
|
||||
- FrSky Q X7 / Q X7S (ACCST)
|
||||
- FrSky Q X7 / Q X7S (ACCESS)
|
||||
- FrSky X9D
|
||||
- FrSky X9D+
|
||||
- FrSky X9D+2019
|
||||
- FrSky X9E / X9E Hall
|
||||
- FrSky X9 Lite / Lite S
|
||||
- FrSky X10 / X10S (ACCST)
|
||||
- FrSky X10 Express / X10S Express (ACCESS)
|
||||
- FrSky X12
|
||||
- FrSky X-Lite / S / Pro
|
||||
- HelloRadioSky V12
|
||||
- HelloRadioSky V14
|
||||
- HelloRadioSky V16
|
||||
- Jumper T12
|
||||
- Jumper T14
|
||||
- Jumper T15
|
||||
- Jumper T15 Pro
|
||||
- Jumper T16
|
||||
- Jumper T18
|
||||
- Jumper T20/T20S
|
||||
- Jumper T20 V2
|
||||
- Jumper T-Lite
|
||||
- Jumper T-Pro
|
||||
- Jumper T-Pro V2
|
||||
- RadioMaster Boxer
|
||||
- RadioMaster GX12
|
||||
- RadioMaster MT12
|
||||
- RadioMaster Pocket
|
||||
- RadioMaster T8
|
||||
- RadioMaster TX12 / TX12MK2
|
||||
- RadioMaster TX15
|
||||
- RadioMaster TX16S / TX16SMK2
|
||||
- RadioMaster TX16S MK3
|
||||
- RadioMaster Zorro
|
||||
- Other (Please specify below)
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: os-type
|
||||
attributes:
|
||||
label: "Operating System (OS)"
|
||||
description: "If this relates to Companion or Simulator, what OSes are you are experiencing issues on?"
|
||||
multiple: true
|
||||
options:
|
||||
- Linux
|
||||
- macOS
|
||||
- Windows
|
||||
validations:
|
||||
required: false
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: "OS Version"
|
||||
description: "If this relates to Companion or Simulator, what OS version does this relate to?"
|
||||
placeholder: "i.e. 10, Ubuntu 20.04, Big Sur"
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: |
|
||||
Screenshots? References? Anything that will give us more context about the issue you are encountering!
|
||||
This includes if you are running customised firmware or have made hardware modifications to the transmitter
|
||||
which could have some bearing on the issue.
|
||||
|
||||
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,14 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: SD Card Pack - e.g. included Templates, Lua Widgets, Themes
|
||||
url: https://github.com/EdgeTX/edgetx-sdcard/issues/new
|
||||
about: If you have a request or issue with a Lua widget or something else that is part of the SD Card pack, please head over there to open an issue.
|
||||
- name: SD Card Voice Pack
|
||||
url: https://github.com/EdgeTX/edgetx-sdcard-sounds/issues/new/choose
|
||||
about: If you have a request or issue with the sound card packs, please head over there to open an issue.
|
||||
- name: Community Support
|
||||
url: https://discord.gg/wF9wUKnZ6H
|
||||
about: Please ask and answer support "how do I?" questions here.
|
||||
- name: Discussion Forum
|
||||
url: https://github.com/EdgeTX/edgetx/discussions
|
||||
about: Please raise ideas, ask questions, discuss feature suggestions and showcase stuff here.
|
||||
@@ -0,0 +1,54 @@
|
||||
name: 🚀 Feature Request / Enhancement
|
||||
description: Suggest an improvemnt to make EdgeTX even better!
|
||||
labels: ["enhancement ✨"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this feature request!
|
||||
|
||||
If your idea is still at the formulation stage, or you're not sure it would
|
||||
be useful to many users, you can raise it as a discussion topic under [Ideas](https://github.com/EdgeTX/edgetx/discussions/categories/ideas)
|
||||
or you can raise it on the [Discord server](https://discord.gg/wF9wUKnZ6H).
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Is there an existing issue for this feature request?
|
||||
description: |
|
||||
Please search to see if an issue already exists for a feature, or perhaps one similar.
|
||||
You can then comment and react so that we know know much interest there is in the feature request
|
||||
options:
|
||||
- label: I have searched the existing issues
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Is your feature request related to a problem?
|
||||
description: A clear and concise description of what the problem is.
|
||||
placeholder: I'm always frustrated when [...]
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe the solution you'd like
|
||||
description: A clear and concise description of what you want to happen.
|
||||
placeholder: It should do [...]
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Describe alternatives you've considered
|
||||
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||
placeholder: |
|
||||
1. [...]
|
||||
2. [...]
|
||||
3. [...]
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: |
|
||||
Add any other context, diagrams, illustations or screenshots about the feature request here.
|
||||
|
||||
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,64 @@
|
||||
name: 'Build Companion'
|
||||
inputs:
|
||||
os:
|
||||
description: 'OS / Architecture'
|
||||
required: true
|
||||
qt-version:
|
||||
description: 'Qt version'
|
||||
default: '6.9.3'
|
||||
qt-arch:
|
||||
description: 'Qt architecture'
|
||||
required: runner.os != 'Linux'
|
||||
sdl2-version:
|
||||
description: 'SDL2 version'
|
||||
default: '2.32.8'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
|
||||
- name: Install Qt
|
||||
if: runner.os != 'Linux'
|
||||
uses: jdpurcell/install-qt-action@v5
|
||||
env:
|
||||
AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini
|
||||
with:
|
||||
version: ${{ inputs.qt-version }}
|
||||
modules: 'qtmultimedia qtserialport'
|
||||
arch: ${{ inputs.qt-arch }}
|
||||
cache: true
|
||||
cache-key-prefix: 'install-qt-action-${{ inputs.qt-arch }}'
|
||||
|
||||
- name: Setup SDL2
|
||||
if: runner.os != 'Linux'
|
||||
shell: bash
|
||||
env:
|
||||
ACTION_PATH: ${{ github.action_path }}
|
||||
SDL2_VERSION: ${{ inputs.sdl2-version }}
|
||||
run: |
|
||||
"${ACTION_PATH}/setup-sdl2.sh" ${SDL2_VERSION}
|
||||
|
||||
- name: Setup MSVC
|
||||
if: runner.os == 'Windows'
|
||||
shell: pwsh
|
||||
run: ${{ github.action_path }}/setup-msvc.ps1
|
||||
|
||||
- name: Build
|
||||
shell: bash
|
||||
env:
|
||||
CMAKE_BUILD_TYPE: 'Release'
|
||||
run: |
|
||||
mkdir output && \
|
||||
CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \
|
||||
tools/build-companion.sh "$(pwd)" "$(pwd)/output/"
|
||||
|
||||
- name: Compose release filename
|
||||
run: echo "artifact_name=edgetx-cpn-${{ inputs.os }}-${GITHUB_REF##*/}" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Archive production artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: "${{ env.artifact_name }}"
|
||||
path: ${{github.workspace}}/output
|
||||
retention-days: 15
|
||||
@@ -0,0 +1,39 @@
|
||||
# setup-msvc.ps1
|
||||
# Runs vcvarsall.bat and exports only the new/changed environment
|
||||
# variables to GitHub Actions, avoiding clobbering existing ones.
|
||||
|
||||
param(
|
||||
[string]$Arch = "x64"
|
||||
)
|
||||
|
||||
# Find VS installation
|
||||
$vsWhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
$vsPath = & $vsWhere -latest -property installationPath
|
||||
$vcvars = Join-Path $vsPath "VC\Auxiliary\Build\vcvarsall.bat"
|
||||
|
||||
if (-not (Test-Path $vcvars)) {
|
||||
Write-Error "vcvarsall.bat not found at: $vcvars"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Snapshot environment before
|
||||
$before = @{}
|
||||
Get-ChildItem env: | ForEach-Object { $before[$_.Name] = $_.Value }
|
||||
|
||||
# Run vcvarsall.bat and import its environment into this process
|
||||
cmd /c "`"$vcvars`" $Arch && set" | ForEach-Object {
|
||||
if ($_ -match '^([^=]+)=(.*)$') {
|
||||
[System.Environment]::SetEnvironmentVariable($Matches[1], $Matches[2])
|
||||
}
|
||||
}
|
||||
|
||||
# Export only changed/new variables to GitHub Actions
|
||||
$count = 0
|
||||
Get-ChildItem env: | ForEach-Object {
|
||||
if ($before[$_.Name] -ne $_.Value) {
|
||||
"$($_.Name)=$($_.Value)" | Out-File -Append -Encoding utf8 $env:GITHUB_ENV
|
||||
$count++
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Exported $count environment variables to GITHUB_ENV"
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# setup-sdl2.sh
|
||||
# Downloads/installs SDL2 for Windows and macOS.
|
||||
# Linux is handled separately via a Docker container.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
VERSION="${1:?Usage: setup-sdl2.sh <version>}"
|
||||
|
||||
case "$RUNNER_OS" in
|
||||
Windows)
|
||||
ARCHIVE="SDL2-devel-${VERSION}-VC.zip"
|
||||
URL="https://github.com/libsdl-org/SDL/releases/download/release-${VERSION}/${ARCHIVE}"
|
||||
DEST="${RUNNER_TEMP}/SDL2"
|
||||
|
||||
echo "Downloading SDL2 ${VERSION} (Windows/MSVC)..."
|
||||
curl -fsSL -o "${RUNNER_TEMP}/${ARCHIVE}" "${URL}"
|
||||
unzip -q "${RUNNER_TEMP}/${ARCHIVE}" -d "${DEST}"
|
||||
|
||||
SDL2_ROOT="${DEST}/SDL2-${VERSION}"
|
||||
echo "SDL2_ROOT=${SDL2_ROOT}" >> "${GITHUB_ENV}"
|
||||
;;
|
||||
|
||||
macOS)
|
||||
ARCHIVE="SDL2-${VERSION}.dmg"
|
||||
URL="https://github.com/libsdl-org/SDL/releases/download/release-${VERSION}/${ARCHIVE}"
|
||||
|
||||
echo "Downloading SDL2 ${VERSION} (macOS framework)..."
|
||||
curl -fsSL -o "${RUNNER_TEMP}/${ARCHIVE}" "${URL}"
|
||||
|
||||
hdiutil attach "${RUNNER_TEMP}/${ARCHIVE}" -quiet -mountpoint "${RUNNER_TEMP}/sdl2-mnt"
|
||||
sudo cp -R "${RUNNER_TEMP}/sdl2-mnt/SDL2.framework" /Library/Frameworks/
|
||||
hdiutil detach "${RUNNER_TEMP}/sdl2-mnt" -quiet
|
||||
;;
|
||||
|
||||
Linux)
|
||||
echo "Skipping — SDL2 is provided by the Docker container"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "::error::Unsupported RUNNER_OS: ${RUNNER_OS}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "SDL2 ${VERSION} setup complete for ${RUNNER_OS}"
|
||||
@@ -0,0 +1,17 @@
|
||||
name: 'Setup WASI SDK'
|
||||
inputs:
|
||||
python-version:
|
||||
description: 'Python version'
|
||||
default: '3.13'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: ${{ inputs.python-version }}
|
||||
cache: 'pip' # caching pip dependencies
|
||||
|
||||
- run: python3 -m pip install -r requirements.txt
|
||||
shell: bash
|
||||
@@ -0,0 +1,20 @@
|
||||
name: 'Setup WASI SDK'
|
||||
inputs:
|
||||
arch:
|
||||
description: 'OS / Architecture (ex: arm64-macos)'
|
||||
default: 'arm64-macos'
|
||||
version:
|
||||
description: 'SDK version'
|
||||
default: '25'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
|
||||
- name: Install WASI SDK
|
||||
if: steps.cache-wasi-sdk.outputs.cache-hit != 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir /tmp/wasi-sdk
|
||||
curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ inputs.version }}/wasi-sdk-${{ inputs.version }}.0-${{ inputs.arch }}.tar.gz | tar xz --strip-components 1 -C /tmp/wasi-sdk
|
||||
sudo mv /tmp/wasi-sdk /opt/wasi-sdk
|
||||
@@ -0,0 +1,13 @@
|
||||
<!--
|
||||
Please note that pull requests are NOT an appropriate way to
|
||||
ask questions or for support, and will be closed.
|
||||
|
||||
For feature requests or bug reports, please use the Issues tab.
|
||||
For support, please use the Discussion tab or join us on Discord.
|
||||
|
||||
Feel free to delete any of the below which does not apply.
|
||||
-->
|
||||
|
||||
Fixes #
|
||||
|
||||
Summary of changes:
|
||||
@@ -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 🚪'
|
||||
@@ -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
|
||||
@@ -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'
|
||||
@@ -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
|
||||
@@ -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 }}
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user