InfiniTime/.github/workflows/main.yml
2023-01-07 20:58:18 +02:00

194 lines
6.7 KiB
YAML

name: CI
# Run this workflow whenever the build may be affected
on:
push:
branches: [ master, develop ]
paths-ignore:
- 'doc/**'
- '**.md'
pull_request:
branches: [ develop ]
paths-ignore:
- '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:
- name: Checkout source files
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build
shell: bash
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
- name: Upload DFU artifacts
uses: actions/upload-artifact@v3
with:
name: InfiniTime DFU ${{ github.head_ref }}
path: ./build/output/pinetime-mcuboot-app-dfu/*
- name: Upload MCUBoot image artifacts
uses: actions/upload-artifact@v3
with:
name: InfiniTime MCUBoot image ${{ github.head_ref }}
path: ./build/output/pinetime-mcuboot-app-image-*.bin
- name: Upload resources artifacts
uses: actions/upload-artifact@v3
with:
name: InfiniTime resources ${{ github.head_ref }}
path: ./build/output/infinitime-resources-*.zip
build-simulator:
runs-on: ubuntu-latest
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 lv_font_conv
run:
npm i -g lv_font_conv@1.5.2
- name: Checkout source files
uses: actions/checkout@v2
with:
submodules: recursive
- name: Get InfiniSim repo
run: |
git clone https://github.com/InfiniTimeOrg/InfiniSim.git --depth 1 --branch main
git -C InfiniSim submodule update --init lv_drivers libpng
- name: CMake
# disable BUILD_RESOURCES as this is already done when building the firmware
run: |
cmake -G Ninja -S InfiniSim -B build_lv_sim -DInfiniTime_DIR="${PWD}" -DBUILD_RESOURCES=OFF
- name: Build simulator executable
run: |
cmake --build build_lv_sim
- name: Upload simulator executable
uses: actions/upload-artifact@v3
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: Cache sources
id: cache-sources
uses: actions/cache@v3
with:
path: .
key: source-files-${{ github.event.pull_request.base.sha }}
- if: ${{ steps.cache-sources.outputs.cache-hit != 'true' }}
name: Checkout source files
uses: actions/checkout@v3
with:
ref: ${{ github.base_ref }}
submodules: recursive
- if: ${{ steps.cache-sources.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" >> $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" >> $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