Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/release-candidate' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
skotopes committed Aug 25, 2022
2 parents bf236f5 + 8fb679e commit ae9038d
Show file tree
Hide file tree
Showing 351 changed files with 14,040 additions and 6,413 deletions.
10 changes: 1 addition & 9 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
/applications/gui/ @skotopes @DrZlo13 @hedger
/applications/ibutton/ @skotopes @DrZlo13 @hedger @gsurkov
/applications/infrared/ @skotopes @DrZlo13 @hedger @gsurkov
/applications/infrared_monitor/ @skotopes @DrZlo13 @hedger @gsurkov
/applications/input/ @skotopes @DrZlo13 @hedger
/applications/lfrfid/ @skotopes @DrZlo13 @hedger
/applications/lfrfid_debug/ @skotopes @DrZlo13 @hedger
Expand Down Expand Up @@ -45,12 +44,8 @@
# Debug tools and plugins
/debug/ @skotopes @DrZlo13 @hedger

# Docker
/docker/ @skotopes @DrZlo13 @hedger @aprosvetova
/docker-compose.yml @skotopes @DrZlo13 @hedger @aprosvetova

# Documentation
/documentation/ @skotopes @DrZlo13 @hedger @aprosvetova
/documentation/ @skotopes @DrZlo13 @hedger @drunkbatya

# Firmware targets
/firmware/ @skotopes @DrZlo13 @hedger
Expand Down Expand Up @@ -84,8 +79,5 @@
/lib/u8g2/ @skotopes @DrZlo13 @hedger
/lib/update_util/ @skotopes @DrZlo13 @hedger

# Make tools
/make/ @skotopes @DrZlo13 @hedger @aprosvetova

# Helper scripts
/scripts/ @skotopes @DrZlo13 @hedger
11 changes: 0 additions & 11 deletions .github/actions/docker/action.yml

This file was deleted.

123 changes: 123 additions & 0 deletions .github/workflows/amap_analyse.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: 'Analyze .map file with Amap'

on:
push:
branches:
- dev
- "release*"
tags:
- '*'
pull_request:

env:
TARGETS: f7

jobs:
amap_analyse:
runs-on: [self-hosted,FlipperZeroMacShell]
timeout-minutes: 15
steps:
- name: 'Wait Build workflow'
uses: fountainhead/action-wait-for-check@v1.0.0
id: wait-for-build
with:
token: ${{ secrets.GITHUB_TOKEN }}
checkName: 'main'
ref: ${{ github.event.pull_request.head.sha || github.sha }}
intervalSeconds: 20

