Add docker setup, ibex output checking, github actions #568
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Verify | |
| on: | |
| push: | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| GHCR_IMAGE: ghcr.io/kastnerrg/cgra4ml-ibex | |
| IMAGE_TAG: latest | |
| jobs: | |
| build-and-push-image: | |
| runs-on: ubuntu-22.04 | |
| outputs: | |
| docker_changed: ${{ steps.check-changes.outputs.docker_changed }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - id: check-changes | |
| name: Detect Docker / env changes | |
| shell: bash | |
| run: | | |
| set -e | |
| BEFORE="${{ github.event.before }}" | |
| SHA="${{ github.sha }}" | |
| # First push to branch (no "before" commit)? Force rebuild. | |
| if [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then | |
| echo "First push on this branch -> rebuild image" | |
| echo "docker_changed=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| echo "Diffing $BEFORE..$SHA" | |
| # If BEFORE commit is not in this clone (rebased branch / force push / shallow mismatch), | |
| # just force a rebuild instead of trying to diff. | |
| if ! git cat-file -e "$BEFORE^{commit}" 2>/dev/null; then | |
| echo "Base commit $BEFORE not found in local history -> rebuild image" | |
| echo "docker_changed=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| files="$(git diff --name-only "$BEFORE" "$SHA")" | |
| echo "Changed files:" | |
| echo "$files" | |
| if echo "$files" | grep -E '^(Dockerfile|Makefile|pyproject.toml|ibex-soc/python-requirements.txt|ibex-soc/vendor/google_riscv-dv/requirements.txt)$' >/dev/null; then | |
| echo "Docker / env inputs changed -> rebuild" | |
| echo "docker_changed=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "No Dockerfile/Makefile/pyproject/req changes -> reuse existing image" | |
| echo "docker_changed=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Log in to GHCR | |
| if: steps.check-changes.outputs.docker_changed == 'true' | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build Docker image via Makefile | |
| if: steps.check-changes.outputs.docker_changed == 'true' | |
| shell: bash | |
| run: | | |
| # Build using your top-level Makefile, but tag with GHCR_IMAGE:dev | |
| make IMAGE="${GHCR_IMAGE}:dev" image | |
| docker tag "${GHCR_IMAGE}:dev" "${GHCR_IMAGE}:${IMAGE_TAG}" | |
| - name: Push image to GHCR | |
| if: steps.check-changes.outputs.docker_changed == 'true' | |
| shell: bash | |
| run: docker push "${GHCR_IMAGE}:${IMAGE_TAG}" | |
| riscv: | |
| runs-on: ubuntu-22.04 | |
| needs: build-and-push-image | |
| steps: | |
| - name: Check | |
| run: | | |
| docker run --rm \ | |
| -v "$PWD":/work \ | |
| -w /work \ | |
| "${GHCR_IMAGE}:${IMAGE_TAG}" \ | |
| bash -lc ' | |
| echo $PATH | |
| which riscv32-unknown-elf-gcc | |
| ls /opt/lowrisc-toolchain/bin/ | |
| riscv32-unknown-elf-gcc --version | |
| ' | |
| smoke-test: | |
| runs-on: ubuntu-22.04 | |
| needs: build-and-push-image | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Free disk space on runner | |
| run: | | |
| echo "Before cleanup:"; df -h | |
| sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android /opt/hostedtoolcache/CodeQL || true | |
| sudo apt-get clean || true | |
| sudo rm -rf /var/lib/apt/lists/* || true | |
| docker system prune -af || true | |
| echo "After cleanup:"; df -h | |
| - name: Log in to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Pull CI image | |
| run: docker pull "${GHCR_IMAGE}:${IMAGE_TAG}" | |
| - name: Smoke test (param_test) | |
| run: | | |
| docker run --rm \ | |
| -v "$PWD":/work \ | |
| -w /work \ | |
| "${GHCR_IMAGE}:${IMAGE_TAG}" \ | |
| bash -lc ' | |
| mkdir -p run/work | |
| make TEST=param_test smoke_test | |
| ' | |
| verify-ibex-soc: | |
| runs-on: ubuntu-22.04 | |
| needs: smoke-test | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Free disk space on runner | |
| run: | | |
| echo "Before cleanup:"; df -h | |
| sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android /opt/hostedtoolcache/CodeQL || true | |
| sudo apt-get clean || true | |
| sudo rm -rf /var/lib/apt/lists/* || true | |
| docker system prune -af || true | |
| echo "After cleanup:"; df -h | |
| - name: Log in to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Pull CI image | |
| run: docker pull "${GHCR_IMAGE}:${IMAGE_TAG}" | |
| - name: Ibex SoC regression + output check | |
| run: | | |
| docker run --rm \ | |
| -v "$PWD":/work \ | |
| -w /work \ | |
| "${GHCR_IMAGE}:${IMAGE_TAG}" \ | |
| bash -lc ' | |
| fusesoc library add sa_ip "$(pwd -P)" || true | |
| mkdir -p run/work | |
| make TEST=ibex_test smoke_test iclean ibuild irun verify_ibex | |
| ' |