Skip to content

Update mini-gdbstub with the API changes #3101

Update mini-gdbstub with the API changes

Update mini-gdbstub with the API changes #3101

Workflow file for this run

name: CI
on: [push, pull_request]
jobs:
detect-code-related-file-changes:
runs-on: ubuntu-24.04
outputs:
has_code_related_changes: ${{ steps.set_has_code_related_changes.outputs.has_code_related_changes }}
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Test changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
files: |
.ci/**
build/**
mk/**
src/**
tests/**
tools/**
.clang-format
Dockerfile
Makefile
- name: Set has_code_related_changes
id: set_has_code_related_changes
run: |
if [[ ${{ steps.changed-files.outputs.any_changed }} == true ]]; then
echo "has_code_related_changes=true" >> $GITHUB_OUTPUT
else
echo "has_code_related_changes=false" >> $GITHUB_OUTPUT
fi
host-x64:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
strategy:
fail-fast: false
matrix:
compiler: [gcc, clang]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: install-dependencies
run: |
sudo apt-get update -q=2
sudo apt-get install -q=2 libsdl2-dev libsdl2-mixer-dev device-tree-compiler expect bc p7zip-full
.ci/riscv-toolchain-install.sh
echo "${{ github.workspace }}/toolchain/bin" >> $GITHUB_PATH
wget https://apt.llvm.org/llvm.sh
sudo chmod +x ./llvm.sh
sudo ./llvm.sh 18
shell: bash
- name: Install compiler
id: install_cc
uses: rlalik/setup-cpp-compiler@master
with:
compiler: ${{ matrix.compiler }}
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
with:
version: 3.1.51
actions-cache-folder: 'emsdk-cache'
- name: Set parallel jobs variable
run: |
echo "PARALLEL=-j$(nproc)" >> "$GITHUB_ENV"
echo "BOOT_LINUX_TEST=TMP_FILE=\$(mktemp "$RUNNER_TEMP/tmpfile.XXXXXX"); \
sudo env TMP_FILE=\${TMP_FILE} .ci/boot-linux-prepare.sh setup; \
. \${TMP_FILE}; \
.ci/boot-linux.sh; \
EXIT_CODE=\$?; \
sudo env TMP_FILE=\${TMP_FILE} BLK_DEV=\${BLK_DEV} .ci/boot-linux-prepare.sh cleanup; \
exit \${EXIT_CODE};" >> "$GITHUB_ENV"
- name: fetch artifact first to reduce HTTP requests
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make artifact
make ENABLE_SYSTEM=1 artifact
make ENABLE_ARCH_TEST=1 artifact
# Hack Cloudflare 403 Forbidden on GitHub Runner for Doom artifact download
wget --header="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" \
--header="Referer: https://www.doomworld.com/" \
--header="Accept-Language: en-US,en;q=0.9" \
-O build/shareware_doom_iwad.zip \
"https://www.doomworld.com/3ddownloads/ports/shareware_doom_iwad.zip"
unzip -d build/ build/shareware_doom_iwad.zip
if: ${{ always() }}
- name: default build using emcc
run: |
make CC=emcc $PARALLEL
if: ${{ always() }}
- name: default build for system emulation using emcc
run: |
make distclean
make CC=emcc ENABLE_SYSTEM=1 $PARALLEL
make distclean ENABLE_SYSTEM=1
if: ${{ always() }}
- name: default build with -g
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-g $PARALLEL
if: ${{ always() }}
- name: default build with -Og
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-Og $PARALLEL
if: ${{ always() }}
- name: default build with -O0
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O0 $PARALLEL
if: ${{ always() }}
- name: default build with -O1
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O1 $PARALLEL
if: ${{ always() }}
- name: default build with -O2
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O2 $PARALLEL
if: ${{ always() }}
- name: default build with -O3
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O3 $PARALLEL
if: ${{ always() }}
- name: default build with -Ofast
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-Ofast $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -g
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-g ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -Og
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-Og ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -O0
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O0 ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -O1
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O1 ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -O2
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O2 ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -O3
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-O3 ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: default build for system emulation with -Ofast
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make OPT_LEVEL=-Ofast ENABLE_SYSTEM=1 $PARALLEL
if: ${{ always() }}
- name: check + tests
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make check $PARALLEL
make tests $PARALLEL
make misalign $PARALLEL
make tool $PARALLEL
if: ${{ always() }}
- name: diverse configurations
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make ENABLE_EXT_M=0 check $PARALLEL
make distclean && make ENABLE_EXT_A=0 check $PARALLEL
make distclean && make ENABLE_EXT_F=0 check $PARALLEL
make distclean && make ENABLE_EXT_C=0 check $PARALLEL
make distclean && make ENABLE_SDL=0 check $PARALLEL
make distclean && make ENABLE_Zicsr=0 check $PARALLEL
make distclean && make ENABLE_MOP_FUSION=0 check $PARALLEL
make distclean && make ENABLE_BLOCK_CHAINING=0 check $PARALLEL
make distclean && make ENABLE_Zba=0 check $PARALLEL
make distclean && make ENABLE_Zbb=0 check $PARALLEL
make distclean && make ENABLE_Zbc=0 check $PARALLEL
make distclean && make ENABLE_Zbs=0 check $PARALLEL
make distclean && make ENABLE_Zifencei=0 check $PARALLEL
if: ${{ always() }}
- name: misalignment test in block emulation
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make -C tests/system/alignment/
make distclean && make ENABLE_ELF_LOADER=1 ENABLE_EXT_C=0 ENABLE_SYSTEM=1 misalign-in-blk-emu $PARALLEL
if: ${{ always() }}
- name: MMU test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make -C tests/system/mmu/
make distclean && make ENABLE_ELF_LOADER=1 ENABLE_SYSTEM=1 mmu-test $PARALLEL
if: ${{ always() }}
- name: gdbstub test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make ENABLE_GDBSTUB=1 gdbstub-test $PARALLEL
if: ${{ always() }}
- name: JIT test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make ENABLE_JIT=1 clean && make ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_A=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_F=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_C=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_M=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zba=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbb=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbc=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbs=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zicsr=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zifencei=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_MOP_FUSION=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_BLOCK_CHAINING=0 ENABLE_JIT=1 check $PARALLEL
if: ${{ always() }}
- name: undefined behavior test
run: |
make distclean && make ENABLE_UBSAN=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_JIT=1 ENABLE_UBSAN=1 check $PARALLEL
if: ${{ always() }}
- name: boot Linux kernel test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make INITRD_SIZE=32 ENABLE_SYSTEM=1 $PARALLEL && make ENABLE_SYSTEM=1 artifact $PARALLEL
bash -c "${BOOT_LINUX_TEST}"
make ENABLE_SYSTEM=1 clean
if: ${{ always() }}
- name: boot Linux kernel test (JIT)
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make INITRD_SIZE=32 ENABLE_SYSTEM=1 ENABLE_JIT=1 ENABLE_T2C=0 ENABLE_MOP_FUSION=0 $PARALLEL && make ENABLE_SYSTEM=1 artifact $PARALLEL
bash -c "${BOOT_LINUX_TEST}"
make ENABLE_SYSTEM=1 ENABLE_JIT=1 ENABLE_T2C=0 ENABLE_MOP_FUSION=0 clean
if: ${{ always() }}
- name: Architecture test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
.ci/riscv-tests.sh
if: ${{ always() }}
host-arm64:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
runs-on: ubuntu-24.04
steps:
- name: checkout code
uses: actions/checkout@v4
- name: Set parallel jobs variable
run: |
echo "PARALLEL=-j$(nproc)" >> "$GITHUB_ENV"
- name: build artifact
# The GitHub Action for non-x86 CPU
uses: allinurl/run-on-arch-action@master
with:
arch: aarch64
distro: ubuntu24.04
githubToken: ${{ github.token }}
# No 'sudo' is available
install: |
apt update -qq
apt install -yqq make git clang libsdl2-dev libsdl2-mixer-dev lsb-release wget software-properties-common gnupg bc
git config --global --add safe.directory ${{ github.workspace }}
git config --global --add safe.directory ${{ github.workspace }}/src/softfloat
git config --global --add safe.directory ${{ github.workspace }}/src/mini-gdbstub
wget https://apt.llvm.org/llvm.sh
chmod +x ./llvm.sh
./llvm.sh 18
# FIXME: gcc build fails on Aarch64/Linux hosts
env: |
CC: clang-18
PARALLEL: ${{ env.PARALLEL }}
# Append custom commands here
run: |
make artifact
make $PARALLEL
make check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_A=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_F=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_C=0 ENABLE_JIT=1 check $PARALLEL
macOS-arm64:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
strategy:
fail-fast: false
matrix:
compiler: [gcc-14, clang]
runs-on: macos-latest # M1 chip
steps:
- uses: actions/checkout@v4
- name: install-dependencies
run: |
brew install make dtc expect sdl2 sdl2_mixer bc e2fsprogs p7zip llvm@18 dcfldd
.ci/riscv-toolchain-install.sh
echo "${{ github.workspace }}/toolchain/bin" >> $GITHUB_PATH
- name: Install compiler
id: install_cc
uses: rlalik/setup-cpp-compiler@master
with:
compiler: ${{ matrix.compiler }}
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
with:
version: 3.1.51
actions-cache-folder: 'emsdk-cache'
- name: Set parallel jobs variable
run: |
echo "PARALLEL=-j$(sysctl -n hw.logicalcpu)" >> "$GITHUB_ENV"
echo "BOOT_LINUX_TEST=TMP_FILE=\$(mktemp "$RUNNER_TEMP/tmpfile.XXXXXX"); \
sudo env TMP_FILE=\${TMP_FILE} .ci/boot-linux-prepare.sh setup; \
. \${TMP_FILE}; \
.ci/boot-linux.sh; \
EXIT_CODE=\$?; \
sudo env TMP_FILE=\${TMP_FILE} BLK_DEV=\${BLK_DEV} .ci/boot-linux-prepare.sh cleanup; \
exit \${EXIT_CODE};" >> "$GITHUB_ENV"
- name: Symlink gcc-14 due to the default /usr/local/bin/gcc links to system's clang
run: |
ln -s /opt/homebrew/opt/gcc/bin/gcc-14 /usr/local/bin/gcc-14
- name: fetch artifact first to reduce HTTP requests
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
LATEST_RELEASE=$(wget --header="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -q \
https://api.github.com/repos/sysprog21/rv32emu-prebuilt/releases -O- \
| grep '"tag_name"' \
| grep "ELF" \
| head -n 1 \
| sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
make LATEST_RELEASE=$LATEST_RELEASE artifact
LATEST_RELEASE=$(wget --header="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -q \
https://api.github.com/repos/sysprog21/rv32emu-prebuilt/releases -O- \
| grep '"tag_name"' \
| grep "Linux-Image" \
| head -n 1 \
| sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
make LATEST_RELEASE=$LATEST_RELEASE ENABLE_SYSTEM=1 artifact
LATEST_RELEASE=$(wget --header="Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -q \
https://api.github.com/repos/sysprog21/rv32emu-prebuilt/releases -O- \
| grep '"tag_name"' \
| grep "sail" \
| head -n 1 \
| sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
make LATEST_RELEASE=$LATEST_RELEASE ENABLE_ARCH_TEST=1 artifact
# Hack Cloudflare 403 Forbidden on GitHub Runner for Doom artifact download
wget --header="User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15" \
--header="Referer: https://www.doomworld.com/" \
--header="Accept-Language: en-US,en;q=0.9" \
-O build/shareware_doom_iwad.zip \
"https://www.doomworld.com/3ddownloads/ports/shareware_doom_iwad.zip"
unzip -d build/ build/shareware_doom_iwad.zip
if: ${{ always() }}
- name: default build using emcc
run: |
make CC=emcc $PARALLEL
if: ${{ always() }}
- name: default build for system emulation using emcc
run: |
make distclean
make CC=emcc ENABLE_SYSTEM=1 $PARALLEL
make distclean ENABLE_SYSTEM=1
if: ${{ always() }}
- name: check + tests
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean
make check $PARALLEL
make tests $PARALLEL
make misalign $PARALLEL
make tool $PARALLEL
if: ${{ always() }}
- name: diverse configurations
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make ENABLE_EXT_M=0 check $PARALLEL
make distclean && make ENABLE_EXT_A=0 check $PARALLEL
make distclean && make ENABLE_EXT_F=0 check $PARALLEL
make distclean && make ENABLE_EXT_C=0 check $PARALLEL
make distclean && make ENABLE_SDL=0 check $PARALLEL
make distclean && make ENABLE_Zicsr=0 check $PARALLEL
make distclean && make ENABLE_MOP_FUSION=0 check $PARALLEL
make distclean && make ENABLE_BLOCK_CHAINING=0 check $PARALLEL
make distclean && make ENABLE_Zba=0 check $PARALLEL
make distclean && make ENABLE_Zbb=0 check $PARALLEL
make distclean && make ENABLE_Zbc=0 check $PARALLEL
make distclean && make ENABLE_Zbs=0 check $PARALLEL
make distclean && make ENABLE_Zifencei=0 check $PARALLEL
if: ${{ always() }}
- name: gdbstub test, need RV32 toolchain
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make ENABLE_GDBSTUB=1 gdbstub-test $PARALLEL
if: ${{ always() }}
- name: JIT test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make ENABLE_JIT=1 clean && make ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_A=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_F=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_C=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_EXT_M=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zba=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbb=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbc=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zbs=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zicsr=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_Zifencei=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_MOP_FUSION=0 ENABLE_JIT=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_BLOCK_CHAINING=0 ENABLE_JIT=1 check $PARALLEL
if: ${{ always() }}
- name: undefined behavior test
env:
CC: ${{ steps.install_cc.outputs.cc }}
if: ${{ env.CC == 'clang' && always() }} # gcc on macOS/arm64 does not support satinizers
run: |
make distclean && make ENABLE_UBSAN=1 check $PARALLEL
make ENABLE_JIT=1 clean && make ENABLE_JIT=1 ENABLE_UBSAN=1 check $PARALLEL
- name: boot Linux kernel test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make INITRD_SIZE=32 ENABLE_SYSTEM=1 $PARALLEL && \
make ENABLE_SYSTEM=1 artifact $PARALLEL
bash -c "${BOOT_LINUX_TEST}"
make ENABLE_SYSTEM=1 clean
if: ${{ always() }}
- name: boot Linux kernel test (JIT)
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
make distclean && make INITRD_SIZE=32 ENABLE_SYSTEM=1 ENABLE_JIT=1 ENABLE_T2C=0 ENABLE_MOP_FUSION=0 $PARALLEL && make ENABLE_SYSTEM=1 artifact $PARALLEL
bash -c "${BOOT_LINUX_TEST}"
make ENABLE_SYSTEM=1 ENABLE_JIT=1 ENABLE_T2C=0 ENABLE_MOP_FUSION=0 clean
if: ${{ always() }}
- name: Architecture test
env:
CC: ${{ steps.install_cc.outputs.cc }}
run: |
python3 -m venv venv
. venv/bin/activate
.ci/riscv-tests.sh
if: ${{ always() }}
coding-style:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: coding convention
run: |
sudo apt-get install -q=2 clang-format-18
.ci/check-newline.sh
.ci/check-format.sh
shell: bash
static-analysis:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# LLVM static analysis
- name: set up scan-build
run: |
sudo apt-get update -q=2
sudo apt-get install -q=2 libsdl2-dev libsdl2-mixer-dev
wget https://apt.llvm.org/llvm.sh
chmod +x ./llvm.sh
sudo ./llvm.sh 18
sudo apt-get install -q=2 clang-18 clang-tools-18
shell: bash
- name: run scan-build without JIT
run: make distclean && scan-build-18 -v -o ~/scan-build --status-bugs --use-cc=clang-18 --force-analyze-debug-code --show-description -analyzer-config stable-report-filename=true -enable-checker valist,nullability make ENABLE_EXT_F=0 ENABLE_SDL=0 ENABLE_JIT=0
- name: run scan-build with JIT
run: |
make ENABLE_JIT=1 distclean && scan-build-18 -v -o ~/scan-build --status-bugs --use-cc=clang-18 --force-analyze-debug-code --show-description -analyzer-config stable-report-filename=true -enable-checker valist,nullability make ENABLE_EXT_F=0 ENABLE_SDL=0 ENABLE_JIT=1
# https://docs.docker.com/build/ci/github-actions/multi-platform/
docker-hub-build-and-publish:
needs: [detect-code-related-file-changes]
if: needs.detect-code-related-file-changes.outputs.has_code_related_changes == 'true'
runs-on: ubuntu-24.04
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
if: ${{ github.event_name == 'push'}}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: Get short commit SHA1
if: ${{ github.event_name == 'push'}}
shell: bash
run: |
echo "short_hash=$(git rev-parse --short "$GITHUB_SHA")" >> "$GITHUB_ENV"
- name: Build and push
if: ${{ github.event_name == 'push'}}
uses: docker/build-push-action@v6
with:
push: true
context: .
platforms: linux/amd64,linux/arm64/v8
tags: sysprog21/rv32emu:latest, sysprog21/rv32emu:${{ env.short_hash }}