Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ci.yml « workflows « .github - github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d5108a598258a8e139c31fc70fc7c085428f78e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
name: 'CI'

on: push

env:
  TARGETS: f6

jobs:
  build:
    runs-on: [self-hosted]
    steps:
      - name: Cleanup workspace
        uses: AutoModality/action-clean@v1

      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Checkout submodules
        run: git submodule update --init --recursive
      - name: Checkout submodules
        run: git submodule sync

      - 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: Check syntax
        uses: ./.github/actions/docker
        continue-on-error: false
        with:
          run: /syntax_check.sh

      - 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 ${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 ${TARGET}_bootloader.dfu
            mv bootloader/.obj/${TARGET}/bootloader.bin ${TARGET}_bootloader.bin
            mv bootloader/.obj/${TARGET}/bootloader.elf ${TARGET}_bootloader.elf
            mv firmware/.obj/${TARGET}/firmware.dfu ${TARGET}_firmware.dfu
            mv firmware/.obj/${TARGET}/firmware.bin ${TARGET}_firmware.bin
            mv firmware/.obj/${TARGET}/firmware.elf ${TARGET}_firmware.elf
            done

      - name: Generate full dfu file
        uses: ./.github/actions/docker
        with:
          run: for TARGET in ${TARGETS}; do hex2dfu -i ${TARGET}_full.hex -o ${TARGET}_full.dfu; done

      - name: Copy bootloader for full.bin 
        run: for TARGET in ${TARGETS}; do cp ${TARGET}_bootloader.bin ${TARGET}_full.bin; done
      - name: Truncate full.bin 
        run: for TARGET in ${TARGETS}; do truncate -s 32768 ${TARGET}_full.bin; done
      - name: Add firmware.bin at full.bin
        run: for TARGET in ${TARGETS}; do cat ${TARGET}_firmware.bin >> ${TARGET}_full.bin; done

      - name: Copy last target to full.dfu
        run: cp ${TARGETS##*" "}_full.dfu full.dfu

      - name: Publish artifacts
        uses: actions/upload-artifact@v2
        with:
          name: artifacts
          path: |
            *_bootloader.dfu
            *_bootloader.bin
            *_firmware.dfu
            *_firmware.bin
            *_full.dfu
            *_full.bin
            full.dfu
          if-no-files-found: error
          retention-days: 7

  upload:
    name: Upload artifacts to external storage
    needs: build
    runs-on: [self-hosted]
    steps:

      - name: Make empty dir
        run: mkdir -p empty

      - name: Clear upload dir
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -cvzr --delete
          path: empty/
          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: Generate files list
        run: ls *_bootloader.dfu *_firmware.dfu *_full.dfu *_bootloader.bin *_firmware.bin *_full.bin *_bootloader.elf *_firmware.elf full.dfu > uploadlist.txt

      - name: Upload artifacts
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -cvzr --delete --files-from=uploadlist.txt
          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 reindex
        uses: wei/curl@master
        with:
          args: -X POST -F 'key=${{ secrets.REINDEX_KEY }}' ${{ secrets.REINDEX_URL }}

  genpic:
    name: Generate pic
    needs: upload
    if: github.ref == 'refs/heads/release'
    runs-on: [self-hosted]
    steps:
      - name: Set test env
        run: echo "NUMBER_OF_COMMITS=$(git rev-list --count HEAD)" >> $GITHUB_ENV
      - name: Test output NUMBER_OF_COMMITS
        run: echo $NUMBER_OF_COMMITS
      - name: Test output date
        run: |
          GET_DATE=$(date +"%b %d")
          PREP_DATE=$(echo "${GET_DATE^^}")
          echo "PREP_DATE=$PREP_DATE" >> $GITHUB_ENV
      - name: Test output PREP_DATE
        run: echo $PREP_DATE
      - name: Gen pic
        uses: ./.github/actions/docker
        with:
          run: convert ./.github/assets/latest-firmware-template.png -font ./.github/assets/Born2bSportyV2.ttf -weight 700 -pointsize 140 -annotate +900+330 "$NUMBER_OF_COMMITS $PREP_DATE" latest-firmware-banner.png
      - name: Upload pic
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzp --delete
          path: latest-firmware-banner.png
          remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}/"
          remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
          remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
          remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
          remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}