From f199beafb21b7df01b62a239a3a7978e0fcc59c2 Mon Sep 17 00:00:00 2001 From: Andreas Fruhwirt Date: Fri, 19 Jan 2024 17:20:10 +0100 Subject: [PATCH] removed github folder --- .github/CODEOWNERS | 68 ------- .github/ISSUE_TEMPLATE/01_bug_report.yml | 46 ----- .github/ISSUE_TEMPLATE/02_enhancements.yml | 21 --- .github/ISSUE_TEMPLATE/03_feature_request.yml | 24 --- .github/ISSUE_TEMPLATE/config.yml | 5 - .github/actions/submit_sdk/action.yml | 78 -------- .github/assets/Born2bSportyV2.ttf | Bin 55532 -> 0 bytes .github/assets/dark_theme_banner.png | Bin 48709 -> 0 bytes .github/assets/latest-firmware-template.png | Bin 19684 -> 0 bytes .github/assets/light_theme_banner.png | Bin 45320 -> 0 bytes .github/pull_request_template.md | 13 -- .github/workflows/build.yml | 170 ------------------ .github/workflows/build_compact.yml | 86 --------- .../workflows/lint_and_submodule_check.yml | 101 ----------- .github/workflows/merge_report.yml | 42 ----- .github/workflows/pvs_studio.yml | 88 --------- .github/workflows/reindex.yml | 15 -- .github/workflows/unit_tests.yml | 69 ------- .github/workflows/updater_test.yml | 75 -------- 19 files changed, 901 deletions(-) delete mode 100644 .github/CODEOWNERS delete mode 100644 .github/ISSUE_TEMPLATE/01_bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/02_enhancements.yml delete mode 100644 .github/ISSUE_TEMPLATE/03_feature_request.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/actions/submit_sdk/action.yml delete mode 100644 .github/assets/Born2bSportyV2.ttf delete mode 100644 .github/assets/dark_theme_banner.png delete mode 100644 .github/assets/latest-firmware-template.png delete mode 100644 .github/assets/light_theme_banner.png delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/build_compact.yml delete mode 100644 .github/workflows/lint_and_submodule_check.yml delete mode 100644 .github/workflows/merge_report.yml delete mode 100644 .github/workflows/pvs_studio.yml delete mode 100644 .github/workflows/reindex.yml delete mode 100644 .github/workflows/unit_tests.yml delete mode 100644 .github/workflows/updater_test.yml 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 02001782191bb61a6e111d0c10cae154ef9a298f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55532 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 diff --git a/.github/assets/dark_theme_banner.png b/.github/assets/dark_theme_banner.png deleted file mode 100644 index 10a4e8c30099acde9d7047875ab6105a2ddbacf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48709 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 GvHt^>$Cph2 diff --git a/.github/assets/latest-firmware-template.png b/.github/assets/latest-firmware-template.png deleted file mode 100644 index 7f400ca4f2e95463e7eac6f64257b4339374f712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19684 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

Mpg7N5(kH`?0 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

}(Eut!CnJO%Cy1X&pzO%XoB61iNdqDp&#W#L&9> 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 a7fI|VyFm0Pqy!*8NQ$zmGPP3Xq5lsK>#ZsP 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