name: Test on: push: pull_request: workflow_dispatch: env: CI: true DOCKER_BUILDKIT: 1 jobs: # Convention for the names: # lin, osx, win, msys2: build package for the platform # *-test: test on the platform # # Generate and upload doc # gnatdoc: name: '📚 gnatdoc' runs-on: ubuntu-latest steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - name: '📚 Run gnatdoc' run: | docker run --rm -i -v $(pwd):/src -w /src ghdl/debug:base <<'EOF' #!/usr/bin/env sh ./configure --enable-werror && make && make install gnatdoc -P./ghdl EOF - name: '📤 Upload artifact: gnatdoc' uses: actions/upload-artifact@v3 with: name: gnatdoc path: gnatdoc # # Upload Build The Doc # doc: needs: gnatdoc name: '📓 Docs' runs-on: ubuntu-latest steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - name: '⛴ Build ghdl/doc' run: | docker build -t ghdl/doc . -f- <<-EOF FROM ghdl/build:doc COPY . /opt/ghdl RUN cd /opt/ghdl && ./configure --enable-werror && make && make install EOF - name: '📥 Download artifact: gnatdoc' uses: actions/download-artifact@v3 with: name: gnatdoc path: public/gnatdoc - name: '📓 BuildTheDocs (BTD)' uses: buildthedocs/btd@v0 with: token: ${{ github.token }} skip-deploy: ${{ github.event_name == 'pull_request' }} #- run: nroff -man doc/_build/man/ghdl.1 - name: '📤 Upload artifact: HTML, LaTeX and man' uses: actions/upload-artifact@v3 with: name: doc path: | doc/_build/html doc/_build/latex doc/_build/man # # pyGHDL Bindings, Formatting and pure wheel # pyGHDL: name: '🐍 pyGHDL' runs-on: ubuntu-latest steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - name: '🐍 Setup Python' uses: actions/setup-python@v4 with: python-version: '3.10' - name: '🔧 Install dependencies' run: | sudo apt update -qq sudo apt install -y gnat python -m pip install --disable-pip-version-check black wheel pyTooling - name: '🚧 Update Python bindings' run: ./scripts/update_py_bindings.sh - name: '🚦 Check if Python bindings changed' run: | git diff --stat echo "NOTE: Bindings can be updated by executing ./scripts/update_py_bindings.sh (see previous step)" git diff --exit-code - name: '🚦 Check if python follows code formatting standards' run: python -m black --check pyGHDL - name: 🔨 Build Python package (source distribution) run: python setup.py sdist - name: 🔨 Build Python package (binary distribution - wheel) run: python setup.py bdist_wheel - name: '📤 Upload artifact: pyGHDL' uses: actions/upload-artifact@v3 with: name: pyGHDL path: dist/ if-no-files-found: error # # GPL # gpl: if: false name: '🚧🚦🐧 GPL mcode' runs-on: ubuntu-latest steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - run: TASK=bullseye+mcode ./scripts/ci-run.sh -c --gplcompat # # Build for GNU/Linux # lin: name: '🚧🚦🐧 Ubuntu ${{ matrix.os }} ${{ matrix.backend }}' runs-on: ubuntu-${{ matrix.os }}.04 strategy: fail-fast: false matrix: include: - { os: 20, backend: mcode } - { os: 22, backend: mcode } - { os: 20, backend: llvm-10 } - { os: 22, backend: llvm-14 } - { os: 20, backend: gcc-9.3.0 } - { os: 22, backend: gcc-12.1.0 } steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - name: '🛳 Build and test GHDL in containers' run: | TASK=ubuntu${{ matrix.os }}+${{ matrix.backend }} ./scripts/ci-run.sh -c mv ghdl-*-ubuntu${{ matrix.os }}-*.tgz ghdl-gha-ubuntu-${{ matrix.os }}.04-$(echo ${{ matrix.backend }} | sed 's#-.*##g').tgz - name: '📤 Upload artifact: package' uses: actions/upload-artifact@v3 with: name: ubuntu${{ matrix.os }}-${{ matrix.backend }} path: ghdl-gha-ubuntu-*.tgz if-no-files-found: error # # Build for MacOS # osx: name: '🚧🚦🍎 macOS ${{ matrix.os }} ${{ matrix.backend }}' runs-on: 'macOS-${{ matrix.os }}' strategy: fail-fast: false matrix: os: - '11' # - '12' # issue1897 fails. Maybe test 11 build on 12. backend: - mcode - llvm steps: - name: '🧰 Checkout' uses: actions/checkout@v3 - name: '💾 Cache gnat' id: cache-gnat uses: actions/cache@v3 with: path: gnat key: ${{ runner.os }}-gnat # Although we cache this, we let the script run to check if the cache is valid (without conditions) - name: '⚙ Dependencies (brew)' run: ./scripts/macosx/install-ada.sh - name: '🚧 Build and 🚦 Test GHDL' run: | PATH=$PWD/gnat/bin:$PATH:/usr/local/Cellar/llvm@14/14.0.6/bin/ ./scripts/ci-run.sh -c mv ghdl-*.tgz ghdl-macos-${{ matrix.os }}-${{ matrix.backend }}.tgz env: TASK: macosx+${{ matrix.backend }} GITHUB_OS: ${{ runner.os }} MACOSX_DEPLOYMENT_TARGET: '10.14' - name: '📤 Upload artifact: package' uses: actions/upload-artifact@v3 with: name: macos${{ matrix.os }}-${{ matrix.backend }} path: ghdl-macos-${{ matrix.os }}-${{ matrix.backend }}.tgz if-no-files-found: error Windows-MSYS2: uses: ./.github/workflows/Windows-MSYS2.yml Windows-Standalone: uses: ./.github/workflows/Windows-Standalone.yml Windows-pyGHDL: needs: Windows-Standalone uses: ./.github/workflows/Windows-pyGHDL.yml # # Release # Release: name: '📦 Release' runs-on: ubuntu-latest needs: - doc - lin - osx - Windows-MSYS2 - Windows-Standalone - Windows-pyGHDL if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/')) steps: - name: '📥 Download artifacts' uses: actions/download-artifact@v3 with: path: artifacts # Tagged: create a pre-release or a release (semver) # Untagged: update the assets of pre-release 'nightly' - uses: pyTooling/Actions/releaser@r0 with: token: ${{ github.token }} tag: 'nightly' snapshots: false files: | **/*.zst **/*.tgz **/ghdl-*.zip **/man/ghdl.1 Coverage: needs: Windows-MSYS2 uses: ./.github/workflows/Coverage.yml secrets: inherit