name: 'Build' on: push env: TARGETS: f6 jobs: build: runs-on: [self-hosted] steps: - name: 'Cleanup workspace' uses: AutoModality/action-clean@v1 - name: 'Decontaminate previous build leftovers' run: | git submodule status \ || git checkout `git rev-list --max-parents=0 HEAD | tail -n 1` - name: 'Checkout code' uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - name: 'Docker cache' uses: satackey/action-docker-layer-caching@v0.0.11 continue-on-error: true with: key: docker-cache-${{ hashFiles('docker/**') }}-{hash} restore-keys: docker-cache-${{ hashFiles('docker/**') }}- - name: 'Build docker image' uses: ./.github/actions/docker - name: 'Make artifacts directory' run: | test -d artifacts && rm -rf artifacts || true mkdir artifacts - name: 'Generate tag suffix' if: startsWith(github.ref, 'refs/tags/') == true run: echo "SUFFIX=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - name: 'Generate branch suffix' if: startsWith(github.ref, 'refs/tags/') != true run: echo "SUFFIX=$(date +'%Y-%m-%d')-$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: 'Build bootloader in docker' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do make -j$(nproc) -C bootloader TARGET=${TARGET} done - name: 'Generate dfu file for bootloader' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do hex2dfu \ -i bootloader/.obj/${TARGET}/bootloader.hex \ -o bootloader/.obj/${TARGET}/bootloader.dfu done - name: 'Build firmware in docker' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do make -j$(nproc) -C firmware TARGET=${TARGET} done - name: 'Generate dfu file for firmware' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do hex2dfu \ -i firmware/.obj/${TARGET}/firmware.hex \ -o firmware/.obj/${TARGET}/firmware.dfu done - name: 'Generate full hex file' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do srec_cat \ bootloader/.obj/${TARGET}/bootloader.hex -Intel \ firmware/.obj/${TARGET}/firmware.hex -Intel \ -o firmware/.obj/${TARGET}/full.hex -Intel done - name: 'Move upload files' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do mv bootloader/.obj/${TARGET}/bootloader.dfu \ artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.dfu mv bootloader/.obj/${TARGET}/bootloader.bin \ artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.bin mv bootloader/.obj/${TARGET}/bootloader.elf \ artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.elf mv firmware/.obj/${TARGET}/firmware.dfu \ artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.dfu mv firmware/.obj/${TARGET}/firmware.bin \ artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.bin mv firmware/.obj/${TARGET}/firmware.elf \ artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.elf done - name: 'Generate full dfu file' uses: ./.github/actions/docker with: run: | for TARGET in ${TARGETS} do hex2dfu \ -i firmware/.obj/${TARGET}/full.hex \ -o artifacts/flipper-z-${TARGET}-full-${SUFFIX}.dfu done - name: 'Full flash asssembly: bootloader as base' run: | for TARGET in ${TARGETS} do cp \ artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.bin \ artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin done - name: 'Full flash asssembly: bootloader padding' run: | for TARGET in ${TARGETS} do truncate -s 32768 artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin done - name: 'Full flash asssembly: append firmware' run: | for TARGET in ${TARGETS} do cat \ artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.bin \ >> artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin done - name: 'Publish artifacts' uses: actions/upload-artifact@v2 with: name: artifacts path: artifacts/* if-no-files-found: error retention-days: 7 - name: 'Upload artifacts to update server' uses: burnett01/rsync-deployments@4.1 with: switches: -avzP --delete path: artifacts/ remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/" remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }} remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }} remote_user: ${{ secrets.RSYNC_DEPLOY_USER }} remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }} - name: 'Trigger update server reindex' uses: wei/curl@master with: args: -X POST -F 'key=${{ secrets.REINDEX_KEY }}' ${{ secrets.REINDEX_URL }}