name: CI # Run this workflow whenever the build may be affected on: push: branches: [ main ] paths-ignore: - 'doc/**' - '**.md' pull_request: branches: [ main ] paths-ignore: - 'doc/**' - '**.md' jobs: build-firmware: 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 source files uses: actions/checkout@v3 with: submodules: recursive - name: Install resource build dependencies run: | apt-get update apt-get -y install --no-install-recommends python3-pil - 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: Set ref_name, but replace slashes with dashes. shell: bash env: ref_name: ${{ github.head_ref || github.ref_name }} run: echo "REF_NAME=${ref_name//\//-}" >> $GITHUB_ENV - name: Upload DFU artifacts uses: actions/upload-artifact@v3 with: name: InfiniTime DFU ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-dfu/* - name: Upload MCUBoot image artifacts uses: actions/upload-artifact@v3 with: name: InfiniTime MCUBoot image ${{ env.REF_NAME }} path: ./build/output/pinetime-mcuboot-app-image-*.bin - name: Upload standalone ELF artifacts uses: actions/upload-artifact@v3 with: name: InfiniTime image ${{ env.REF_NAME }} path: ./build/output/src/pinetime-app-*.out - name: Upload resources artifacts uses: actions/upload-artifact@v3 with: name: InfiniTime resources ${{ env.REF_NAME }} path: ./build/output/infinitime-resources-*.zip build-simulator: runs-on: ubuntu-22.04 steps: - name: Install SDL2 and libpng development package run: | sudo apt-get update sudo apt-get -y install libsdl2-dev libpng-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@v3 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 - 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-${{ env.REF_NAME }} 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' name: 'Compare build size' 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: Write comment information to files run: | tee comment << EOF 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 | EOF - name: Upload comment uses: actions/upload-artifact@v3 with: name: comment path: comment