diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index b72d9ea6..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,68 +0,0 @@ -# Who owns all the fish by default -* @skotopes @DrZlo13 @hedger - -# Apps -/applications/debug/bt_debug_app/ @skotopes @DrZlo13 @hedger @gornekich -/applications/debug/accessor/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/battery_test_app/ @skotopes @DrZlo13 @hedger @gornekich -/applications/debug/bt_debug_app/ @skotopes @DrZlo13 @hedger @gornekich -/applications/debug/file_browser_test/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/lfrfid_debug/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/text_box_test/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/uart_echo/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/usb_mouse/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/debug/usb_test/ @skotopes @DrZlo13 @hedger @nminaylov - -/applications/main/archive/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/main/bad_usb/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/main/gpio/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/main/ibutton/ @skotopes @DrZlo13 @hedger @gsurkov -/applications/main/infrared/ @skotopes @DrZlo13 @hedger @gsurkov -/applications/main/nfc/ @skotopes @DrZlo13 @hedger @gornekich @Astrrra -/applications/main/subghz/ @skotopes @DrZlo13 @hedger @Skorpionm -/applications/main/u2f/ @skotopes @DrZlo13 @hedger @nminaylov - -/applications/services/bt/ @skotopes @DrZlo13 @hedger @gornekich -/applications/services/cli/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/crypto/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/desktop/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/dolphin/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/power/ @skotopes @DrZlo13 @hedger @gornekich -/applications/services/rpc/ @skotopes @DrZlo13 @hedger @nminaylov - -/applications/services/bt_settings_app/ @skotopes @DrZlo13 @hedger @gornekich -/applications/services/desktop_settings/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/dolphin_passport/ @skotopes @DrZlo13 @hedger @nminaylov -/applications/services/power_settings_app/ @skotopes @DrZlo13 @hedger @gornekich - -/applications/system/storage_move_to_sd/ @skotopes @DrZlo13 @hedger @nminaylov - -/applications/debug/unit_tests/ @skotopes @DrZlo13 @hedger @nminaylov @gornekich @Astrrra @gsurkov @Skorpionm - -/applications/examples/example_thermo/ @skotopes @DrZlo13 @hedger @gsurkov - -# Firmware targets -/targets/ @skotopes @DrZlo13 @hedger @nminaylov - -# Assets -/applications/main/infrared/resources/ @skotopes @DrZlo13 @hedger @gsurkov - -# Documentation -/documentation/ @skotopes @DrZlo13 @hedger @drunkbatya -/scripts/toolchain/ @skotopes @DrZlo13 @hedger @drunkbatya - -# Lib -/lib/stm32wb_copro/ @skotopes @DrZlo13 @hedger @gornekich -/lib/digital_signal/ @skotopes @DrZlo13 @hedger @gornekich -/lib/infrared/ @skotopes @DrZlo13 @hedger @gsurkov -/lib/lfrfid/ @skotopes @DrZlo13 @hedger @nminaylov -/lib/libusb_stm32/ @skotopes @DrZlo13 @hedger @nminaylov -/lib/mbedtls/ @skotopes @DrZlo13 @hedger @nminaylov -/lib/micro-ecc/ @skotopes @DrZlo13 @hedger @nminaylov -/lib/nanopb/ @skotopes @DrZlo13 @hedger @nminaylov -/lib/nfc/ @skotopes @DrZlo13 @hedger @gornekich @Astrrra -/lib/one_wire/ @skotopes @DrZlo13 @hedger @gsurkov -/lib/subghz/ @skotopes @DrZlo13 @hedger @Skorpionm - -# CI/CD -/.github/workflows/ @skotopes @DrZlo13 @hedger @drunkbatya diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml deleted file mode 100644 index 844d62c4..00000000 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Bug report -description: File a bug reports regarding the firmware. -labels: ['bug'] -body: -- type: markdown - attributes: - value: | - Thank you for taking the time to fill out an issue, this template is meant for any issues related to the Flipper Zero firmware. - If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one) -- type: textarea - id: description - attributes: - label: Describe the bug. - description: "A clear and concise description of what the bug is." - validations: - required: true -- type: textarea - id: repro - attributes: - label: Reproduction - description: "How can this bug be reproduced?" - placeholder: | - 1. Switch on... - 2. Press button '....' - 3. Wait for the moon phase - 4. It burns - validations: - required: true -- type: input - id: target - attributes: - label: Target - description: Specify the target - # Target seems to be largely ignored by outside sources. -- type: textarea - id: logs - attributes: - label: Logs - description: Attach your debug logs here - render: Text - # Avoid rendering as Markdown here. -- type: textarea - id: anything-else - attributes: - label: Anything else? - description: Let us know if you have anything else to share. diff --git a/.github/ISSUE_TEMPLATE/02_enhancements.yml b/.github/ISSUE_TEMPLATE/02_enhancements.yml deleted file mode 100644 index 1768e193..00000000 --- a/.github/ISSUE_TEMPLATE/02_enhancements.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Enhancements -description: Suggest improvements for any existing functionality within the firmware. -body: -- type: markdown - attributes: - value: | - Thank you for taking the time to fill out an issue. This template is meant for feature requests and improvements to already existing functionality. - If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one) -- type: textarea - id: proposal - attributes: - label: "Describe the enhancement you're suggesting." - description: | - Feel free to describe in as much detail as you wish. - validations: - required: true -- type: textarea - id: anything-else - attributes: - label: Anything else? - description: Let us know if you have anything else to share. diff --git a/.github/ISSUE_TEMPLATE/03_feature_request.yml b/.github/ISSUE_TEMPLATE/03_feature_request.yml deleted file mode 100644 index 052cd340..00000000 --- a/.github/ISSUE_TEMPLATE/03_feature_request.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Feature Request -description: For feature requests regarding the firmware. -labels: ['feature request'] -body: -- type: markdown - attributes: - value: | - Thank you for taking the time to fill out an issue, this template is meant for any feature suggestions. - If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one) -- type: textarea - id: proposal - attributes: - label: "Description of the feature you're suggesting." - description: | - Please describe your feature request in as many details as possible. - - Describe what it should do. - - Note whether it is to extend existing functionality or introduce new functionality. - validations: - required: true -- type: textarea - id: anything-else - attributes: - label: Anything else? - description: Let us know if you have anything else to share. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 55ff9d29..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Need help? - url: https://forum.flipperzero.one - about: For any question regarding on how to use the Flipper Zero and its firmware. diff --git a/.github/actions/submit_sdk/action.yml b/.github/actions/submit_sdk/action.yml deleted file mode 100644 index b515b528..00000000 --- a/.github/actions/submit_sdk/action.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Submit SDK to Catalog -author: hedger -description: | - This action checks if SDK exists in the catalog and if not, adds and/or publishes it. - -inputs: - catalog-url: - description: The URL of the Catalog API. Must not be empty or end with a /. - required: true - catalog-api-token: - description: The token to use to authenticate with the Catalog API. Must not be empty. - required: true - firmware-api: - description: Fimware's API version, major.minor - required: true - firmware-target: - description: Firmware's target, e.g. f7/f18 - required: true - firmware-version: - description: Firmware's version, e.g. 0.13.37-rc3, or 0.13.37 - required: true - -runs: - using: composite - steps: - - name: Check inputs - shell: bash - run: | - if [ -z "${{ inputs.catalog-url }}" ] ; then - echo "Invalid catalog-url: ${{ inputs.catalog-url }}" - exit 1 - fi - if [ -z "${{ inputs.catalog-api-token }}" ] ; then - echo "Invalid catalog-api-token: ${{ inputs.catalog-api-token }}" - exit 1 - fi - if ! echo "${{ inputs.firmware-api }}" | grep -q "^[0-9]\+\.[0-9]\+$" ; then - echo "Invalid firmware-api: ${{ inputs.firmware-api }}" - exit 1 - fi - if ! echo "${{ inputs.firmware-target }}" | grep -q "^f[0-9]\+$" ; then - echo "Invalid firmware-target: ${{ inputs.firmware-target }}" - exit 1 - fi - if ! echo "${{ inputs.firmware-version }}" | grep -q "^[0-9]\+\.[0-9]\+\.[0-9]\+\(-rc\)\?\([0-9]\+\)\?$" ; then - echo "Invalid firmware-version: ${{ inputs.firmware-version }}" - exit 1 - fi - - name: Submit SDK - shell: bash - run: | - curl -sX 'GET' \ - '${{ inputs.catalog-url }}/api/v0/0/sdk?length=500' \ - -H 'Accept: application/json' > sdk_versions.json - if jq -r -e ".[] | select((.api == \"${{ inputs.firmware-api }}\") and .target == \"${{ inputs.firmware-target }}\")" sdk_versions.json > found_sdk.json ; then - echo "API version ${{ inputs.firmware-api }} already exists in catalog" - if [ $(jq -r -e ".released_at" found_sdk.json) != "null" ] ; then - echo "API version is already released" - exit 0 - fi - if ! echo "${{ inputs.firmware-version }}" | grep -q -- "-rc" ; then - SDK_ID=$(jq -r ._id found_sdk.json) - echo "Marking SDK $SDK_ID as released" - curl -X 'POST' \ - "${{ inputs.catalog-url }}/api/v0/0/sdk/${SDK_ID}/release" \ - -H 'Accept: application/json' \ - -H 'Authorization: Bearer ${{ inputs.catalog-api-token }}' \ - -d '' - fi - else - echo "API version ${{ inputs.firmware-api }} doesn't exist in catalog, adding" - curl -X 'POST' \ - '${{ inputs.catalog-url }}/api/v0/0/sdk' \ - -H 'Accept: application/json' \ - -H 'Authorization: Bearer ${{ inputs.catalog-api-token }}' \ - -H 'Content-Type: application/json' \ - -d "{\"name\": \"${{ inputs.firmware-version }}\", \"target\": \"${{ inputs.firmware-target }}\", \"api\": \"${{ inputs.firmware-api }}\"}" - fi diff --git a/.github/assets/Born2bSportyV2.ttf b/.github/assets/Born2bSportyV2.ttf deleted file mode 100644 index 02001782..00000000 Binary files a/.github/assets/Born2bSportyV2.ttf and /dev/null differ diff --git a/.github/assets/dark_theme_banner.png b/.github/assets/dark_theme_banner.png deleted file mode 100644 index 10a4e8c3..00000000 Binary files a/.github/assets/dark_theme_banner.png and /dev/null differ diff --git a/.github/assets/latest-firmware-template.png b/.github/assets/latest-firmware-template.png deleted file mode 100644 index 7f400ca4..00000000 Binary files a/.github/assets/latest-firmware-template.png and /dev/null differ diff --git a/.github/assets/light_theme_banner.png b/.github/assets/light_theme_banner.png deleted file mode 100644 index 6c6b3b70..00000000 Binary files a/.github/assets/light_theme_banner.png and /dev/null differ diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 798be4b8..00000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,13 +0,0 @@ -# What's new - -- [ Describe changes here ] - -# Verification - -- [ Describe how to verify changes ] - -# Checklist (For Reviewer) - -- [ ] PR has description of feature/bug or link to Confluence/Jira task -- [ ] Description contains actions to verify feature/bugfix -- [ ] I've built this code, uploaded it to the device and verified feature/bugfix diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 38b1d7b6..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,170 +0,0 @@ -name: 'Build' - -on: - push: - branches: - - dev - tags: - - '*' - pull_request: - -env: - DEFAULT_TARGET: f7 - FBT_TOOLCHAIN_PATH: /runner/_work - FBT_GIT_SUBMODULE_SHALLOW: 1 - -jobs: - main: - runs-on: [self-hosted, FlipperZeroShell] - strategy: - fail-fast: false - matrix: - target: [f7, f18] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout code' - uses: actions/checkout@v4 - with: - fetch-depth: 1 - ref: ${{ github.event.pull_request.head.sha }} - - - name: 'Get commit details' - id: names - run: | - BUILD_TYPE='DEBUG=1 COMPACT=0' - if [[ ${{ github.event_name }} == 'pull_request' ]]; then - TYPE="pull" - elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then - TYPE="tag" - BUILD_TYPE='DEBUG=0 COMPACT=1' - else - TYPE="other" - fi - python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}" - echo "event_type=$TYPE" >> $GITHUB_OUTPUT - echo "FBT_BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV - echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV - echo "TARGET_HW=$(echo "${{ matrix.target }}" | sed 's/f//')" >> $GITHUB_ENV - - - name: 'Check API versions for consistency between targets' - run: | - set -e - N_API_HEADER_SIGNATURES=`ls -1 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! - echo API versions are: - head -n2 targets/f*/api_symbols.csv - exit 1 - fi - - - name: 'Build the firmware and apps' - id: build-fw - run: | - ./fbt TARGET_HW=$TARGET_HW $FBT_BUILD_TYPE copro_dist updater_package fap_dist - echo "firmware_api=$(./fbt TARGET_HW=$TARGET_HW get_apiversion)" >> $GITHUB_OUTPUT - - - name: 'Check for uncommitted changes' - run: | - git diff --exit-code - - - name: 'Copy build output' - run: | - set -e - rm -rf artifacts map_analyser_files || true - mkdir artifacts map_analyser_files - cp dist/${TARGET}-*/* artifacts/ || true - tar czpf "artifacts/flipper-z-${TARGET}-resources-${SUFFIX}.tgz" \ - -C build/latest resources - tar czpf "artifacts/flipper-z-${TARGET}-debugapps-${SUFFIX}.tgz" \ - -C dist/${TARGET}-*/apps/Debug . - tar czpf "artifacts/flipper-z-${TARGET}-appsymbols-${SUFFIX}.tgz" \ - -C dist/${TARGET}-*/debug_elf . - - - name: 'Copy universal artifacts' - if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET }} - run: | - tar czpf "artifacts/flipper-z-any-scripts-${SUFFIX}.tgz" scripts - cp build/core2_firmware.tgz "artifacts/flipper-z-any-core2_firmware-${SUFFIX}.tgz" - - - name: 'Upload artifacts to update server' - if: ${{ !github.event.pull_request.head.repo.fork }} - run: | - FILES=$(for ARTIFACT in $(find artifacts -maxdepth 1 -not -type d); do echo "-F files=@${ARTIFACT}"; done) - curl --fail -L -H "Token: ${{ secrets.INDEXER_TOKEN }}" \ - -F "branch=${BRANCH_NAME}" \ - -F "version_token=${COMMIT_SHA}" \ - ${FILES[@]} \ - "${{ secrets.INDEXER_URL }}"/firmware/uploadfiles - - - name: 'Copy & analyse map analyser files' - if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET }} - run: | - cp build/${DEFAULT_TARGET}-firmware-*/firmware.elf.map map_analyser_files/firmware.elf.map - cp build/${DEFAULT_TARGET}-firmware-*/firmware.elf map_analyser_files/firmware.elf - cp ${{ github.event_path }} map_analyser_files/event.json - source scripts/toolchain/fbtenv.sh - get_size() - { - SECTION="$1"; - arm-none-eabi-size \ - -A map_analyser_files/firmware.elf \ - | grep "^$SECTION" | awk '{print $2}' - } - 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")" - python3 -m pip install mariadb==1.1.6 cxxfilt==0.3.0 - python3 scripts/map_parser.py map_analyser_files/firmware.elf.map map_analyser_files/firmware.elf.map.all - python3 scripts/map_mariadb_insert.py \ - ${{ secrets.AMAP_MARIADB_USER }} \ - ${{ secrets.AMAP_MARIADB_PASSWORD }} \ - ${{ secrets.AMAP_MARIADB_HOST }} \ - ${{ secrets.AMAP_MARIADB_PORT }} \ - ${{ secrets.AMAP_MARIADB_DATABASE }} \ - map_analyser_files/firmware.elf.map.all - - - name: 'Find previous comment' - if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }} - uses: peter-evans/find-comment@v2 - id: find-comment - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: 'Compiled ${{ matrix.target }} firmware for commit' - - - name: 'Create or update comment' - if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }} - uses: peter-evans/create-or-update-comment@v3 - with: - comment-id: ${{ steps.find-comment.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body: | - **Compiled ${{ matrix.target }} 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 - - - name: 'SDK submission to staging catalog' - if: ${{ steps.names.outputs.event_type == 'tag' && matrix.target == env.DEFAULT_TARGET }} - uses: ./.github/actions/submit_sdk - with: - catalog-url: ${{ secrets.CATALOG_STAGING_URL }} - catalog-api-token: ${{ secrets.CATALOG_STAGING_API_TOKEN }} - firmware-api: ${{ steps.build-fw.outputs.firmware_api }} - firmware-target: ${{ matrix.target }} - firmware-version: ${{ steps.names.outputs.suffix }} - - - name: 'SDK submission to prod catalog' - if: ${{ steps.names.outputs.event_type == 'tag' && matrix.target == env.DEFAULT_TARGET }} - uses: ./.github/actions/submit_sdk - with: - catalog-url: ${{ secrets.CATALOG_URL }} - catalog-api-token: ${{ secrets.CATALOG_API_TOKEN }} - firmware-api: ${{ steps.build-fw.outputs.firmware_api }} - firmware-target: ${{ matrix.target }} - firmware-version: ${{ steps.names.outputs.suffix }} diff --git a/.github/workflows/build_compact.yml b/.github/workflows/build_compact.yml deleted file mode 100644 index f4527520..00000000 --- a/.github/workflows/build_compact.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: 'Compact build' - -on: - pull_request: - -env: - FBT_TOOLCHAIN_PATH: /runner/_work - FBT_GIT_SUBMODULE_SHALLOW: 1 - -jobs: - compact: - runs-on: [self-hosted, FlipperZeroShell] - strategy: - fail-fast: false - matrix: - target: [f7, f18] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout code' - uses: actions/checkout@v4 - 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 - echo "hw-target-code=$TARGET" >> $GITHUB_OUTPUT - - - name: Deploy uFBT with SDK - uses: flipperdevices/flipperzero-ufbt-action@v0.1 - with: - task: setup - sdk-file: ${{ steps.build-fw.outputs.sdk-file }} - sdk-hw-target: ${{ steps.build-fw.outputs.hw-target-code }} - - - 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/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 - -## Uncomment this for a single job that will run only if all targets are built successfully -# report-status: -# name: Report status -# needs: [compact] -# if: always() && !contains(needs.*.result, 'failure') -# runs-on: [self-hosted, FlipperZeroShell] -# steps: -# - run: echo "All good ✨" ; diff --git a/.github/workflows/lint_and_submodule_check.yml b/.github/workflows/lint_and_submodule_check.yml deleted file mode 100644 index 3f4d8c79..00000000 --- a/.github/workflows/lint_and_submodule_check.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: 'Lint sources & check submodule integrity' - -on: - pull_request: - -env: - TARGETS: f7 - FBT_TOOLCHAIN_PATH: /runner/_work - SET_GH_OUTPUT: 1 - -jobs: - lint_sources_check_submodules: - runs-on: [self-hosted, FlipperZeroShell] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout code' - uses: actions/checkout@v4 - with: - fetch-depth: 2 - ref: ${{ github.sha }} - - - name: 'Check protobuf branch' - run: | - git submodule update --init; - SUB_PATH="assets/protobuf"; - SUB_BRANCH="dev"; - SUB_COMMITS_MIN=40; - cd "$SUB_PATH"; - SUBMODULE_HASH="$(git rev-parse HEAD)"; - BRANCHES=$(git branch -r --contains "$SUBMODULE_HASH"); - COMMITS_IN_BRANCH="$(git rev-list --count dev)"; - if [ $COMMITS_IN_BRANCH -lt $SUB_COMMITS_MIN ]; then - echo "name=fails::error" >> $GITHUB_OUTPUT; - echo "::error::Error: Too few commits in $SUB_BRANCH of submodule $SUB_PATH: $COMMITS_IN_BRANCH(expected $SUB_COMMITS_MIN+)"; - exit 1; - fi - if ! grep -q "/$SUB_BRANCH" <<< "$BRANCHES"; then - echo "name=fails::error" >> $GITHUB_OUTPUT; - echo "::error::Error: Submodule $SUB_PATH is not on branch $SUB_BRANCH"; - exit 1; - fi - - - name: 'Check for new TODOs' - id: check_todos - if: github.event_name == 'pull_request' - run: | - set +e; - git diff --unified=0 --no-color ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -E '^\+' | grep -i -E '(TODO|HACK|FIXME|XXX)[ :]' | grep -v -- '-nofl' > lines.log; - MISSING_TICKETS=$( grep -v -E 'FL-[0-9]+' lines.log ); - if [ -n "$MISSING_TICKETS" ]; then - echo "Error: Missing ticket number in \`TODO\` comment(s)" >> $GITHUB_STEP_SUMMARY; - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY; - echo "$MISSING_TICKETS" >> $GITHUB_STEP_SUMMARY; - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY; - exit 1; - else - echo "No new TODOs without tickets found" >> $GITHUB_STEP_SUMMARY; - fi - - - name: 'Check Python code formatting' - id: syntax_check_py - if: always() - run: | - set +e; - ./fbt -s lint_py 2>&1 | tee lint-py.log; - if [ "${PIPESTATUS[0]}" -ne 0 ]; then - # Save multiline output - echo "errors=1" >> $GITHUB_OUTPUT; - printf "Python Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; - echo "$(cat lint-py.log)" >> $GITHUB_STEP_SUMMARY; - printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; - exit 1; - else - echo "Python Lint: all good ✨" >> $GITHUB_STEP_SUMMARY; - fi - - - name: 'Check C++ code formatting' - id: syntax_check_cpp - if: always() - run: | - set +e; - ./fbt -s lint 2>&1 | tee lint-cpp.log; - if [ "${PIPESTATUS[0]}" -ne 0 ]; then - # Save multiline output - echo "errors=1" >> $GITHUB_OUTPUT; - printf "C Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; - echo "$(cat lint-cpp.log)" >> $GITHUB_STEP_SUMMARY; - printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY; - exit 1; - else - echo "C Lint: all good ✨" >> $GITHUB_STEP_SUMMARY; - fi - - - name: Report code formatting errors - if: ( steps.syntax_check_py.outputs.errors || steps.syntax_check_cpp.outputs.errors ) && github.event.pull_request - run: | - echo "Code formatting errors found"; - echo "Please run './fbt format' or './fbt format_py' to fix them"; - exit 1; diff --git a/.github/workflows/merge_report.yml b/.github/workflows/merge_report.yml deleted file mode 100644 index 90302ce1..00000000 --- a/.github/workflows/merge_report.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Check FL ticket in PR name' - -on: - push: - branches: - - dev - -env: - FBT_TOOLCHAIN_PATH: /runner/_work - -jobs: - merge_report: - runs-on: [self-hosted, FlipperZeroShell] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout code' - uses: actions/checkout@v4 - with: - fetch-depth: 1 - 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: 'Check ticket and report' - run: | - source scripts/toolchain/fbtenv.sh - python3 -m pip install slack_sdk - python3 scripts/merge_report_qa.py \ - ${{ secrets.QA_REPORT_SLACK_TOKEN }} \ - ${{ secrets.QA_REPORT_SLACK_CHANNEL }} - diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml deleted file mode 100644 index 4527e292..00000000 --- a/.github/workflows/pvs_studio.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: 'Static C/C++ analysis with PVS-Studio' - -on: - push: - branches: - - dev - pull_request: - -env: - TARGETS: f7 - DEFAULT_TARGET: f7 - FBT_TOOLCHAIN_PATH: /runner/_work - FBT_GIT_SUBMODULE_SHALLOW: 1 - -jobs: - analyse_c_cpp: - if: ${{ !github.event.pull_request.head.repo.fork }} - runs-on: [self-hosted, FlipperZeroShell] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout code' - uses: actions/checkout@v4 - 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 }}" - - - name: 'Supply PVS credentials' - run: | - pvs-studio-analyzer credentials ${{ secrets.PVS_STUDIO_CREDENTIALS }} - - - name: 'Convert PVS-Studio output to html and detect warnings' - id: pvs-warn - run: | - WARNINGS=0 - ./fbt COMPACT=1 PVSNOBROWSER=1 firmware_pvs || WARNINGS=1 - echo "warnings=${WARNINGS}" >> $GITHUB_OUTPUT - - - name: 'Upload report' - if: ${{ !github.event.pull_request.head.repo.fork && (steps.pvs-warn.outputs.warnings != 0) }} - uses: prewk/s3-cp-action@v2 - with: - aws_s3_endpoint: "${{ secrets.PVS_AWS_ENDPOINT }}" - aws_access_key_id: "${{ secrets.PVS_AWS_ACCESS_KEY }}" - aws_secret_access_key: "${{ secrets.PVS_AWS_SECRET_KEY }}" - source: "./build/f7-firmware-DC/pvsreport" - dest: "s3://${{ secrets.PVS_AWS_BUCKET }}/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/" - flags: "--recursive --acl public-read" - - - name: 'Find Previous Comment' - if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request && (steps.pvs-warn.outputs.warnings != 0) }} - uses: peter-evans/find-comment@v2 - 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 && (steps.pvs-warn.outputs.warnings != 0) }} - 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.commit_sha}}`:** - - [Report](https://pvs.flipp.dev/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/index.html) - edit-mode: replace - - - name: 'Raise exception' - if: ${{ steps.pvs-warn.outputs.warnings != 0 }} - run: | - echo "Please fix all PVS warnings before merge" - exit 1 - diff --git a/.github/workflows/reindex.yml b/.github/workflows/reindex.yml deleted file mode 100644 index 82cb0468..00000000 --- a/.github/workflows/reindex.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: 'Reindex' - -on: - release: - types: [prereleased,released] - -jobs: - reindex: - name: 'Reindex updates' - runs-on: [self-hosted, FlipperZeroShell] - steps: - - name: Trigger reindex - run: | - curl --fail -L -H "Token: ${{ secrets.INDEXER_TOKEN }}" \ - "${{ secrets.INDEXER_URL }}"/firmware/reindex diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml deleted file mode 100644 index 40f72bd0..00000000 --- a/.github/workflows/unit_tests.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: 'Unit tests' - -on: - pull_request: - -env: - TARGETS: f7 - DEFAULT_TARGET: f7 - FBT_TOOLCHAIN_PATH: /opt - FBT_GIT_SUBMODULE_SHALLOW: 1 - -jobs: - run_units_on_bench: - runs-on: [self-hosted, FlipperZeroUnitTest] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 1 - ref: ${{ github.event.pull_request.head.sha }} - - - name: 'Get flipper from device manager (mock)' - id: device - run: | - echo "flipper=/dev/ttyACM0" >> $GITHUB_OUTPUT - - - name: 'Flash unit tests firmware' - id: flashing - if: success() - timeout-minutes: 10 - run: | - ./fbt resources firmware_latest flash SWD_TRANSPORT_SERIAL=2A0906016415303030303032 LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1 - - - name: 'Wait for flipper and format ext' - id: format_ext - if: steps.flashing.outcome == 'success' - timeout-minutes: 5 - run: | - source scripts/toolchain/fbtenv.sh - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} format_ext - - - name: 'Copy assets and unit data, reboot and wait for flipper' - id: copy - if: steps.format_ext.outcome == 'success' - timeout-minutes: 7 - run: | - source scripts/toolchain/fbtenv.sh - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - rm -rf build/latest/resources/dolphin - python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} -f send build/latest/resources /ext - python3 scripts/power.py -p ${{steps.device.outputs.flipper}} reboot - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - - - name: 'Run units and validate results' - id: run_units - if: steps.copy.outcome == 'success' - timeout-minutes: 7 - run: | - source scripts/toolchain/fbtenv.sh - python3 scripts/testing/units.py ${{steps.device.outputs.flipper}} - - - name: 'Check GDB output' - if: failure() - run: | - ./fbt gdb_trace_all SWD_TRANSPORT_SERIAL=2A0906016415303030303032 LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1 diff --git a/.github/workflows/updater_test.yml b/.github/workflows/updater_test.yml deleted file mode 100644 index b14b618a..00000000 --- a/.github/workflows/updater_test.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: 'Updater test' - -on: - pull_request: - -env: - TARGETS: f7 - DEFAULT_TARGET: f7 - FBT_TOOLCHAIN_PATH: /opt - FBT_GIT_SUBMODULE_SHALLOW: 1 - -jobs: - test_updater_on_bench: - runs-on: [self-hosted, FlipperZeroUpdaterTest] - steps: - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 1 - submodules: false - ref: ${{ github.event.pull_request.head.sha }} - - - name: 'Get flipper from device manager (mock)' - id: device - run: | - echo "flipper=Rekigyn" >> $GITHUB_OUTPUT - echo "stlink=0F020D026415303030303032" >> $GITHUB_OUTPUT - - - name: 'Flashing target firmware' - id: first_full_flash - timeout-minutes: 10 - run: | - source scripts/toolchain/fbtenv.sh - ./fbt flash_usb_full PORT=${{steps.device.outputs.flipper}} FORCE=1 - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - - - name: 'Validating updater' - id: second_full_flash - timeout-minutes: 10 - if: success() - run: | - source scripts/toolchain/fbtenv.sh - ./fbt flash_usb PORT=${{steps.device.outputs.flipper}} FORCE=1 - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - - - name: 'Get last release tag' - id: release_tag - if: failure() - run: | - echo "tag=$(git tag -l --sort=-version:refname | grep -v "rc\|RC" | head -1)" >> $GITHUB_OUTPUT - - - name: 'Wipe workspace' - run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - - - name: 'Checkout latest release' - uses: actions/checkout@v4 - if: failure() - with: - fetch-depth: 1 - ref: ${{ steps.release_tag.outputs.tag }} - - - name: 'Flash last release' - if: failure() - run: | - ./fbt flash SWD_TRANSPORT_SERIAL=${{steps.device.outputs.stlink}} FORCE=1 - - - name: 'Wait for flipper and format ext' - if: failure() - run: | - source scripts/toolchain/fbtenv.sh - python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}} - python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} format_ext