From 6b17d411dfc25841b544c94ac6f71c396814c903 Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 23 Jan 2026 04:38:57 +0000 Subject: [PATCH 1/9] reveal devcontainer --- .devcontainer/Dockerfile | 150 ++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 27 +++++ .devcontainer/scripts/post-start.sh | 20 ++++ .gitignore | 2 - 4 files changed, 197 insertions(+), 2 deletions(-) create mode 100755 .devcontainer/Dockerfile create mode 100755 .devcontainer/devcontainer.json create mode 100755 .devcontainer/scripts/post-start.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100755 index 0000000..59ae631 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,150 @@ +FROM ghcr.io/utoss/risc-v-toolchain:latest AS risc-v-toolchain + +FROM public.ecr.aws/lts/ubuntu:22.04_stable + +ARG DEBIAN_FRONTEND=noninteractive +ARG KEYRING_PATH=/usr/share/keyrings +ARG APT_SOURCES_PATH=/etc/apt/sources.list.d + +# update and upgrade +RUN apt update && apt upgrade -y + +# install essentialls +RUN apt update && \ + apt install -y \ + man make build-essential git zsh vim curl wget procps gnupg gnupg2 ca-certificates zip \ + software-properties-common + +# unminimize the system +RUN bash -c "yes | unminimize" + +# create dev sudo user +RUN useradd --create-home dev && \ + usermod --append --groups sudo dev && \ + apt update && apt install -y sudo && \ + echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +# install dumb init system +USER root +RUN apt update && apt install -y dumb-init + +# setup oh-my-zsh +USER dev +ARG DOCKER_OHMYZSH_SCRIPT_NAME=zsh-in-docker.sh +ARG DOCKER_OHMYZSH_SCRIPT_URL=https://github.com/deluan/zsh-in-docker/releases/download/v1.1.3/${DOCKER_OHMYZSH_SCRIPT_NAME} +ARG DOCKER_OHMYZSH_SCRIPT_HASH="ffa8175332ef01b500ace59d03ce7e2f3a7453651e9a37060974bb6536f0706b ${DOCKER_OHMYZSH_SCRIPT_NAME}" +RUN cd /tmp && \ + wget ${DOCKER_OHMYZSH_SCRIPT_URL} && \ + echo ${DOCKER_OHMYZSH_SCRIPT_HASH} | sha256sum -c && \ + chmod +x ./${DOCKER_OHMYZSH_SCRIPT_NAME} && \ + ./${DOCKER_OHMYZSH_SCRIPT_NAME} -t robbyrussell -p git -p ssh-agent && \ + rm ./${DOCKER_OHMYZSH_SCRIPT_NAME} + +# build and install icarus verilog +USER dev +ARG ICARUS_SRC_TAR=s20251012.tar.gz +ARG ICARUS_SRC_URL=https://github.com/steveicarus/iverilog/archive/refs/tags/${ICARUS_SRC_TAR} +ARG ICARUS_SRC_HASH="97776c5dd1ee09157f7cb9f48978c7687b9157b09fa7029c0f9378aac9a6f58c ${ICARUS_SRC_TAR}" +RUN sudo apt update && sudo apt install -y autoconf gperf make gcc g++ bison flex && \ + cd /tmp && \ + wget ${ICARUS_SRC_URL} && \ + echo ${ICARUS_SRC_HASH} | sha256sum -c && \ + tar -xzf ${ICARUS_SRC_TAR} && \ + cd iverilog-* && sh autoconf.sh && ./configure && make && make check && sudo make install && \ + cd .. && rm ${ICARUS_SRC_TAR} && rm -rf ./iverilog-* + +# build and install Verilator +USER dev +ARG VERILATOR_VERSION=v5.042 +ARG VERILATOR_GIT_REPO=https://github.com/verilator/verilator +RUN sudo apt-get install -y git help2man perl python3 make autoconf g++ flex bison ccache \ + libgoogle-perftools-dev numactl perl-doc \ + libfl2 \ + libfl-dev \ + zlib1g zlib1g-dev && \ + cd /tmp && \ + git clone --depth=1 --branch ${VERILATOR_VERSION} ${VERILATOR_GIT_REPO} && \ + cd verilator && \ + autoconf && ./configure && make -j `nproc` && sudo make install && \ + cd .. && rm -rf verilator + +# install quartus prime lite +USER root +ARG QUARTUS_PRIME_LITE_VERSION=25.1std +ARG QUARTUS_PRIME_LITE_VERSION_REVISION=1129 +ARG QUARTUS_PRIME_LITE_INSTALLER_FILENAME=qinst-lite-linux-${QUARTUS_PRIME_LITE_VERSION}-${QUARTUS_PRIME_LITE_VERSION_REVISION}.run +ARG QUARTUS_PRIME_LITE_DOWNLOAD_URL=https://download.altera.com/akdlm/software/acdsinst/${QUARTUS_PRIME_LITE_VERSION}/${QUARTUS_PRIME_LITE_VERSION_REVISION}/qinst/${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} +ARG QUARTUS_PRIME_LITE_HASH="ead5d78346c7080adad724ec8c50534aa1d91eac ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME}" +RUN cd /tmp && \ + wget ${QUARTUS_PRIME_LITE_DOWNLOAD_URL} && \ + echo ${QUARTUS_PRIME_LITE_HASH} | sha1sum -c && \ + chmod +x ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} && \ + ./${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} qinst --cli --accept-eula \ + --download-dir /tmp/quartus-downloads \ + --install-dir /opt/quartus \ + --auto-install --components quartus,cyclonev \ + --delete-downloads && \ + rm -rf quartus-downloads && \ + rm ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} +ENV PATH="/opt/quartus/quartus/bin:${PATH}" + +# install cocotb +USER dev +RUN sudo apt update && sudo apt install -y python3 python3-pip libpython3-dev && \ + pip3 install cocotb~=1.9 + +# install svlint +USER dev +ARG SVLINT_VERSION=0.9.3 +ARG SVLINT_ZIP_NAME=svlint-v${SVLINT_VERSION}-x86_64-lnx.zip +ARG SVLINT_ZIP_URL=https://github.com/dalance/svlint/releases/download/v${SVLINT_VERSION}/${SVLINT_ZIP_NAME} +ARG SVLINT_ZIP_HASH="df44caa38e0cddd09bafa93365d489e47f4823bdda26aa923028c2f06df90456 ${SVLINT_ZIP_NAME}" +RUN mkdir -p /tmp/svlint && \ + cd /tmp/svlint && \ + wget ${SVLINT_ZIP_URL} && \ + echo ${SVLINT_ZIP_HASH} | sha256sum -c && \ + unzip ${SVLINT_ZIP_NAME} && \ + sudo mv bin/* /usr/local/bin/ && \ + cd .. && rm -r /tmp/svlint + +# install svls +USER dev +ARG SVLS_VERSION=0.2.12 +ARG SVLS_ZIP_NAME=svls-v${SVLS_VERSION}-x86_64-lnx.zip +ARG SVLS_ZIP_URL=https://github.com/dalance/svls/releases/download/v${SVLS_VERSION}/${SVLS_ZIP_NAME} +ARG SVLS_ZIP_HASH="bebdb42731d3d186c7de4263651f0cf06f346f492b30398a128465f50136f33f ${SVLS_ZIP_NAME}" +RUN mkdir -p /tmp/svls && \ + cd /tmp/svls && \ + wget ${SVLS_ZIP_URL} && \ + echo ${SVLS_ZIP_HASH} | sha256sum -c && \ + unzip ${SVLS_ZIP_NAME} && \ + sudo mv svls /usr/local/bin/ && \ + cd .. && rm -r /tmp/svls + +# install riscv toolchain +USER dev +COPY --from=risc-v-toolchain /opt/riscv /opt/riscv +ENV PATH="/opt/riscv/bin:${PATH}" + +# install SAIL simulator +USER dev +ARG SAIL_RISCV_VERSION=0.7 +ARG SAIL_RISCV_ZIP_NAME=sail_riscv-Linux-x86_64.tar.gz +ARG SAIL_RISCV_ZIP_URL=https://github.com/riscv/sail-riscv/releases/download/${SAIL_RISCV_VERSION}/${SAIL_RISCV_ZIP_NAME} +ARG SAIL_RISCV_ZIP_HASH="6b8c3abc3126ce14911a3dec46ff540a60841ef090898f72c4c6f9b0b825efab ${SAIL_RISCV_ZIP_NAME}" +RUN mkdir -p /tmp/sail-riscv && \ + cd /tmp/sail-riscv && \ + wget ${SAIL_RISCV_ZIP_URL} && \ + echo ${SAIL_RISCV_ZIP_HASH} | sha256sum -c && \ + tar -xzf ${SAIL_RISCV_ZIP_NAME} && \ + sudo mv sail_riscv-Linux-x86_64/bin/* /usr/local/bin/ && \ + cd .. && sudo rm -r /tmp/sail-riscv && \ + cd /usr/local/bin && \ + sudo mv riscv_sim_rv32d riscv_sim_RV32 && \ + sudo mv riscv_sim_rv64d riscv_sim_RV64 + +# install riscof +USER dev +RUN pip3 install riscof + +ENTRYPOINT ["/usr/bin/dumb-init", "--"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100755 index 0000000..276cdea --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,27 @@ +{ + "name": "utoss-risc-v-devcontainer", + "dockerFile": "Dockerfile", + "remoteUser": "dev", + "postStartCommand": "bash -c '.devcontainer/scripts/post-start.sh ${containerWorkspaceFolder}'", + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.profiles.linux": { + "zsh": { + "path": "zsh", + "args": [ + "-l" + ] + } + }, + "terminal.integrated.defaultProfile.linux": "zsh" + }, + "extensions": [ + "mshr-h.VerilogHDL", + "ms-vscode.live-server", + "dalance.svls-vscode", + "tamasfe.even-better-toml" + ] + } + } +} diff --git a/.devcontainer/scripts/post-start.sh b/.devcontainer/scripts/post-start.sh new file mode 100755 index 0000000..ad3de51 --- /dev/null +++ b/.devcontainer/scripts/post-start.sh @@ -0,0 +1,20 @@ +#!/usr/bin/bash + +set -euo pipefail + +WORKSPACE="$1" + +git config --global --add safe.directory "$WORKSPACE" +echo "✅ Added $WORKSPACE to git safe directories" + +echo 'hi' + +SOCK_PATH=$(ls /tmp/vscode-ssh-auth-*.sock 2>/dev/null | head -n1) +if [[ -n "$SOCK_PATH" ]]; then + echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.zshrc + echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.bashrc + export SSH_AUTH_SOCK=$SOCK_PATH + echo "✅ Mapped SSH_AUTH_SOCK" +else + echo "⚠️ VS Code agent socket not found; leaving SSH_AUTH_SOCK unchanged" +fi diff --git a/.gitignore b/.gitignore index 54549ba..8738c93 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ *.vvp *.vcd -.devcontainer/ - riscof/riscof_work/ riscof/riscv-arch-test/ riscof/utoss_riscv/__pycache__/ From 002dbe5cef39a45ab604249fc833a390edc1a55c Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 23 Jan 2026 05:10:02 +0000 Subject: [PATCH 2/9] use quartus image --- .devcontainer/Dockerfile | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 59ae631..833a6fd 100755 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,5 +1,7 @@ FROM ghcr.io/utoss/risc-v-toolchain:latest AS risc-v-toolchain +FROM ghcr.io/utoss/quartus:latest AS quartus + FROM public.ecr.aws/lts/ubuntu:22.04_stable ARG DEBIAN_FRONTEND=noninteractive @@ -68,24 +70,9 @@ RUN sudo apt-get install -y git help2man perl python3 make autoconf g++ flex bis autoconf && ./configure && make -j `nproc` && sudo make install && \ cd .. && rm -rf verilator -# install quartus prime lite -USER root -ARG QUARTUS_PRIME_LITE_VERSION=25.1std -ARG QUARTUS_PRIME_LITE_VERSION_REVISION=1129 -ARG QUARTUS_PRIME_LITE_INSTALLER_FILENAME=qinst-lite-linux-${QUARTUS_PRIME_LITE_VERSION}-${QUARTUS_PRIME_LITE_VERSION_REVISION}.run -ARG QUARTUS_PRIME_LITE_DOWNLOAD_URL=https://download.altera.com/akdlm/software/acdsinst/${QUARTUS_PRIME_LITE_VERSION}/${QUARTUS_PRIME_LITE_VERSION_REVISION}/qinst/${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} -ARG QUARTUS_PRIME_LITE_HASH="ead5d78346c7080adad724ec8c50534aa1d91eac ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME}" -RUN cd /tmp && \ - wget ${QUARTUS_PRIME_LITE_DOWNLOAD_URL} && \ - echo ${QUARTUS_PRIME_LITE_HASH} | sha1sum -c && \ - chmod +x ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} && \ - ./${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} qinst --cli --accept-eula \ - --download-dir /tmp/quartus-downloads \ - --install-dir /opt/quartus \ - --auto-install --components quartus,cyclonev \ - --delete-downloads && \ - rm -rf quartus-downloads && \ - rm ${QUARTUS_PRIME_LITE_INSTALLER_FILENAME} +# copy quartus prime lite installation +USER dev +COPY --from=quartus /opt/quartus /opt/quartus ENV PATH="/opt/quartus/quartus/bin:${PATH}" # install cocotb From 5e75ae8071a0501c25c46cbc7ba67391bcfccbcb Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 04:14:26 +0000 Subject: [PATCH 3/9] move verilator build into a separate stage --- .devcontainer/Dockerfile | 15 +++------------ Dockerfile.verilator | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 Dockerfile.verilator diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 833a6fd..3e5e55f 100755 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,3 +1,5 @@ +FROM ghcr.io/utoss/verilator:latest AS verilator + FROM ghcr.io/utoss/risc-v-toolchain:latest AS risc-v-toolchain FROM ghcr.io/utoss/quartus:latest AS quartus @@ -57,18 +59,7 @@ RUN sudo apt update && sudo apt install -y autoconf gperf make gcc g++ bison fle # build and install Verilator USER dev -ARG VERILATOR_VERSION=v5.042 -ARG VERILATOR_GIT_REPO=https://github.com/verilator/verilator -RUN sudo apt-get install -y git help2man perl python3 make autoconf g++ flex bison ccache \ - libgoogle-perftools-dev numactl perl-doc \ - libfl2 \ - libfl-dev \ - zlib1g zlib1g-dev && \ - cd /tmp && \ - git clone --depth=1 --branch ${VERILATOR_VERSION} ${VERILATOR_GIT_REPO} && \ - cd verilator && \ - autoconf && ./configure && make -j `nproc` && sudo make install && \ - cd .. && rm -rf verilator +COPY --from=verilator /usr/local/bin/verilator /usr/local/bin/verilator # copy quartus prime lite installation USER dev diff --git a/Dockerfile.verilator b/Dockerfile.verilator new file mode 100644 index 0000000..997fab1 --- /dev/null +++ b/Dockerfile.verilator @@ -0,0 +1,17 @@ +FROM public.ecr.aws/lts/ubuntu:22.04_stable AS builder + +ARG VERILATOR_VERSION=v5.042 +ARG VERILATOR_GIT_REPO=https://github.com/verilator/verilator +RUN apt update && apt install -y git help2man perl python3 make autoconf g++ flex bison ccache \ + libgoogle-perftools-dev numactl perl-doc \ + libfl2 \ + libfl-dev \ + zlib1g zlib1g-dev && \ + cd /tmp && \ + git clone --depth=1 --branch ${VERILATOR_VERSION} ${VERILATOR_GIT_REPO} && \ + cd verilator && \ + autoconf && ./configure && make -j `nproc` && make install + +FROM public.ecr.aws/lts/ubuntu:22.04_stable + +COPY --from=builder /usr/local/bin/verilator /usr/local/bin/verilator From f97406f4afe0c372919f2ceac7a18a86a7e79592 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 04:44:52 +0000 Subject: [PATCH 4/9] add missing deps --- .devcontainer/Dockerfile | 9 +++++++-- Dockerfile.verilator | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3e5e55f..3c33b0d 100755 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -57,9 +57,14 @@ RUN sudo apt update && sudo apt install -y autoconf gperf make gcc g++ bison fle cd iverilog-* && sh autoconf.sh && ./configure && make && make check && sudo make install && \ cd .. && rm ${ICARUS_SRC_TAR} && rm -rf ./iverilog-* -# build and install Verilator +# copy Verilator installation USER dev -COPY --from=verilator /usr/local/bin/verilator /usr/local/bin/verilator +COPY --from=verilator /usr/local/bin/ /usr/local/bin/ +COPY --from=verilator /usr/local/share/verilator/ /usr/local/share/verilator/ + +# install verilator runtime deps +USER dev +RUN sudo apt update && sudo apt install -y ccache # copy quartus prime lite installation USER dev diff --git a/Dockerfile.verilator b/Dockerfile.verilator index 997fab1..2f1f7fc 100644 --- a/Dockerfile.verilator +++ b/Dockerfile.verilator @@ -14,4 +14,5 @@ RUN apt update && apt install -y git help2man perl python3 make autoconf g++ fle FROM public.ecr.aws/lts/ubuntu:22.04_stable -COPY --from=builder /usr/local/bin/verilator /usr/local/bin/verilator +COPY --from=builder /usr/local/bin/ /usr/local/bin/ +COPY --from=builder /usr/local/share/verilator/ /usr/local/share/verilator/ From 59f6e824f027c45b405c8d9c6046f42e142d4bf3 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 04:45:57 +0000 Subject: [PATCH 5/9] use new verilator image in ci image --- Dockerfile.ci | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Dockerfile.ci b/Dockerfile.ci index 7ccf702..2279ea4 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -1,3 +1,5 @@ +FROM ghcr.io/utoss/verilator:latest AS verilator + FROM ghcr.io/utoss/risc-v-toolchain:latest AS risc-v-toolchain FROM ghcr.io/utoss/quartus:latest AS quartus @@ -36,19 +38,14 @@ RUN sudo apt update && sudo apt install -y autoconf gperf make gcc g++ bison fle cd iverilog-* && sh autoconf.sh && ./configure && make && make check && sudo make install && \ cd .. && rm ${ICARUS_SRC_TAR} && rm -rf ./iverilog-* -# build and install Verilator +# copy Verilator installation USER dev -ARG VERILATOR_VERSION=v5.042 -ARG VERILATOR_GIT_REPO=https://github.com/verilator/verilator -RUN sudo apt-get install -y git help2man perl python3 make autoconf g++ flex bison ccache \ - libgoogle-perftools-dev numactl perl-doc \ - libfl2 \ - libfl-dev \ - zlib1g zlib1g-dev && \ - cd /tmp && \ - git clone --depth=1 --branch ${VERILATOR_VERSION} ${VERILATOR_GIT_REPO} && \ - cd verilator && \ - autoconf && ./configure && make -j `nproc` && sudo make install +COPY --from=verilator /usr/local/bin/ /usr/local/bin/ +COPY --from=verilator /usr/local/share/verilator/ /usr/local/share/verilator/ + +# install verilator runtime deps +USER dev +RUN sudo apt update && sudo apt install -y ccache # copy quartus prime lite installation USER dev From 402c6b95dfca52266bacab9df929a0b9c069d547 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 14:11:20 +0000 Subject: [PATCH 6/9] add devcontainer image job --- .github/workflows/ci.yaml | 72 +++++--------------------- .github/workflows/docker-image.yml | 83 ++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 58 deletions(-) create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7879204..0406e4a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,64 +12,20 @@ permissions: jobs: build_ci_image: - timeout-minutes: 30 - runs-on: ubuntu-latest - outputs: - image-tag: ${{ steps.meta.outputs.tags }} - image-primary-tag: ${{ fromJSON(steps.meta.outputs.json).tags[0] }} - image-digest: ${{ steps.build.outputs.digest }} - - steps: - - name: Free up disk space for Quartus installation - run: | - sudo rm -rf /usr/share/dotnet - sudo rm -rf /usr/local/lib/android - sudo rm -rf /opt/ghc - sudo rm -rf /opt/hostedtoolcache/CodeQL - sudo apt-get clean - docker system prune -af --volumes - echo "Available space after cleanup:" - df -h - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/utoss/risc-v - tags: | - type=ref,event=branch,prefix=ci-branch- - type=ref,event=pr,prefix=ci-pr- - type=raw,value=latest,prefix=ci-,enable={{is_default_branch}} - - - name: Build and push Docker image - id: build - uses: docker/build-push-action@v5 - with: - context: . - file: ./Dockerfile.ci - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - platforms: linux/amd64 - cache-from: | - type=gha - type=registry,ref=ghcr.io/utoss/risc-v:buildcache - cache-to: | - type=gha,mode=max - type=registry,ref=ghcr.io/utoss/risc-v:buildcache,mode=max + uses: ./.github/workflows/docker-image.yml + with: + image-name: ghcr.io/utoss/risc-v + dockerfile: ./Dockerfile.ci + tag-prefix: ci- + secrets: inherit + + build_devcontainer_image: + uses: ./.github/workflows/docker-image.yml + with: + image-name: ghcr.io/utoss/risc-v-devcontainer + dockerfile: .devcontainer/Dockerfile + tag-prefix: "" + secrets: inherit svlint: needs: build_ci_image diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..cce70b1 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,83 @@ +name: Docker imge build template workflow + +on: + workflow_call: + inputs: + image-name: + required: true + type: string + dockerfile: + required: true + type: string + tag-prefix: + required: false + type: string + default: "" + outputs: + image-tag: + description: Built image tags + value: ${{ jobs.build.outputs.image-tag }} + image-primary-tag: + description: Primary image tag + value: ${{ jobs.build.outputs.image-primary-tag }} + +jobs: + build: + timeout-minutes: 30 + runs-on: ubuntu-latest + outputs: + image-tag: ${{ steps.meta.outputs.tags }} + image-primary-tag: ${{ fromJSON(steps.meta.outputs.json).tags[0] }} + image-digest: ${{ steps.build.outputs.digest }} + + steps: + - name: Free up disk space + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo apt-get clean + docker system prune -af --volumes + echo "Available space after cleanup:" + df -h + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ inputs.image-name }} + tags: | + type=ref,event=branch,prefix=${{ inputs.tag-prefix }}branch- + type=ref,event=pr,prefix=${{ inputs.tag-prefix }}pr- + type=raw,value=latest,prefix=#{{ inputs.tag-prefix }},enable={{is_default_branch}} + + - name: Build and push Docker image + id: build + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ inputs.dockerfile }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + platforms: linux/amd64 + cache-from: | + type=gha + type=registry,ref=${{ inputs.image-name }}:buildcache + cache-to: | + type=gha,mode=max + type=registry,ref=${{ inputs.image-name }}:buildcache,mode=max From acc08ed3a6e258624b71856e44f878bb1ee4c33d Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 14:59:04 +0000 Subject: [PATCH 7/9] use prebuilt image in devcontainer config --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 276cdea..fd3e812 100755 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "name": "utoss-risc-v-devcontainer", - "dockerFile": "Dockerfile", + "image": "ghcr.io/utoss/risc-v-devcontainer", "remoteUser": "dev", "postStartCommand": "bash -c '.devcontainer/scripts/post-start.sh ${containerWorkspaceFolder}'", "customizations": { From 16570ad1be08683da84b95c542e9ecba093290e1 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 15:10:23 +0000 Subject: [PATCH 8/9] skip ssh auth sock setup for codespaces --- .devcontainer/scripts/post-start.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.devcontainer/scripts/post-start.sh b/.devcontainer/scripts/post-start.sh index ad3de51..2c7f315 100755 --- a/.devcontainer/scripts/post-start.sh +++ b/.devcontainer/scripts/post-start.sh @@ -9,12 +9,16 @@ echo "✅ Added $WORKSPACE to git safe directories" echo 'hi' -SOCK_PATH=$(ls /tmp/vscode-ssh-auth-*.sock 2>/dev/null | head -n1) -if [[ -n "$SOCK_PATH" ]]; then - echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.zshrc - echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.bashrc - export SSH_AUTH_SOCK=$SOCK_PATH - echo "✅ Mapped SSH_AUTH_SOCK" +if [[ -z "${CODESPACES:-}" ]]; then + SOCK_PATH=$(ls /tmp/vscode-ssh-auth-*.sock 2>/dev/null | head -n1) + if [[ -n "$SOCK_PATH" ]]; then + echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.zshrc + echo "export SSH_AUTH_SOCK=$SOCK_PATH" >> ~/.bashrc + export SSH_AUTH_SOCK=$SOCK_PATH + echo "✅ Mapped SSH_AUTH_SOCK" + else + echo "⚠️ VS Code agent socket not found; leaving SSH_AUTH_SOCK unchanged" + fi else - echo "⚠️ VS Code agent socket not found; leaving SSH_AUTH_SOCK unchanged" + echo "⏩ Skipping SSH_AUTH_SOCK setup for Codespaces" fi From 8c3e38b5399acd1c777079f600e3f54b0007e32d Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 24 Jan 2026 15:26:21 +0000 Subject: [PATCH 9/9] update README --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a26daf..a8d51b2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,10 @@ UTOSS' starter multicycle RISC-V core. ## Getting Started -Checkout Setting up Developement Environment wiki page. +Checkout Setting up Developement Environment wiki page if you wuld like to develop locally. You cant +also create a +[Codespace](https://docs.github.com/en/codespaces/about-codespaces/what-are-codespaces) which will +use our [devcontainer image](.devcontainer/Dockerfile) with all the necessary tools preinstalled. ## Project structure