Skip to content

Add docker setup, ibex output checking, github actions #565

Add docker setup, ibex output checking, github actions

Add docker setup, ibex output checking, github actions #565

Workflow file for this run

name: Verify

Check failure on line 1 in .github/workflows/verify.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/verify.yml

Invalid workflow file

(Line: 14, Col: 15): Unrecognized function: 'toLower'. Located at position 1 within expression: toLower(github.repository_owner)
on:
push:
permissions:
contents: read
packages: write
env:
# Container registry + image name (repo owner is normalized to lowercase below)
IMAGE_NAME: cgra4ml-ibex
IMAGE_TAG: latest
GHCR_IMAGE: ghcr.io/${{ toLower(github.repository_owner) }}/cgra4ml-ibex
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"
files="$(git diff --name-only "$BEFORE" "$SHA" || true)"
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: |
# Override IMAGE so your Makefile tags correctly
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}"
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
'