Willy-JL 1 год назад
Родитель
Сommit
2c231559a2
1 измененных файлов с 156 добавлено и 0 удалено
  1. 156 0
      .github/workflows/build.yml

+ 156 - 0
.github/workflows/build.yml

@@ -0,0 +1,156 @@
+name: "Build"
+
+on:
+  push:
+    branches:
+      - "**"
+      - "!release"
+    tags:
+      - "*"
+  pull_request:
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+  cancel-in-progress: true
+
+env:
+  DEFAULT_TARGET: f7
+  FBT_GIT_SUBMODULE_SHALLOW: 1
+
+jobs:
+  build:
+    permissions:
+      issues: write
+      pull-requests: write
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        target: [f7]
+    steps:
+      - 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=0 COMPACT=1'
+          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 "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: "Check API version for consistency with OFW release-candidate"
+        run: |
+          set -e
+          symbols="targets/$TARGET/api_symbols.csv"
+          ofw_api="$(curl -s "https://raw.githubusercontent.com/flipperdevices/flipperzero-firmware/release-candidate/${symbols}" | head -n2)"
+          our_api="$(head -n2 "${symbols}")"
+          if [ "$our_api" != "$ofw_api" ] ; then
+            echo API versions aren\'t matching OFW. Please update!
+            echo API versions are:
+            echo "Official: $(tail -n1 <<< "$ofw_api")"
+            echo "Momentum: $(tail -n1 <<< "$our_api")"
+            exit 1
+          fi
+
+      - name: "Build the firmware and apps"
+        id: build-fw
+        run: |
+          ./fbt TARGET_HW=$TARGET_HW $FBT_BUILD_TYPE updater_package
+          echo "firmware_api=$(./fbt TARGET_HW=$TARGET_HW get_apiversion)" >> $GITHUB_OUTPUT
+
+      - name: "Check for uncommitted changes"
+        run: |
+          git diff --exit-code
+
+      - name: "Upload artifacts to GitHub"
+        uses: actions/upload-artifact@v3
+        with:
+          path: |
+            dist/${{ env.TARGET }}-*/flipper-z-${{ env.TARGET }}-update-*
+            dist/${{ env.TARGET }}-*/flipper-z-${{ env.TARGET }}-sdk-*
+
+      - name: "Copy build output"
+        env:
+          INDEXER_URL: ${{ secrets.INDEXER_URL }}
+        if: ${{ env.INDEXER_URL != '' && (github.event.pull_request || (github.event_name == 'push' && ((github.ref_name == 'dev' && !contains(github.event.head_commit.message, '--nobuild')) || startsWith(github.ref, 'refs/tags/')))) }}
+        run: |
+          set -e
+          rm -rf artifacts || true
+          mkdir artifacts
+          cp dist/${TARGET}-*/flipper-z-${TARGET}-{update,sdk}-* artifacts/
+          cd dist/${TARGET}-*/${TARGET}-update-*/
+          ARTIFACT_TAG=flipper-z-"$(basename "$(realpath .)")"
+          7z a ../../../artifacts/${ARTIFACT_TAG}.zip .
+          echo "ARTIFACT_TAG=$ARTIFACT_TAG" >> $GITHUB_ENV
+          VERSION_TAG="$(basename "$(realpath .)" | cut -d- -f3-)"
+          echo "VERSION_TAG=$VERSION_TAG" >> $GITHUB_ENV
+
+      - name: "Upload artifacts to update server"
+        env:
+          INDEXER_URL: ${{ secrets.INDEXER_URL }}
+        if: ${{ env.INDEXER_URL != '' && (github.event.pull_request || (github.event_name == 'push' && ((github.ref_name == 'dev' && !contains(github.event.head_commit.message, '--nobuild')) || startsWith(github.ref, 'refs/tags/')))) }}
+        run: |
+          curl "${{ secrets.INDEXER_URL }}"/firmware/directory.json > previndex.json
+          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: "Find previous comment"
+        env:
+          INDEXER_URL: ${{ secrets.INDEXER_URL }}
+        if: ${{ env.INDEXER_URL != '' && github.event.pull_request && matrix.target == env.DEFAULT_TARGET }}
+        uses: peter-evans/find-comment@v3
+        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"
+        env:
+          INDEXER_URL: ${{ secrets.INDEXER_URL }}
+        if: ${{ env.INDEXER_URL != '' && github.event.pull_request && matrix.target == env.DEFAULT_TARGET }}
+        uses: peter-evans/create-or-update-comment@v4
+        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}}`:**
+            - [☁️ Flipper Lab/App](https://lab.flipper.net/?url=${{secrets.INDEXER_URL}}/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz&channel=mntm-${{steps.names.outputs.branch_name}}&version=${{steps.names.outputs.commit_sha}})
+            - [📦 qFlipper Package](${{secrets.INDEXER_URL}}/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz)
+          edit-mode: replace
+
+      - name: Send devbuild webhook
+        env:
+          INDEXER_URL: ${{ secrets.INDEXER_URL }}
+          BUILD_WEBHOOK: ${{ secrets.BUILD_WEBHOOK }}
+        if: ${{ env.INDEXER_URL != '' && github.event_name == 'push' && github.ref_name == 'dev' && !contains(github.event.head_commit.message, '--nobuild') }}
+        run: |
+          python .github/workflow_data/devbuild.py