name: Membrowse Memory Report on: pull_request: types: [opened, synchronize, reopened, ready_for_review] push: branches: [master] workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.sha || github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: load-targets: # Only run from the wolfssl org to avoid burning forks' CI minutes # and reporting fork builds to the membrowse backend. if: github.repository_owner == 'wolfssl' && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) runs-on: ubuntu-24.04 timeout-minutes: 10 outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Checkout repository uses: actions/checkout@v5 - name: Load target matrix id: set-matrix run: echo "matrix=$(jq -c '.' .github/membrowse-targets.json)" >> $GITHUB_OUTPUT check-changes: if: github.repository_owner == 'wolfssl' && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) runs-on: ubuntu-24.04 timeout-minutes: 5 outputs: needs_build: ${{ steps.filter.outputs.code == 'true' || github.event_name == 'workflow_dispatch' }} steps: - name: Checkout repository uses: actions/checkout@v5 - name: Detect binary-affecting changes id: filter if: github.event_name == 'pull_request' || github.event_name == 'push' uses: dorny/paths-filter@v4 with: predicate-quantifier: every filters: | code: - '!**.md' - '!**/README*' - '!doc/**' - '!AUTHORS' - '!COPYING*' - '!LICENSE*' - '!LICENSING' - '!INSTALL' - '!ChangeLog*' - '!SCRIPTS-LIST' - '!.gitignore' - '!.editorconfig' - '!.codespellexcludelines' - '!.cyignore' - '!.wolfssl_known_macro_extras' - '!.github/ISSUE_TEMPLATE/**' - '!.github/PULL_REQUEST_TEMPLATE.md' analyze: needs: [load-targets, check-changes] if: github.repository_owner == 'wolfssl' && (github.event_name != 'pull_request' || needs.check-changes.outputs.needs_build == 'true') runs-on: ubuntu-24.04 timeout-minutes: 30 strategy: fail-fast: false matrix: include: ${{ fromJson(needs.load-targets.outputs.matrix || '[]') }} steps: - name: Checkout repository uses: actions/checkout@v5 with: fetch-depth: 2 submodules: ${{ needs.check-changes.outputs.needs_build == 'true' && 'recursive' || 'false' }} - name: Install packages if: needs.check-changes.outputs.needs_build == 'true' uses: ./.github/actions/install-apt-deps with: packages: ${{ matrix.apt_packages }} ghcr-debs-tag: ${{ matrix.ghcr_tag }} - name: Build firmware if: needs.check-changes.outputs.needs_build == 'true' run: ${{ matrix.build_cmd }} - name: Run Membrowse PR Action id: analyze uses: membrowse/membrowse-action@v1 with: target_name: ${{ matrix.target_name }} elf: ${{ needs.check-changes.outputs.needs_build == 'true' && matrix.elf || '' }} ld: ${{ needs.check-changes.outputs.needs_build == 'true' && matrix.ld || '' }} map_file: ${{ needs.check-changes.outputs.needs_build == 'true' && matrix.map_file || '' }} linker_vars: ${{ matrix.linker_vars }} api_key: ${{ secrets.MEMBROWSE_API_KEY }} api_url: ${{ vars.MEMBROWSE_API_URL }} identical: ${{ needs.check-changes.outputs.needs_build != 'true' }} verbose: INFO