| # Copyright (C) 2020-2022 F4PGA Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| name: Pipeline |
| |
| on: |
| workflow_call: |
| |
| jobs: |
| |
| |
| License-check: |
| name: Check license headers |
| runs-on: ubuntu-latest |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: recursive |
| |
| - name: Check Licenses |
| uses: SymbiFlow/actions/checks@main |
| |
| |
| Format: |
| name: '🐍 Format' |
| runs-on: ubuntu-latest |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: recursive |
| |
| - name: 🐍 Setup Python |
| uses: actions/setup-python@v4 |
| with: |
| python-version: '3.10' |
| |
| - name: 🔧 Install dependencies |
| run: python -m pip install -r test/requirements.txt |
| |
| - name: 🚦 Check if Python sources follow code formatting standards |
| run: python -m black --check f4pga |
| |
| |
| Docs: |
| runs-on: ubuntu-latest |
| name: '📓 Docs' |
| permissions: |
| contents: write |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: recursive |
| |
| - name: 🛠️ Setup environment |
| run: | |
| sudo apt update -qq |
| sudo apt install -y make |
| make -C docs env |
| |
| - name: 📓 Build the documentation |
| run: | |
| . ./docs/env/conda/bin/activate f4pga-docs |
| make -C docs html |
| cd docs/_build/html |
| touch .nojekyll |
| |
| - name: '📤 Upload artifact: Sphinx HTML' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: Documentation-HTML |
| path: docs/_build/html |
| |
| - name: 🚀 Publish site to GitHub Pages |
| if: github.event_name != 'pull_request' |
| uses: peaceiris/actions-gh-pages@v3 |
| with: |
| github_token: ${{ secrets.GITHUB_TOKEN }} |
| publish_dir: docs/_build/html |
| |
| Install: |
| runs-on: ubuntu-latest |
| steps: |
| |
| - name: 🐍 Install f4pga (pip zipfile) |
| run: pip3 install https://github.com/"$GITHUB_REPOSITORY"/archive/"$GITHUB_REF".zip#subdirectory=f4pga |
| |
| |
| Builds: |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| flow: |
| - SymbiFlow |
| - F4PGA |
| fam: |
| - xc7 |
| - eos-s3 |
| name: '🚦 ${{ matrix.flow }} | ${{ matrix.fam }}' |
| env: |
| F4PGA_INSTALL_DIR: /opt/f4pga |
| FPGA_FAM: ${{ matrix.fam }} |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| |
| - name: 🔧 Prepare environment |
| run: ./scripts/prepare_environment.sh |
| |
| - name: 🐍 Install f4pga (pip) |
| run: | |
| . ./scripts/activate.sh |
| cd f4pga |
| pip install . |
| cd .. |
| |
| - name: 🛠️ Clone f4pga-examples |
| run: git clone --recurse-submodules https://github.com/chipsalliance/f4pga-examples |
| |
| # F4PGA |
| |
| - name: 🚧 [F4PGA] Test f4pga build |
| if: matrix.flow == 'F4PGA' |
| run: | |
| . ./scripts/activate.sh |
| cd f4pga-examples/${{ matrix.fam }} |
| f4pga -vv build --flow ../../.github/${{ matrix.fam }}_test.json |
| |
| - name: '📤 Upload artifact: ${{ matrix.fam }} bitstream' |
| if: matrix.flow == 'F4PGA' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: ${{ matrix.flow }}-${{ matrix.fam }}-Bitstream |
| path: f4pga-examples/${{ matrix.fam }}/build/top.bit |
| if-no-files-found: error |
| |
| # SymbiFlow |
| |
| - name: 🚧 [SymbiFlow] Test make example |
| if: matrix.flow == 'SymbiFlow' |
| run: | |
| . ./scripts/activate.sh |
| cd f4pga-examples/${{ matrix.fam }} |
| export F4PGA_USE_DEPRECATED=true |
| case '${{ matrix.fam }}' in |
| xc7) TARGET="arty_35" make -C counter_test;; |
| eos-s3) make -C btn_counter;; |
| esac |
| |
| - name: '📤 Upload artifact: Arty 35 bitstream' |
| if: matrix.flow == 'SymbiFlow' && matrix.fam == 'xc7' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: ${{ matrix.flow }}-${{ matrix.fam }}-Bitstream |
| path: f4pga-examples/${{ matrix.fam }}/counter_test/build/arty_35/top.bit |
| if-no-files-found: error |
| |
| - name: '📤 Upload artifact: QuickLogic bitstream' |
| if: matrix.flow == 'SymbiFlow' && matrix.fam == 'eos-s3' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: ${{ matrix.flow }}-${{ matrix.fam }}-Bitstream |
| path: f4pga-examples/${{ matrix.fam }}/btn_counter/build/top.bit |
| if-no-files-found: error |
| |
| Lattice: |
| runs-on: ubuntu-latest |
| name: '🚦 Lattice | ice40' |
| env: |
| F4PGA_INSTALL_DIR: /usr/local |
| FPGA_FAM: ice40 |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| |
| - name: ??️ Clone fomu-workshop |
| run: git clone https://github.com/im-tomu/fomu-workshop |
| |
| - name: 🚧 [F4PGA] Test f4pga build |
| run: | |
| cat > ice40-test.sh <<'EOF' |
| set -e |
| apt-get update -qq |
| DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends python3-pip git |
| |
| pip install ./f4pga |
| |
| cd fomu-workshop/hdl/verilog/blink |
| f4pga -vv build --flow ../../../../.github/ice40_test.json |
| EOF |
| |
| docker run --rm -i \ |
| -v $(pwd):/wrk -w /wrk \ |
| -e FPGA_FAM=ice40 \ |
| gcr.io/hdl-containers/impl/icestorm \ |
| bash -le /wrk/ice40-test.sh |
| |
| - name: '📤 Upload artifact: ice40 bitstream' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: Lattice-ice40-Bitstream |
| path: fomu-workshop/hdl/verilog/blink/build/top.bit |
| if-no-files-found: error |
| |
| |
| Python-Tests: |
| runs-on: ubuntu-latest |
| name: '🐍 Python Tests' |
| env: |
| F4PGA_INSTALL_DIR: /opt/f4pga |
| FPGA_FAM: xc7 |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| |
| - name: 🔧 Prepare environment |
| run: ./scripts/prepare_environment.sh |
| |
| - name: 🐍 Install f4pga (pip) |
| run: | |
| . ./scripts/activate.sh |
| cd f4pga |
| pip install . |
| cd .. |
| |
| - name: 🚦 Test Python wrappers |
| run: | |
| . ./scripts/activate.sh |
| pip3 install -r ./test/requirements.txt |
| pytest --verbose --capture=no -rA --color=yes test/ |
| |
| |
| PYTHONPATH: |
| runs-on: ubuntu-latest |
| name: '🐍 PYTHONPATH' |
| env: |
| F4PGA_INSTALL_DIR: /opt/f4pga |
| FPGA_FAM: xc7 |
| |
| steps: |
| |
| - name: 🧰 Checkout |
| uses: actions/checkout@v3 |
| |
| - name: 🚧 Test pyF4PGA (PYTHONPATH) |
| run: | |
| PYTHONPATH=$(pwd) python3 -m f4pga |
| PYTHONPATH=$(pwd) python3 -m f4pga -h |