diff --git a/.github/workflows/dev-builds.yml b/.github/workflows/dev-builds.yml new file mode 100644 index 00000000000..c1dac23c067 --- /dev/null +++ b/.github/workflows/dev-builds.yml @@ -0,0 +1,233 @@ +name: Build pre-release +# Don't enable CI on push, just on PR. If you +# are working on the main repo and want to trigger +# a CI build submit a draft PR. +on: + push: + branches: + - master + mmosca-update-github-actions + #pull_request: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + id: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: sudo apt-get update && sudo apt-get -y install ninja-build + - name: Setup environment + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + run: | + # This is the hash of the commit for the PR + # when the action is triggered by PR, empty otherwise + COMMIT_ID=${{ github.event.pull_request.head.sha }} + # This is the hash of the commit when triggered by push + # but the hash of refs/pull//merge, which is different + # from the hash of the latest commit in the PR, that's + # why we try github.event.pull_request.head.sha first + COMMIT_ID=${COMMIT_ID:-${{ github.sha }}} + BUILD_SUFFIX=dev-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID}) + VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/^[ \t]+|[ \t\)]+$/, "", $2); print $2 }') + echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV + echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + path: downloads + key: ${{ runner.os }}-downloads-${{ hashFiles('CMakeLists.txt') }}-${{ hashFiles('**/cmake/*')}} + - name: Build targets (${{ matrix.id }}) + run: mkdir -p build && cd build && cmake -DWARNINGS_AS_ERRORS=ON -DCI_JOB_INDEX=${{ matrix.id }} -DCI_JOB_COUNT=${{ strategy.job-total }} -DBUILD_SUFFIX=${{ env.BUILD_SUFFIX }} -DVERSION_TYPE=dev -G Ninja .. && ninja ci + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BUILD_NAME }}.${{ matrix.id }} + path: ./build/*.hex + + build-SITL-Linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: sudo apt-get update && sudo apt-get -y install ninja-build + - name: Setup environment + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + run: | + # This is the hash of the commit for the PR + # when the action is triggered by PR, empty otherwise + COMMIT_ID=${{ github.event.pull_request.head.sha }} + # This is the hash of the commit when triggered by push + # but the hash of refs/pull//merge, which is different + # from the hash of the latest commit in the PR, that's + # why we try github.event.pull_request.head.sha first + COMMIT_ID=${COMMIT_ID:-${{ github.sha }}} + BUILD_SUFFIX=dev-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID}) + VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t\)]+/, "", $2); print $2 }') + echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV + echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV + - name: Build SITL + run: mkdir -p build_SITL && cd build_SITL && cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -G Ninja -DVERSION_TYPE=dev .. && ninja + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: sitl-${{ env.BUILD_NAME }}-Linux + path: ./build_SITL/*_SITL + + build-SITL-Mac: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + brew install cmake ninja ruby + + - name: Setup environment + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + run: | + # This is the hash of the commit for the PR + # when the action is triggered by PR, empty otherwise + COMMIT_ID=${{ github.event.pull_request.head.sha }} + # This is the hash of the commit when triggered by push + # but the hash of refs/pull//merge, which is different + # from the hash of the latest commit in the PR, that's + # why we try github.event.pull_request.head.sha first + COMMIT_ID=${COMMIT_ID:-${{ github.sha }}} + BUILD_SUFFIX=dev-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID}) + VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t\)]+/, "", $2); print $2 }') + echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV + echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV + - name: Build SITL + run: | + mkdir -p build_SITL && cd build_SITL + cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DVERSION_TYPE=dev -G Ninja .. + ninja + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: sitl-${{ env.BUILD_NAME }}-MacOS + path: ./build_SITL/*_SITL + + build-SITL-Windows: + runs-on: windows-latest + defaults: + run: + shell: C:\tools\cygwin\bin\bash.exe -o igncr '{0}' + steps: + - uses: actions/checkout@v4 + - name: Setup Cygwin + uses: egor-tensin/setup-cygwin@v4 + with: + packages: cmake ruby ninja gcc-g++ + - name: Setup environment + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + run: | + # This is the hash of the commit for the PR + # when the action is triggered by PR, empty otherwise + COMMIT_ID=${{ github.event.pull_request.head.sha }} + # This is the hash of the commit when triggered by push + # but the hash of refs/pull//merge, which is different + # from the hash of the latest commit in the PR, that's + # why we try github.event.pull_request.head.sha first + COMMIT_ID=${COMMIT_ID:-${{ github.sha }}} + BUILD_SUFFIX=dev-$(date '+%Y%m%d')-$(git rev-parse --short ${COMMIT_ID}) + VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t\)]+/, "", $2); print $2 }') + #echo "BUILD_SUFFIX=${BUILD_SUFFIX}" >> $GITHUB_ENV + #echo "BUILD_NAME=inav-${VERSION}-${BUILD_SUFFIX}" >> $GITHUB_ENV + #echo "VERSION_TAG=-$(date '+%Y%m%d')" >> $GITHUB_ENV + echo "version=${VERSION}" >> $GITHUB_OUTPUT + - name: Build SITL + run: mkdir -p build_SITL && cd build_SITL && cmake -DSITL=ON -DWARNINGS_AS_ERRORS=ON -DVERSION_TYPE=dev -G Ninja .. && ninja + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: sitl-${{ env.BUILD_NAME }}-WIN + path: ./build_SITL/*.exe + + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: sudo apt-get update && sudo apt-get -y install ninja-build + - name: Run Tests + run: mkdir -p build && cd build && cmake -DTOOLCHAIN=none -G Ninja .. && ninja check + + release: + needs: [build, build-SITL-Linux, build-SITL-Mac, build-SITL-Windows, test] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Get version + id: version + run: | + VERSION=$(grep project CMakeLists.txt|awk -F VERSION '{ gsub(/[ \t\)]+/, "", $2); print $2 }') + echo "version=${VERSION}" >> $GITHUB_OUTPUT + - name: Get current date + id: date + run: echo "today=$(date '+%Y%m%d')" >> $GITHUB_OUTPUT + - name: download artifacts + uses: actions/download-artifact@v4 + with: + path: hexes + pattern: inav-* + merge-multiple: true + - name: download sitl linux + uses: actions/download-artifact@v4 + with: + path: resources/sitl/linux + pattern: sitl-*-Linux + merge-multiple: true + - name: download sitl windows + uses: actions/download-artifact@v4 + with: + path: resources/sitl/windows + pattern: sitl-*-WIN + merge-multiple: true + - name: download sitl mac + uses: actions/download-artifact@v4 + with: + path: resources/sitl/macos + pattern: sitl-*-MacOS + merge-multiple: true + - name: Consolidate sitl files + run: | + zip -r -9 sitl-resources.zip resources/ + - name: Upload release artifacts + uses: softprops/action-gh-release@v2 + with: + name: inav-${{ steps.version.outputs.version }}-dev-${{ steps.date.outputs.today }}-${{ github.run_number }}-${{ github.sha }} + tag_name: v${{ steps.date.outputs.today }}.${{ github.run_number }} + # To create release on a different repo, we need a token setup + token: ${{ secrets.NIGHTLY_TOKEN }} + repository: iNavFlight/inav-nightly + prerelease: true + draft: false + #generate_release_notes: true + make_latest: false + files: | + hexes/*.hex + sitl-resources.zip + body: | + ${{ steps.notes.outputs.notes }} + + ### Repository: + ${{ github.repository }} ([link](${{ github.event.repository.html_url }})) + + ### Branch: + ${{ github.ref_name }} ([link](${{ github.event.repository.html_url }}/tree/${{ github.ref_name }})) + + ### Latest changeset: + ${{ github.event.head_commit.id }} ([link](${{ github.event.head_commit.url }})) + + ### Changes: + ${{ github.event.head_commit.message }} + diff --git a/CMakeLists.txt b/CMakeLists.txt index db8ec36897b..9b5f40f3337 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,7 @@ set(COMMON_COMPILE_DEFINITIONS FC_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR} FC_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR} FC_VERSION_PATCH_LEVEL=${CMAKE_PROJECT_VERSION_PATCH} + FC_VERSION_TYPE="${VERSION_TYPE}" ) if (NOT SITL) diff --git a/src/main/build/version.h b/src/main/build/version.h index 49ec81d1b11..583cdd82dd8 100644 --- a/src/main/build/version.h +++ b/src/main/build/version.h @@ -18,8 +18,12 @@ #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) #define FC_VERSION_STRING STR(FC_VERSION_MAJOR) "." STR(FC_VERSION_MINOR) "." STR(FC_VERSION_PATCH_LEVEL) +#ifndef FC_VERSION_TYPE +#define FC_VERSION_TYPE "" +#endif #define FC_FIRMWARE_NAME "INAV" + #define MW_VERSION 231 extern const char* const compilerVersion; diff --git a/src/main/fc/cli.c b/src/main/fc/cli.c index 18243fdefce..7b9c1329884 100644 --- a/src/main/fc/cli.c +++ b/src/main/fc/cli.c @@ -3662,13 +3662,14 @@ static void cliStatus(char *cmdline) char buf[MAX(FORMATTED_DATE_TIME_BUFSIZE, SETTING_MAX_NAME_LENGTH)]; dateTime_t dt; - cliPrintLinef("%s/%s %s %s / %s (%s)", + cliPrintLinef("%s/%s %s %s / %s (%s) %s", FC_FIRMWARE_NAME, targetName, FC_VERSION_STRING, buildDate, buildTime, - shortGitRevision + shortGitRevision, + FC_VERSION_TYPE ); cliPrintLinef("GCC-%s", compilerVersion @@ -3906,13 +3907,14 @@ static void cliVersion(char *cmdline) { UNUSED(cmdline); - cliPrintLinef("# %s/%s %s %s / %s (%s)", + cliPrintLinef("# %s/%s %s %s / %s (%s) %s", FC_FIRMWARE_NAME, targetName, FC_VERSION_STRING, buildDate, buildTime, - shortGitRevision + shortGitRevision, + FC_VERSION_TYPE ); cliPrintLinef("# GCC-%s", compilerVersion