[targets] bulk target import (partial) #2879
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
tags: | |
- '*' | |
#branches: | |
#- '*' | |
pull_request: | |
branches: | |
- '*' | |
# repository_dispatch is a newer github-actions feature that will allow building from triggers other than code merge/PR | |
repository_dispatch: | |
types: [build] | |
name: Build EmuFlight | |
jobs: | |
build: | |
continue-on-error: false | |
timeout-minutes: 75 | |
strategy: | |
max-parallel: 4 | |
matrix: | |
targets: [targets-group-1, targets-group-2, targets-group-3, targets-group-rest] | |
outputs: | |
buildtag: ${{ steps.ids.outputs.buildtag }} | |
shortsha: ${{ steps.ids.outputs.shortsha }} | |
artifact: ${{ steps.ids.outputs.artifact }} | |
version: ${{ steps.ids.outputs.version }} | |
runs-on: ubuntu-latest | |
steps: | |
# curl, by default, may timeout easily | |
- name: curl fix | |
run: function curl () { command curl --connect-timeout 30 --retry 10 "$@" ; } | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Cache build toolchain | |
uses: actions/cache@v3 | |
id: cache-toolchain | |
with: | |
path: tools | |
key: ${{ runner.os }}-${{ hashFiles('make/tools.mk') }} | |
- name: Download and install toolchain | |
if: steps.cache-toolchain.outputs.cache-hit != 'true' | |
run: make arm_sdk_install | |
- name: Take the trash out | |
run: | | |
sudo swapoff -a | |
sudo rm -f /swapfile | |
sudo apt clean | |
docker rmi -f $(docker image ls -aq) | |
sync | |
df -h | |
continue-on-error: true | |
- name: Setup Python | |
uses: actions/setup-python@v2 | |
# EmuFlight version | |
- name: Get code version | |
id: get_version | |
run: echo "VERSION=$(make version)" >> $GITHUB_ENV | |
# for Makefile interaction | |
- name: Get GitHub Build Number (ENV) | |
id: get_buildno | |
run: echo "GITHUBBUILDNUMBER=${{ github.run_number }}" >> $GITHUB_ENV | |
continue-on-error: true | |
- name: Get pull request number | |
id: get_pullno | |
run: echo "PULL_NUMBER=$(echo "$GITHUB_REF" | awk -F / '{print $3}')" >> $GITHUB_ENV | |
if: startsWith(github.ref, 'refs/pull/') | |
- name: Get revision tag | |
if: startsWith(github.ref, 'refs/tags/') | |
id: get_revtag | |
run: echo "REVISION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV | |
- name: get short-sha | |
run: | | |
echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
continue-on-error: true | |
- name: Make artifact name | |
id: make_artifactname | |
run: | | |
if [[ "${{ github.REPOSITORY }}" == "emuflight/EmuFlight" ]] ; then | |
ARTIFACT_NAME="EmuFlight-${{ env.VERSION }}-${{ github.run_number }}" | |
else | |
ARTIFACT_NAME="EmuFlight-${{ env.VERSION }}-${{ github.ACTOR }}-${{ github.run_number }}" | |
fi | |
echo "${ARTIFACT_NAME}" | |
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
- id: ids | |
name : set outputs | |
run: | | |
echo "::set-output name=buildtag::${{ env.REVISION_TAG }}" | |
echo "::set-output name=shortsha::${{ env.SHORT_SHA }}" | |
echo "::set-output name=artifact::${{ env.ARTIFACT_NAME }}" | |
echo "::set-output name=version::${{ env.VERSION }}" | |
continue-on-error: true | |
# for debugging | |
- name: Show Variables | |
id: show_vars | |
run: | | |
echo "Actor: ${{ github.ACTOR }}" | |
echo "Repo: ${{ github.REPOSITORY }}" | |
echo "Build: ${{ github.run_number }}" | |
echo "Firmware: ${{ env.VERSION }}" | |
echo "Commit: ${{ github.sha }}" | |
echo "ShortSHA: ${{ env.SHORT_SHA }}" | |
echo "Tag: ${{ env.REVISION_TAG}}" | |
echo "Artifact name: ${{ env.ARTIFACT_NAME }}" | |
echo "outputs.buildtag: ${{ steps.ids.outputs.buildtag }}" | |
echo "outputs.shortsha: ${{ steps.ids.outputs.shortsha }}" | |
echo "outputs.artfact: ${{ steps.ids.outputs.artifact }}" | |
echo "outputs.artfact: ${{ steps.ids.outputs.artifact }}" | |
continue-on-error: true | |
# Build HEX | |
- name: Compile Code | |
run: | | |
make ${{ matrix.targets }} | |
# Upload the Builds to ZIP file with existing SHA in .hex names | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ env.ARTIFACT_NAME }} | |
path: obj/*.hex | |
releases: | |
if: startsWith(github.ref, 'refs/tags/') | |
needs: build | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
timeout-minutes: 10 | |
runs-on: ubuntu-latest | |
continue-on-error: false | |
steps: | |
# for debugging | |
- name: show variables | |
run: | | |
echo "Build: ${{ github.RUN_NUMBER }}" | |
echo "Commit: ${{ github.SHA }}" | |
echo "Ref: ${{ GITHUB.REF }}" | |
echo "Actor: ${{ github.ACTOR }}" | |
echo "Repo: ${{ github.REPOSITORY }}" | |
echo "outputs.buildtag: ${{ needs.build.outputs.buildtag }}" | |
echo "outputs.shortsha: ${{ needs.build.outputs.shortsha }}" | |
echo "outputs.artfact: ${{ needs.build.outputs.artifact }}" | |
echo "outputs.artfact: ${{ needs.build.outputs.version }}" | |
echo "NOW=$(date +'%Y%m%d.%H%M%S')" >> $GITHUB_ENV | |
continue-on-error: true | |
- name: download artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: ${{ needs.build.outputs.artifact }} #no name parameter will download all artifacts, but create separate subfolders | |
path: obj | |
continue-on-error: false | |
- name: list/find extractions | |
run: | | |
find ./ -name "*.hex" | |
# Draft Dev-Unstable releases via ncipollo/release-action | |
# softprops/action-gh-release fails to release on separate repo | |
- name: Draft Release Dev-Unstable repo | |
if: contains(github.ref, 'test') || contains(github.ref, 'unstab') | |
uses: ncipollo/release-action@v1 | |
with: | |
repo: dev-unstable | |
owner: emuflight | |
token: ${{ secrets.NC_PAT_EMUF }} | |
tag: "${{ env.NOW }}-hex" | |
draft: true | |
prerelease: true | |
allowUpdates: true | |
artifacts: obj/*.hex | |
artifactContentType: raw | |
name: "DEV-UNSTABLE HEX / Build ${{ github.run_number }}" | |
body: | | |
## HEX BUILD for TESTING | |
### Build ${{ github.run_number }} | |
### Commit SHA: ${{ needs.build.outputs.shortsha }} (${{ github.sha }}) | |
### BuildTag: ${{ needs.build.outputs.buildtag }} | |
### EmuFlight ${{ needs.build.outputs.version }} base plus test code | |
### What to Test/Feedback: (Feedback in EmuFlight's Discord or GitHub Discussions) | |
<details><summary>Changes in this Build:</summary> | |
<!-- require single blank line below --> | |
``` | |
[insert commit history here] | |
``` | |
</details> | |
continue-on-error: true | |
# Draft Dev-master releases via ncipollo/release-action | |
# softprops/action-gh-release fails to release on separate repo | |
- name: Draft Release Dev-Master repo | |
if: contains(github.ref, 'master') | |
uses: ncipollo/release-action@v1 | |
with: | |
repo: dev-master | |
owner: emuflight | |
token: ${{ secrets.NC_PAT_EMUF }} | |
tag: "${{ env.NOW }}-hex" | |
draft: true | |
prerelease: true | |
allowUpdates: true | |
artifacts: obj/*.hex | |
artifactContentType: raw | |
name: "DEV-MASTER HEX / Build ${{ github.run_number }}" | |
body: | | |
## HEX BUILD of MASTER | |
### Build ${{ github.run_number }} | |
### Commit SHA: ${{ needs.build.outputs.shortsha }} (${{ github.sha }}) | |
### BuildTag: ${{ needs.build.outputs.buildtag }} | |
### EmuFlight ${{ needs.build.outputs.version }} base plus committed code | |
### Feedback Welcome in EmuFlight's Discord or GitHub Discussions. | |
<details><summary>Changes in this Build:</summary> | |
<!-- require single blank line below --> | |
``` | |
[insert commit history here] | |
``` | |
</details> | |
continue-on-error: true | |
# Rename .hex for true Releases on main repo | |
- name: Rename Artifacts | |
if: startsWith(github.ref, 'refs/tags/') | |
run: | | |
sudo apt -y install rename | |
cd obj | |
rename 's/_Build_.*/.hex/' *.hex | |
#Draft Releases on main Repo | |
# could potentially change to ncipollo/release-action as well | |
- name: Draft Release Main Repo | |
if: contains(github.ref, 'releas') | |
uses: ncipollo/release-action@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
draft: true | |
prerelease: true | |
allowUpdates: true | |
# tag: use the build Number, but we MUST manually change to version so that it creates a version-tag on release | |
tag: ${{ env.VERSION }} | |
artifacts: obj/*.hex | |
artifactContentType: raw | |
name: DRAFT / EmuFlight ${{ env.VERSION }} / GitHub Build ${{ github.run_number }} | |
body: | | |
## EmuFlight ${{ env.VERSION }} | |
### Build ${{ github.run_number }} | |
### Commit SHA: ${{ needs.build.outputs.shortsha }} (${{ github.sha }}) | |
### BuildTag: ${{ needs.build.outputs.buildtag }} | |
<details><summary>Changes in this Build:</summary> | |
<!-- require single blank line below --> | |
``` | |
[insert commit history here] | |
``` | |
</details> | |
continue-on-error: false |