Skip to content

Try a thing

Try a thing #318

Workflow file for this run

name: Build ExpressLRS Backpack
on: [push, pull_request]
jobs:
targets:
runs-on: ubuntu-latest
outputs:
targets: ${{ steps.set-targets.outputs.targets }}
steps:
- name: Checkout
uses: actions/checkout@v3
- id: set-targets
run: echo "targets=[$(grep -r "\[env:" targets | sed 's/.*://' | sed s/.$// | egrep "UART" | tr '\n' ',' | sed 's/,$/"\n/' | sed 's/,/","/'g | sed 's/^/"/')]" >> $GITHUB_OUTPUT
build:
needs: targets
strategy:
fail-fast: false
matrix:
target: ${{fromJSON(needs.targets.outputs.targets)}}
runs-on: ubuntu-latest
steps:
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v4
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Cache pip
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.target }}
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install platformio
pip install wheel
- name: Cache PlatformIO
uses: actions/cache@v3
with:
path: ~/.platformio
key: ${{ runner.os }}-platformio
- name: Run PlatformIO
run: |
platformio platform update
platformio platform install native
mkdir -p ~/artifacts/firmware
pio run -e ${{ matrix.target }}
mv .pio/build/${{ matrix.target }} ~/artifacts/firmware/`echo ${{ matrix.target }} | sed s/_via_UART//`
cp -r hardware ~/artifacts/firmware
- name: Store Artifacts
uses: actions/upload-artifact@v3
with:
name: firmware
path: |
~/artifacts/**/*.bin
~/artifacts/**/*.json
continue-on-error: true
firmware:
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Get firmware artifacts
uses: actions/download-artifact@v3
with:
name: firmware
path: dist
- name: Build flasher "binary" with shiv
run: |
cd python
pip install shiv
shiv -c flash -o ../dist/firmware/flasher.pyz pyserial .
- name: Update firmware artifact
uses: actions/upload-artifact@v3
with:
name: firmware
path: dist/**/*
- name: Create firmware zip bundle
run: |
cd dist
zip -r -9 ../firmware.zip .
- name: Upload firmware bundle to ExpressLRS artifactory
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_ENDPOINT_URL: ${{ secrets.AWS_ENDPOINT_URL }}
AWS_REGION: "auto"
run: |
if [[ -z $AWS_ACCESS_KEY_ID || -z $AWS_SECRET_ACCESS_KEY || -z $AWS_ENDPOINT_URL ]]; then
echo "Artifactory credentials are not defined. Most likely action is running from pull request. Not a bug."
exit 0
fi
echo "Uploading firmware to artifactory"
aws s3 cp --endpoint-url $AWS_ENDPOINT_URL firmware.zip s3://expresslrs/Backpack/$GITHUB_SHA/firmware.zip
echo "Generating artifact index"
aws s3 ls --endpoint-url $AWS_ENDPOINT_URL s3://expresslrs/Backpack/ | awk '{print $2}' | sed s/\\/// > /tmp/hashes
echo '{' > index.json
echo '"branches": {' >> index.json
git branch --list --remotes --format '"%(refname:short)": "%(objectname)",' | grep origin/ | sed s/origin.// | grep -f /tmp/hashes | head -c-2 >> index.json
echo '' >> index.json
echo '},' >> index.json
echo '"tags": {' >> index.json
git tag --list --format '"%(refname:short)": "%(objectname)",' | grep -f /tmp/hashes | head -c-2 >> index.json
echo '' >> index.json
echo '}' >> index.json
echo '}' >> index.json
echo "Uploading artifact index"
aws s3 cp --endpoint-url $AWS_ENDPOINT_URL index.json s3://expresslrs/Backpack/index.json