| # 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' | |
| 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 | |
| - 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' | |
| run: | | |
| cd docs/_build/html | |
| touch .nojekyll | |
| git init | |
| cp ../../../.git/config ./.git/config | |
| git add . | |
| git config --local user.email "BuildTheDocs@GitHubActions" | |
| git config --local user.name "GitHub Actions" | |
| git commit -a -m "update ${{ github.sha }}" | |
| git push -u origin +HEAD:gh-pages | |
| 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 |