aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/docker.yml2
-rw-r--r--.github/workflows/format.yml4
-rwxr-xr-x.github/workflows/getSize.sh19
-rw-r--r--.github/workflows/main.yml143
4 files changed, 150 insertions, 18 deletions
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 8d45fe08..7af81515 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -14,7 +14,7 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
env:
USERNAME: infinitime
steps:
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 23f71a94..32451a0b 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -23,7 +23,7 @@ jobs:
- name: Install clang-format
run: |
sudo apt-get update
- sudo apt-get -y install clang-format-12
+ sudo apt-get -y install clang-format-14
- name: Check formatting
run: tests/test-format.sh
@@ -55,7 +55,7 @@ jobs:
- name: Install clang-tidy
run: |
apt-get update
- apt-get -y install clang-tidy-12
+ apt-get -y install clang-tidy-14
- name: Prepare environment
shell: bash
env:
diff --git a/.github/workflows/getSize.sh b/.github/workflows/getSize.sh
new file mode 100755
index 00000000..52a86132
--- /dev/null
+++ b/.github/workflows/getSize.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Requires environment variables from docker/build.sh
+
+set -e
+
+SIZE_BIN="$TOOLS_DIR/$GCC_ARM_PATH/bin/arm-none-eabi-size"
+[ ! -x "$SIZE_BIN" ] && exit 1
+
+[ -z "$1" ] && exit 1
+SIZE_OUTPUT=$($SIZE_BIN "$1" | tail -n1)
+
+TEXT_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 1 |tr -d '[:blank:]')
+DATA_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 2 |tr -d '[:blank:]')
+BSS_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 3 |tr -d '[:blank:]')
+
+echo "text_size=$TEXT_SIZE"
+echo "data_size=$DATA_SIZE"
+echo "bss_size=$BSS_SIZE"
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 35d5ed1c..cdef2d03 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -13,28 +13,32 @@ on:
- 'doc/**'
- '**.md'
-
jobs:
build-firmware:
runs-on: ubuntu-latest
container:
image: infinitime/infinitime-build
+ outputs:
+ text_size: ${{ steps.output-sizes.outputs.text_size }}
+ data_size: ${{ steps.output-sizes.outputs.data_size }}
+ bss_size: ${{ steps.output-sizes.outputs.bss_size }}
+ env:
+ # InfiniTime sources are downloaded to the current directory.
+ # Override SOURCES_DIR in build.sh
+ SOURCES_DIR: .
steps:
- # This workaround fixes the error "unsafe repository (REPO is owned by someone else)".
- # See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766
- # The fix in "actions/checkout@v2" was not sufficient as the build process also uses git (to get the current
- # commit hash, for example).
- - name: Workaround permission issues
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Checkout source files
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Build
shell: bash
- env:
- SOURCES_DIR: .
run: /opt/build.sh all
+ - name: Output build size
+ id: output-sizes
+ run: |
+ . /opt/build.sh
+ .github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT
# Unzip the package because Upload Artifact will zip up the files
- name: Unzip DFU package
run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu
@@ -55,22 +59,23 @@ jobs:
path: ./build/output/infinitime-resources-*.zip
build-simulator:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- - name: Install cmake
- uses: lukka/get-cmake@v3.18.3
-
- name: Install SDL2 development package
run: |
sudo apt-get update
sudo apt-get -y install libsdl2-dev
+ - name: Install Ninja
+ run: |
+ sudo apt-get -y install ninja-build
+
- name: Install lv_font_conv
run:
npm i -g lv_font_conv@1.5.2
- name: Checkout source files
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
@@ -93,3 +98,111 @@ jobs:
with:
name: infinisim-${{ github.head_ref }}
path: build_lv_sim/infinisim
+
+ get-base-ref-size:
+ if: github.event_name == 'pull_request'
+ runs-on: ubuntu-22.04
+ container:
+ image: infinitime/infinitime-build
+ outputs:
+ text_size: ${{ steps.output-sizes.outputs.text_size }}
+ data_size: ${{ steps.output-sizes.outputs.data_size }}
+ bss_size: ${{ steps.output-sizes.outputs.bss_size }}
+ env:
+ # InfiniTime sources are downloaded to the current directory.
+ # Override SOURCES_DIR in build.sh
+ SOURCES_DIR: .
+ steps:
+ - name: Checkout current base branch files
+ uses: actions/checkout@v3
+ with:
+ ref: ${{ github.base_ref }}
+ submodules: recursive
+
+ - name: Get base branch SHA
+ id: get-base-sha
+ run: |
+ # Fix for "detected dubious ownership in repository at '/__w/InfiniTime/InfiniTime'"
+ git config --global --add safe.directory /__w/InfiniTime/InfiniTime
+ echo base_sha=$(git rev-parse HEAD) >> $GITHUB_OUTPUT
+
+ - name: Cache build
+ id: cache-build
+ uses: actions/cache@v3
+ with:
+ path: ./build
+ key: build-files-${{ steps.get-base-sha.outputs.base_sha }}
+
+ - if: ${{ steps.cache-build.outputs.cache-hit != 'true' }}
+ name: Build
+ shell: bash
+ # Only pinetime-app target is needed, but post_build.sh fails
+ run: /opt/build.sh all
+
+ - name: Output build size
+ id: output-sizes
+ run: |
+ . /opt/build.sh
+ .github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT
+
+ compare-build-size:
+ if: github.event_name == 'pull_request'
+ needs: [build-firmware, get-base-ref-size]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Compare build size
+ id: output-sizes-diff
+ run: |
+ TEXT_SIZE=${{ needs.build-firmware.outputs.text_size }}
+ DATA_SIZE=${{ needs.build-firmware.outputs.data_size }}
+ BSS_SIZE=${{ needs.build-firmware.outputs.bss_size }}
+
+ echo "text_size=$TEXT_SIZE"
+ echo "data_size=$DATA_SIZE"
+ echo "bss_size=$BSS_SIZE"
+
+ echo "text_size=$TEXT_SIZE" >> $GITHUB_OUTPUT
+ echo "data_size=$DATA_SIZE" >> $GITHUB_OUTPUT
+ echo "bss_size=$BSS_SIZE" >> $GITHUB_OUTPUT
+
+ TEXT_SIZE_BASE=${{ needs.get-base-ref-size.outputs.text_size }}
+ DATA_SIZE_BASE=${{ needs.get-base-ref-size.outputs.data_size }}
+ BSS_SIZE_BASE=${{ needs.get-base-ref-size.outputs.bss_size }}
+
+ TEXT_SIZE_DIFF=$((TEXT_SIZE - TEXT_SIZE_BASE))
+ DATA_SIZE_DIFF=$((DATA_SIZE - DATA_SIZE_BASE))
+ BSS_SIZE_DIFF=$((BSS_SIZE - BSS_SIZE_BASE))
+
+ echo "text_diff=$TEXT_SIZE_DIFF"
+ echo "data_diff=$DATA_SIZE_DIFF"
+ echo "bss_diff=$BSS_SIZE_DIFF"
+
+ echo "text_diff=$TEXT_SIZE_DIFF" >> $GITHUB_OUTPUT
+ echo "data_diff=$DATA_SIZE_DIFF" >> $GITHUB_OUTPUT
+ echo "bss_diff=$BSS_SIZE_DIFF" >> $GITHUB_OUTPUT
+
+ - name: Find Comment
+ # Due to a security concern, comments can only be created in the context of branches in the repo.
+ # PRs from forks can't get the comment.
+ if: github.event.pull_request.head.repo.full_name == github.repository
+ uses: peter-evans/find-comment@v2
+ id: build-size-comment
+ with:
+ issue-number: ${{ github.event.pull_request.number }}
+ comment-author: 'github-actions[bot]'
+ body-includes: Build size and comparison to
+
+ - name: Create or update comment
+ if: github.event.pull_request.head.repo.full_name == github.repository
+ uses: peter-evans/create-or-update-comment@v2
+ with:
+ comment-id: ${{ steps.build-size-comment.outputs.comment-id }}
+ issue-number: ${{ github.event.pull_request.number }}
+ body: |
+ Build size and comparison to ${{ github.base_ref }}:
+ | Section | Size | Difference |
+ | ------- | ---- | ---------- |
+ | text | ${{ needs.build-firmware.outputs.text_size }}B | ${{ steps.output-sizes-diff.outputs.text_diff }}B |
+ | data | ${{ needs.build-firmware.outputs.data_size }}B | ${{ steps.output-sizes-diff.outputs.data_diff }}B |
+ | bss | ${{ needs.build-firmware.outputs.bss_size }}B | ${{ steps.output-sizes-diff.outputs.bss_diff }}B |
+ edit-mode: replace