- name: 'Check Build workflow status'
if: steps.wait-for-build.outputs.conclusion == 'failure'
run: |
exit 1
- name: 'Decontaminate previous build leftovers'
run: |
if [ -d .git ]; then
git submodule status \
|| git checkout `git rev-list --max-parents=0 HEAD | tail -n 1`
fi
- name: 'Checkout code'
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: 'Generate prefixes by commit'
id: names
run: |
REF="${{github.ref}}"
COMMIT_HASH="$(git rev-parse HEAD)"
SHA="$(git rev-parse --short HEAD)"
COMMIT_MSG="${{github.event.head_commit.message}}"
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
REF="${{github.head_ref}}"
COMMIT_HASH="$(git log -1 --pretty=oneline | awk '{print $1}')"
SHA="$(cut -c -8 <<< "$COMMIT_HASH")"
COMMIT_MSG="$(git log -1 --pretty=format:"%s")"
PULL_ID="${{github.event.pull_request.number}}"
PULL_NAME="${{github.event.pull_request.title}}"
fi
BRANCH_NAME=${REF#refs/*/}
SUFFIX=${BRANCH_NAME//\//_}-$(date +'%d%m%Y')-${SHA}
if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
SUFFIX=${BRANCH_NAME//\//_}
fi
echo "::set-output name=commit-hash::${COMMIT_HASH}"
echo "::set-output name=commit-msg::${COMMIT_MSG}"
echo "::set-output name=pull-id::${PULL_ID}"
echo "::set-output name=pull-name::${PULL_NAME}"
echo "::set-output name=branch-name::${BRANCH_NAME}"
echo "::set-output name=suffix::${SUFFIX}"
- name: 'Make artifacts directory'
run: |
rm -rf artifacts
mkdir artifacts
- name: 'Download build artifacts'
if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
echo "${{ secrets.RSYNC_DEPLOY_KEY }}" > deploy_key;
chmod 600 ./deploy_key;
rsync -avzP \
-e 'ssh -p ${{ secrets.RSYNC_DEPLOY_PORT }} -i ./deploy_key' \
${{ secrets.RSYNC_DEPLOY_USER }}@${{ secrets.RSYNC_DEPLOY_HOST }}:"${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${{steps.names.outputs.branch-name}}/" artifacts/;
rm ./deploy_key;
- name: 'Make .map file analyze'
run: |
cd artifacts/
/Applications/amap/Contents/MacOS/amap -f flipper-z-f7-firmware-${{steps.names.outputs.suffix}}.elf.map
- name: 'Upload report to DB'
run: |
FBT_TOOLCHAIN_PATH=/opt source scripts/toolchain/fbtenv.sh
get_size()
{
SECTION="$1";
arm-none-eabi-size \
-A artifacts/flipper-z-f7-firmware-${{steps.names.outputs.suffix}}.elf \
| grep "^$SECTION" | awk '{print $2}'
}
export COMMIT_HASH="${{steps.names.outputs.commit-hash}}"
export COMMIT_MSG="${{steps.names.outputs.commit-msg}}"
export BRANCH_NAME="${{steps.names.outputs.branch-name}}"
export BSS_SIZE="$(get_size ".bss")"
export TEXT_SIZE="$(get_size ".text")"
export RODATA_SIZE="$(get_size ".rodata")"
export DATA_SIZE="$(get_size ".data")"
export FREE_FLASH_SIZE="$(get_size ".free_flash")"
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
export PULL_ID="${{steps.names.outputs.pull-id}}"
export PULL_NAME="${{steps.names.outputs.pull-name}}"
fi
python3 -m pip install mariadb
python3 scripts/amap_mariadb_insert.py \
${{ secrets.AMAP_MARIADB_USER }} \
${{ secrets.AMAP_MARIADB_PASSWORD }} \
${{ secrets.AMAP_MARIADB_HOST }} \
${{ secrets.AMAP_MARIADB_PORT }} \
${{ secrets.AMAP_MARIADB_DATABASE }} \
artifacts/flipper-z-f7-firmware-${{steps.names.outputs.suffix}}.elf.map.all
6 changes: 5 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ jobs:
rm -rf artifacts/${BUNDLE_NAME}
done
- name: "Check for uncommited changes"
- name: "Check for uncommitted changes"
run: |
git diff --exit-code
Expand All @@ -108,6 +108,10 @@ jobs:
FBT_TOOLCHAIN_PATH=/opt ./fbt copro_dist
tar czpf artifacts/flipper-z-any-core2_firmware-${{steps.names.outputs.suffix}}.tgz -C assets core2_firmware
- name: 'Copy .map file'
run: |
cp build/f7-firmware-*/firmware.elf.map artifacts/flipper-z-f7-firmware-${{steps.names.outputs.suffix}}.elf.map
- name: 'Upload artifacts to update server'
if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/check_submodules.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: 'Check protobuf branch'
run: |
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/lint_c.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ jobs:
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: 'Check code formatting'
id: syntax_check
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/lint_python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: 'Check code formatting'
run: SET_GH_OUTPUT=1 FBT_TOOLCHAIN_PATH=/opt ./fbt lint_py
107 changes: 107 additions & 0 deletions .github/workflows/pvs_studio.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: 'Static C/C++ analysis with PVS-Studio'

on:
push:
branches:
- dev
- "release*"
tags:
- '*'
pull_request:

env:
TARGETS: f7
DEFAULT_TARGET: f7

jobs:
analyse_c_cpp:
runs-on: [self-hosted, FlipperZeroShell]
steps:
- name: 'Decontaminate previous build leftovers'
run: |
if [ -d .git ]
then
git submodule status \
|| git checkout `git rev-list --max-parents=0 HEAD | tail -n 1`
fi
- name: 'Checkout code'
uses: actions/checkout@v2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: 'Generate suffix and folder name'
id: names
run: |
REF=${{ github.ref }}
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
REF=${{ github.head_ref }}
fi
BRANCH_OR_TAG=${REF#refs/*/}
SHA=$(git rev-parse --short HEAD)
if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
SUFFIX=${BRANCH_OR_TAG//\//_}
else
SUFFIX=${BRANCH_OR_TAG//\//_}-$(date +'%d%m%Y')-${SHA}
fi
echo "WORKFLOW_BRANCH_OR_TAG=${BRANCH_OR_TAG}" >> $GITHUB_ENV
echo "DIST_SUFFIX=${SUFFIX}" >> $GITHUB_ENV
echo "::set-output name=artifacts-path::${BRANCH_OR_TAG}"
echo "::set-output name=suffix::${SUFFIX}"
echo "::set-output name=short-hash::${SHA}"
echo "::set-output name=default-target::${DEFAULT_TARGET}"
- name: 'Make reports directory'
run: |
rm -rf reports/
mkdir reports
- name: 'Generate compile_comands.json'
run: |
FBT_TOOLCHAIN_PATH=/opt ./fbt COMPACT=1 version_json proto_ver icons firmware_cdb dolphin_internal dolphin_blocking
- name: 'Static code analysis'
run: |
FBT_TOOLCHAIN_PATH=/opt source scripts/toolchain/fbtenv.sh
pvs-studio-analyzer credentials ${{ secrets.PVS_STUDIO_CREDENTIALS }}
pvs-studio-analyzer analyze \
@.pvsoptions \
-j$(grep -c processor /proc/cpuinfo) \
-f build/f7-firmware-DC/compile_commands.json \
-o PVS-Studio.log
- name: 'Convert PVS-Studio output to html page'
run: plog-converter -a GA:1,2,3 -t fullhtml PVS-Studio.log -o reports/${{steps.names.outputs.default-target}}-${{steps.names.outputs.suffix}}

- name: 'Upload artifacts to update server'
if: ${{ !github.event.pull_request.head.repo.fork }}
run: |
echo "${{ secrets.RSYNC_DEPLOY_KEY }}" > deploy_key;
chmod 600 ./deploy_key;
rsync -avrzP --mkpath \
-e 'ssh -p ${{ secrets.RSYNC_DEPLOY_PORT }} -i ./deploy_key' \
reports/ ${{ secrets.RSYNC_DEPLOY_USER }}@${{ secrets.RSYNC_DEPLOY_HOST }}:/home/data/firmware-pvs-studio-report/"${{steps.names.outputs.artifacts-path}}/";
rm ./deploy_key;
- name: 'Find Previous Comment'
if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request }}
uses: peter-evans/find-comment@v1
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: 'PVS-Studio report 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@v1
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
**PVS-Studio report for commit `${{steps.names.outputs.short-hash}}`:**
- [Report](https://update.flipperzero.one/builds/firmware-pvs-studio-report/${{steps.names.outputs.artifacts-path}}/${{steps.names.outputs.default-target}}-${{steps.names.outputs.suffix}}/index.html)
edit-mode: replace
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,7 @@ build/

# openocd output file
openocd.log

# PVS Studio temporary files
.PVS-Studio/
PVS-Studio.log
22 changes: 22 additions & 0 deletions .pvsconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# MLib macros we can't do much about.
//-V:M_EACH:1048,1044
//-V:ARRAY_DEF:760,747,568,776,729,712,654
//-V:LIST_DEF:760,747,568,712,729,654,776
//-V:BPTREE_DEF2:779,1086,557,773,512
//-V:DICT_DEF2:779,524,776,760,1044,1001,729,590,568,747,685
//-V:ALGO_DEF:1048,747,1044

# Non-severe malloc/null pointer deref warnings
//-V::522:2,3

# Warning about headers with copyleft license
//-V::1042

# Potentially null argument warnings
//-V:memset:575
//-V:memcpy:575
//-V:strcpy:575
//-V:strchr:575

# For loop warning on M_FOREACH
//-V:for:1044
1 change: 1 addition & 0 deletions .pvsoptions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--rules-config .pvsconfig -e lib/fatfs -e lib/fnv1a-hash -e lib/FreeRTOS-Kernel -e lib/heatshrink -e lib/libusb_stm32 -e lib/littlefs -e lib/mbedtls -e lib/micro-ecc -e lib/microtar -e lib/mlib -e lib/qrcode -e lib/ST25RFAL002 -e lib/STM32CubeWB -e lib/u8g2 -e */arm-none-eabi/*
24 changes: 0 additions & 24 deletions ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,29 +61,6 @@ One liner: `./fbt firmware_flash`

3. Run `dfu-util -D full.dfu -a 0`

# Build with Docker

## Prerequisites

1. Install [Docker Engine and Docker Compose](https://www.docker.com/get-started)
2. Prepare the container:

```sh
docker-compose up -d
```

## Compile everything

```sh
docker-compose exec dev ./fbt
```

Check `dist/` for build outputs.

Use **`flipper-z-{target}-full-{suffix}.dfu`** to flash your device.

If compilation fails, make sure all submodules are all initialized. Either clone with `--recursive` or use `git submodule update --init --recursive`.

# Build on Linux/macOS

Check out `documentation/fbt.md` for details on building and flashing firmware.
Expand Down Expand Up @@ -157,7 +134,6 @@ Connect your device via ST-Link and run:
- `assets` - Assets used by applications and services
- `furi` - Furi Core: os level primitives and helpers
- `debug` - Debug tool: GDB-plugins, SVD-file and etc
- `docker` - Docker image sources (used for firmware build automation)
- `documentation` - Documentation generation system configs and input files
- `firmware` - Firmware source code
- `lib` - Our and 3rd party libraries, drivers and etc...
Expand Down
Loading

0 comments on commit ae9038d

Please sign in to comment.