name: Custom board build on: workflow_dispatch: inputs: board: description: 'Board: Found in ports/*/boards/[board_id]' required: true type: string version: description: 'Version: Can be a tag or a commit (>=8.1.0)' required: false default: latest type: string language: description: 'Language: Found in locale/[language].po' required: false default: en_US type: string flags: description: 'Flags: Build flags (e.g. CIRCUITPY_WIFI=1)' required: false type: string debug: description: 'Make a debug build' required: false default: false type: boolean run-name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ inputs.flags != '' && '-custom' || '' }}${{ inputs.debug && '-debug' || '' }} jobs: build: runs-on: ubuntu-22.04 env: PLATFORM_atmel-samd: arm PLATFORM_broadcom: aarch PLATFORM_cxd56: arm PLATFORM_espressif: esp PLATFORM_litex: riscv PLATFORM_mimxrt10xx: arm PLATFORM_nrf: arm PLATFORM_raspberrypi: arm PLATFORM_stm: arm steps: - name: Set up repository run: | git clone --filter=tree:0 https://github.com/adafruit/circuitpython.git $GITHUB_WORKSPACE git checkout ${{ inputs.version == 'latest' && 'HEAD' || inputs.version }} - name: Set up identifier if: inputs.debug || inputs.flags != '' run: | > custom-build && git add custom-build - name: Get port id: get-port run: | PORT=$(find ports/*/boards/ -type d -name ${{ inputs.board }} | sed 's/^ports\///g;s/\/boards.*//g') if [ -z $PORT ]; then (exit 1); else echo >> $GITHUB_OUTPUT "port=$PORT"; fi - name: Port to platform run: echo >> $GITHUB_ENV "PLATFORM=${{ env[format('PLATFORM_{0}', steps.get-port.outputs.port)] }}" - name: Set up python uses: actions/setup-python@v4 with: python-version: 3.x - name: Set up port if: env.PLATFORM == 'esp' uses: ./.github/actions/deps/ports/espressif - name: Set up submodules id: set-up-submodules uses: ./.github/actions/deps/submodules with: action: cache target: ${{ inputs.board }} - name: Set up external uses: ./.github/actions/deps/external with: action: cache platform: ${{ env.PLATFORM }} - name: Set up mpy-cross if: steps.set-up-submodules.outputs.frozen == 'True' uses: ./.github/actions/mpy_cross with: download: false - name: Versions run: | tools/describe gcc --version python3 --version cmake --version || true ninja --version || true aarch64-none-elf-gcc --version || true arm-none-eabi-gcc --version || true xtensa-esp32-elf-gcc --version || true riscv32-esp-elf-gcc --version || true riscv64-unknown-elf-gcc --version || true mkfs.fat --version || true - name: Build board run: make -j2 ${{ inputs.flags }} BOARD=${{ inputs.board }} DEBUG=${{ inputs.debug && '1' || '0' }} TRANSLATION=${{ inputs.language }} working-directory: ports/${{ steps.get-port.outputs.port }} - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ inputs.flags != '' && '-custom' || '' }}${{ inputs.debug && '-debug' || '' }} path: ports/${{ steps.get-port.outputs.port }}/build-${{ inputs.board }}/firmware.*