Skip to content

Commit

Permalink
Merge pull request #2114 from iNavFlight/mmosca-nightly-builds-fixed
Browse files Browse the repository at this point in the history
Configurator nightly build support
  • Loading branch information
mmosca authored Jun 17, 2024
2 parents e17965d + 1d5730d commit 0ec2b13
Show file tree
Hide file tree
Showing 3 changed files with 170 additions and 7 deletions.
17 changes: 13 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@ name: Build Configurator
# 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: pull_request
on:
pull_request:

workflow_call:
#inputs:
# release_build:
# description: 'Specifies if it is a build that should include commit hash in hex file names or not'
# default: false
# required: false
# type: boolean

jobs:
build-linux:
Expand Down Expand Up @@ -43,17 +52,17 @@ jobs:
- name: Build Linux
run: npm run make
- name: Upload Linux deb
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.BUILD_NAME }}_DEB
path: ./out/make/deb/x64/*.deb
- name: Upload Linux rpm
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.BUILD_NAME }}_RPM
path: ./out/make/rpm/x64/*.rpm
- name: Upload Linux zip
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.BUILD_NAME }}_ZIP
path: ./out/make/zip/linux/x64/*.zip
Expand Down
58 changes: 58 additions & 0 deletions .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Build pre-release

on:
push:
branches:
- master
# pull_request:

jobs:
build:
name: build
uses: ./.github/workflows/ci.yml

release:
name: Build nightly-release
runs-on: ubuntu-latest
needs: [build]

steps:
- name: Get current date
id: date
run: echo "today=$(date '+%Y%m%d')" >> $GITHUB_OUTPUT
- name: Code Checkout
uses: actions/checkout@v4
- name: Fetch build artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Upload release artifacts
uses: softprops/action-gh-release@v2
with:
name: inav-configurator-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-configurator-nightly
prerelease: true
draft: false
#generate_release_notes: true
make_latest: false
files: |
artifacts/*
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 }}

102 changes: 99 additions & 3 deletions tabs/firmware_flasher.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,26 @@ TABS.firmware_flasher.initialize = function (callback) {
worker.postMessage(str);
}

function parseDevFilename(filename) {
//var targetFromFilenameExpression = /inav_([\d.]+)?_?([^.]+)\.(.*)/;
// inav_8.0.0_TUNERCF405_dev-20240617-88fb1d0.hex
var targetFromFilenameExpression = /^inav_([\d.]+)_([A-Z0-9_]+)_dev-(\d{4})(\d{2})(\d{2})-(\w+)\.(hex)$/;
var match = targetFromFilenameExpression.exec(filename);

if (!match) {
GUI.log("no match: dev filename: " + filename);
return null;
}

GUI.log("non dev: match[2]: " + match[2] + " match[7]: " + match[7]);

return {
raw_target: match[2],
target: match[2].replace("_", " "),
format: match[7],
};
}

function parseFilename(filename) {
//var targetFromFilenameExpression = /inav_([\d.]+)?_?([^.]+)\.(.*)/;
var targetFromFilenameExpression = /inav_([\d.]+(?:-rc\d+)?)?_?([^.]+)\.(.*)/;
Expand All @@ -64,6 +84,8 @@ TABS.firmware_flasher.initialize = function (callback) {
return null;
}

//GUI.log("non dev: match[2]: " + match[2] + " match[3]: " + match[3]);

return {
raw_target: match[2],
target: match[2].replace("_", " "),
Expand Down Expand Up @@ -102,7 +124,7 @@ TABS.firmware_flasher.initialize = function (callback) {
});
});

var buildBoardOptions = function(){
var buildBoardOptions = function(releasesData){
var boards_e = $('select[name="board"]').empty();
var versions_e = $('select[name="firmware_version"]').empty();
var showDevReleases = ($('input.show_development_releases').is(':checked'));
Expand All @@ -113,6 +135,11 @@ TABS.firmware_flasher.initialize = function (callback) {
var releases = {};
var sortedTargets = [];
var unsortedTargets = [];

var processRelease = function(release) {

}

TABS.firmware_flasher.releasesData.forEach(function(release){
release.assets.forEach(function(asset){
var result = parseFilename(asset.name);
Expand All @@ -126,6 +153,21 @@ TABS.firmware_flasher.initialize = function (callback) {
});
sortedTargets = unsortedTargets.sort();
});

TABS.firmware_flasher.devReleasesData.forEach(function(release){
release.assets.forEach(function(asset){
var result = parseDevFilename(asset.name);

if ((!showDevReleases && release.prerelease) || !result) {
return;
}
if($.inArray(result.target, unsortedTargets) == -1) {
unsortedTargets.push(result.target);
}
});
sortedTargets = unsortedTargets.sort();
});

sortedTargets.forEach(function(release) {
releases[release] = [];
});
Expand Down Expand Up @@ -154,7 +196,7 @@ TABS.firmware_flasher.initialize = function (callback) {
date.getUTCHours(),
date.getMinutes()
);

var descriptor = {
"releaseUrl": release.html_url,
"name" : semver.clean(release.name),
Expand All @@ -170,6 +212,47 @@ TABS.firmware_flasher.initialize = function (callback) {
releases[result.target].push(descriptor);
});
});

TABS.firmware_flasher.devReleasesData.forEach(function(release){

var versionFromTagExpression = /v?(.*)/;
var matchVersionFromTag = versionFromTagExpression.exec(release.tag_name);
var version = matchVersionFromTag[1];

release.assets.forEach(function(asset){
var result = parseDevFilename(asset.name);
if ((!showDevReleases && release.prerelease) || !result) {
return;
}

if (result.format != 'hex') {
return;
}

var date = new Date(release.published_at);
var formattedDate = "{0}-{1}-{2} {3}:{4}".format(
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
date.getUTCHours(),
date.getMinutes()
);

var descriptor = {
"releaseUrl": release.html_url,
"name" : semver.clean(release.name),
"version" : release.tag_name,
"url" : asset.browser_download_url,
"file" : asset.name,
"raw_target": result.raw_target,
"target" : result.target,
"date" : formattedDate,
"notes" : release.body,
"status" : release.prerelease ? "nightly" : "stable"
};
releases[result.target].push(descriptor);
});
});

var selectTargets = [];
Object.keys(releases)
Expand All @@ -192,9 +275,22 @@ TABS.firmware_flasher.initialize = function (callback) {
return;
};

$.get('https://api.github.com/repos/iNavFlight/inav-nightly/releases?per_page=10', function(releasesData) {
TABS.firmware_flasher.devReleasesData = releasesData;
}).fail(function (data){
TABS.firmware_flasher.devReleasesData = {};
if (data["responseJSON"]){
GUI.log("<b>GITHUB Query Failed: <code>{0}</code></b>".format(data["responseJSON"].message));
}
$('select[name="board"]').empty().append('<option value="0">Offline</option>');
$('select[name="firmware_version"]').empty().append('<option value="0">Offline</option>');
$('a.auto_select_target').addClass('disabled');
});


$.get('https://api.github.com/repos/iNavFlight/inav/releases?per_page=10', function (releasesData){
TABS.firmware_flasher.releasesData = releasesData;
buildBoardOptions();
buildBoardOptions(releasesData);

// bind events
$('select[name="board"]').on('change', function () {
Expand Down

0 comments on commit 0ec2b13

Please sign in to comment.