| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- name: 'Build'
- on:
- push:
- branches:
- - dev
- - "release*"
- tags:
- - '*'
- pull_request:
- env:
- TARGETS: f7
- DEFAULT_TARGET: f7
- FBT_TOOLCHAIN_PATH: /runner/_work
- jobs:
- main:
- runs-on: [self-hosted,FlipperZeroShell]
- steps:
- - name: 'Wipe workspace'
- run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
- - name: 'Checkout code'
- uses: actions/checkout@v3
- with:
- fetch-depth: 1
- ref: ${{ github.event.pull_request.head.sha }}
- - name: 'Get commit details'
- id: names
- run: |
- if [[ ${{ github.event_name }} == 'pull_request' ]]; then
- TYPE="pull"
- elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
- TYPE="tag"
- else
- TYPE="other"
- fi
- python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
- echo random_hash=$(openssl rand -base64 40 | shasum -a 256 | awk '{print $1}') >> $GITHUB_OUTPUT
- echo "event_type=$TYPE" >> $GITHUB_OUTPUT
- - name: 'Check API versions'
- run: |
- set -e
- N_API_HEADER_SIGNATURES=`ls -1 firmware/targets/f*/api_symbols.csv | xargs -I {} sh -c "head -n2 {} | md5sum" | sort -u | wc -l`
- if [ $N_API_HEADER_SIGNATURES != 1 ] ; then
- echo API versions aren\'t matching for available targets. Please update!
- head -n2 firmware/targets/f*/api_symbols.csv
- exit 1
- fi
- - name: 'Make artifacts directory'
- run: |
- rm -rf artifacts
- rm -rf map_analyser_files
- mkdir artifacts
- mkdir map_analyser_files
- - name: 'Bundle scripts'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- tar czpf artifacts/flipper-z-any-scripts-${SUFFIX}.tgz scripts debug
- - name: 'Build the firmware'
- run: |
- set -e
- for TARGET in ${TARGETS}; do
- TARGET="$(echo "${TARGET}" | sed 's/f//')"; \
- ./fbt TARGET_HW=$TARGET copro_dist updater_package \
- ${{ startsWith(github.ref, 'refs/tags') && 'DEBUG=0 COMPACT=1' || '' }}
- done
- - name: 'Move upload files'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- set -e
- for TARGET in ${TARGETS}; do
- mv dist/${TARGET}-*/* artifacts/
- done
- - name: "Check for uncommitted changes"
- run: |
- git diff --exit-code
- - name: 'Bundle resources'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- tar czpf "artifacts/flipper-z-any-resources-${SUFFIX}.tgz" -C assets resources
- - name: 'Bundle core2 firmware'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- cp build/core2_firmware.tgz "artifacts/flipper-z-any-core2_firmware-${SUFFIX}.tgz"
- - name: 'Copy map analyser files'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- cp build/f7-firmware-*/firmware.elf.map map_analyser_files/firmware.elf.map
- cp build/f7-firmware-*/firmware.elf map_analyser_files/firmware.elf
- cp ${{ github.event_path }} map_analyser_files/event.json
- - name: 'Upload map analyser files to storage'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- uses: prewk/s3-cp-action@v2
- with:
- aws_s3_endpoint: "${{ secrets.MAP_REPORT_AWS_ENDPOINT }}"
- aws_access_key_id: "${{ secrets.MAP_REPORT_AWS_ACCESS_KEY }}"
- aws_secret_access_key: "${{ secrets.MAP_REPORT_AWS_SECRET_KEY }}"
- source: "./map_analyser_files/"
- dest: "s3://${{ secrets.MAP_REPORT_AWS_BUCKET }}/${{steps.names.outputs.random_hash}}"
- flags: "--recursive --acl public-read"
- - name: 'Trigger map file reporter'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- uses: peter-evans/repository-dispatch@v2
- with:
- repository: flipperdevices/flipper-map-reporter
- token: ${{ secrets.REPOSITORY_DISPATCH_TOKEN }}
- event-type: map-file-analyse
- client-payload: '{"random_hash": "${{steps.names.outputs.random_hash}}", "event_type": "${{steps.names.outputs.event_type}}"}'
- - name: 'Upload artifacts to update server'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: |
- mkdir -p ~/.ssh
- ssh-keyscan -p ${{ secrets.RSYNC_DEPLOY_PORT }} -H ${{ secrets.RSYNC_DEPLOY_HOST }} > ~/.ssh/known_hosts
- echo "${{ secrets.RSYNC_DEPLOY_KEY }}" > deploy_key;
- chmod 600 ./deploy_key;
- rsync -avzP --delete --mkpath \
- -e 'ssh -p ${{ secrets.RSYNC_DEPLOY_PORT }} -i ./deploy_key' \
- artifacts/ ${{ secrets.RSYNC_DEPLOY_USER }}@${{ secrets.RSYNC_DEPLOY_HOST }}:"${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${BRANCH_NAME}/";
- rm ./deploy_key;
- - name: 'Trigger update server reindex'
- if: ${{ !github.event.pull_request.head.repo.fork }}
- run: curl -X POST -F 'key=${{ secrets.REINDEX_KEY }}' ${{ secrets.REINDEX_URL }}
- - name: 'Find Previous Comment'
- if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request }}
- uses: peter-evans/find-comment@v2
- id: fc
- with:
- issue-number: ${{ github.event.pull_request.number }}
- comment-author: 'github-actions[bot]'
- body-includes: 'Compiled firmware for commit'
- - name: 'Create or update comment'
- if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request}}
- uses: peter-evans/create-or-update-comment@v3
- with:
- comment-id: ${{ steps.fc.outputs.comment-id }}
- issue-number: ${{ github.event.pull_request.number }}
- body: |
- **Compiled firmware for commit `${{steps.names.outputs.commit_sha}}`:**
- - [📦 Update package](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz)
- - [📥 DFU file](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-full-${{steps.names.outputs.suffix}}.dfu)
- - [☁️ Web/App updater](https://lab.flipper.net/?url=https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz&channel=${{steps.names.outputs.branch_name}}&version=${{steps.names.outputs.commit_sha}})
- edit-mode: replace
- compact:
- if: ${{ !startsWith(github.ref, 'refs/tags') }}
- runs-on: [self-hosted,FlipperZeroShell]
- strategy:
- matrix:
- target: [f7, f18]
- steps:
- - name: 'Wipe workspace'
- run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
- - name: 'Checkout code'
- uses: actions/checkout@v3
- with:
- fetch-depth: 1
- submodules: false
- ref: ${{ github.event.pull_request.head.sha }}
- - name: 'Get commit details'
- run: |
- if [[ ${{ github.event_name }} == 'pull_request' ]]; then
- TYPE="pull"
- elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
- TYPE="tag"
- else
- TYPE="other"
- fi
- python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
- - name: 'Build the firmware'
- id: build-fw
- run: |
- set -e
- TARGET="$(echo '${{ matrix.target }}' | sed 's/f//')"; \
- ./fbt TARGET_HW=$TARGET DEBUG=0 COMPACT=1 fap_dist updater_package
- echo "sdk-file=$(ls dist/${{ matrix.target }}-*/flipper-z-${{ matrix.target }}-sdk-*.zip)" >> $GITHUB_OUTPUT
- - name: Deploy uFBT with SDK
- uses: flipperdevices/flipperzero-ufbt-action@v0.1.0
- with:
- task: setup
- sdk-file: ${{ steps.build-fw.outputs.sdk-file }}
- - name: Build test app with SDK
- run: |
- mkdir testapp
- cd testapp
- ufbt create APPID=testapp
- ufbt
-
- - name: Build example & external apps with uFBT
- run: |
- for appdir in 'applications/external' 'applications/examples'; do
- for app in $(find "$appdir" -maxdepth 1 -mindepth 1 -type d); do
- pushd $app
- TARGETS_FAM=$(grep "targets" application.fam || echo "${{ matrix.target }}")
- if ! grep -q "${{ matrix.target }}" <<< $TARGETS_FAM ; then
- echo Skipping unsupported app: $app
- popd
- continue
- fi
- echo Building $app
- ufbt
- popd
- done
- done
|