ci: fix manual stage rule for gitlab ci #201
This file contains 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
# This is a basic workflow to help you get started with Actions | |
name: Build and Test Linux SDK | |
# Controls when the action will run. Triggers the workflow on push or pull request | |
# events but only for the dev_nuclei_next branch | |
on: | |
push: | |
branches: [ dev* ] | |
paths-ignore: | |
- README.md | |
- LICENSE | |
- .gitlab-ci.yml | |
- .gitignore | |
pull_request: | |
branches: [ dev_* ] | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
# This workflow contains a single job called "build" | |
build: | |
name: build for ${{ matrix.soc }} - ${{ matrix.core }} - ${{ matrix.boot_mode }} | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
soc: [evalsoc] | |
core: [ux900, ux900fd, u900, u900fd] | |
boot_mode: [sd, flash] | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- name: Checkout Linux SDK Code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Tarball source | |
run: | | |
base=$(basename $PWD) | |
cd .. | |
tar czvf source.tar.gz --exclude-vcs -C $base . | |
mv source.tar.gz $base/ | |
- name: Upload source | |
if: matrix.core == 'ux900fd' && matrix.boot_mode == 'sd' && matrix.soc == 'evalsoc' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nuclei_linux_sdk_source | |
path: source.tar.gz | |
# continue build on error | |
continue-on-error: true | |
- name: Caching packages | |
uses: actions/cache@v3 | |
with: | |
path: buildroot/dl | |
key: build | |
# Install dependendenc | |
- name: Install dependencies | |
run: | | |
sudo apt-get install build-essential git autotools-dev cmake texinfo bison minicom flex liblz4-tool \ | |
libgmp-dev libmpfr-dev libmpc-dev gawk libz-dev libssl-dev device-tree-compiler libncursesw5-dev libncursesw5 \ | |
python3 python3-pip mtools | |
sudo pip3 install git-archive-all | |
mkdir -p buildroot/dl | |
QEMUVER=2024.06 | |
if [ ! -f buildroot/dl/nuclei-qemu-${QEMUVER}-linux-x64.tar.gz ] ; then | |
wget --progress=dot -P buildroot/dl https://nucleisys.com/upload/files/toochain/qemu/nuclei-qemu-${QEMUVER}-linux-x64.tar.gz | |
fi | |
mkdir -p prebuilt_tools | |
tar -xzf buildroot/dl/nuclei-qemu-${QEMUVER}-linux-x64.tar.gz -C prebuilt_tools | |
# Build bootimages | |
- name: Build bootimages for ${{ matrix.soc }} - ${{ matrix.core }} - ${{ matrix.boot_mode }} | |
run: | | |
export SOC=${{ matrix.soc }} CORE=${{ matrix.core }} BOOT_MODE=${{ matrix.boot_mode }} | |
echo "Generate QEMU Disk" | |
#echo ">>> Apply workaround: change TIMERCLK_FREQ from 32768 to 4000000" | |
#sed -i "s/32768/4000000/" conf/$SOC/*.dts | |
#export TIMER_HZ=4000000 | |
make genstamp | |
make freeloader | |
cp work/$SOC/freeloader/freeloader.elf work/$SOC/freeloader_qemu.elf | |
make bootimages | |
make DISK_SIZE=128 gendisk | |
RUNQEMUSH=work/$SOC/run_qemu.sh | |
SHOWQEMUSH=work/$SOC/show_qemu.sh | |
qemucmd=qemu-system-riscv32 | |
if [[ $CORE == *ux* ]] ; then | |
qemucmd=qemu-system-riscv64 | |
fi | |
echo "which $qemucmd" > $SHOWQEMUSH | |
echo "$qemucmd --version" >> $SHOWQEMUSH | |
echo "$qemucmd -M nuclei_${SOC},download=flashxip -cpu nuclei-${CORE},ext=${ARCH_EXT}_zicbom_svpbmt_sscof -smp 8 -m 2g -bios freeloader_qemu.elf -nographic -drive file=disk.img,if=sd,format=raw" > $RUNQEMUSH | |
chmod +x $RUNQEMUSH | |
chmod +x $SHOWQEMUSH | |
unset TIMER_HZ | |
echo ">>> Reset workaround and source code" | |
git reset --hard | |
echo "Generate freeloader and boot images" | |
make genboot | |
# Run on qemu | |
- name: Run and test on qemu for ${{ matrix.soc }} - ${{ matrix.core }} - ${{ matrix.boot_mode }} | |
run: | | |
QEMU_PATH=$(pwd)/prebuilt_tools/linux_qemu/bin:$(pwd)/prebuilt_tools/qemu/bin | |
export PATH=${QEMU_PATH}:$PATH | |
export SOC=${{ matrix.soc }} CORE=${{ matrix.core }} BOOT_MODE=${{ matrix.boot_mode }} | |
cd work/$SOC | |
# show qemu version | |
bash show_qemu.sh | |
# $(cat run_qemu.sh) is workaround for directly run bash run_qemu.sh | |
# If do kill it will just kill bash process, the qemu process is not killed | |
# SIGTERM is better for kill qemu | |
timeout --foreground -s SIGTERM 5m $(cat run_qemu.sh) > >(tee run_qemu.log) || { | |
if cat run_qemu.log | grep "Run /init" ; then echo "Kernel boot successfully" ; else echo "Kernel boot failed" && exit 1; fi; | |
if cat run_qemu.log | grep "Welcome to" ; then echo "Pass simulation" && exit 0; else echo "Failed init process" && exit 1; fi; | |
} | |
- name: Upload bootimages for ${{ matrix.soc }} - ${{ matrix.core }} - ${{ matrix.boot_mode }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bootimages_${{ matrix.soc }}_${{ matrix.core }}_${{ matrix.boot_mode }} | |
path: | | |
work/${{ matrix.soc }}/boot.zip | |
work/${{ matrix.soc }}/freeloader/freeloader.elf | |
work/${{ matrix.soc }}/buildstamp.txt | |
- name: Upload qemu images for ${{ matrix.soc }} - ${{ matrix.core }} - ${{ matrix.boot_mode }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: qemu_images_${{ matrix.soc }}_${{ matrix.core }}_${{ matrix.boot_mode }} | |
path: | | |
work/${{ matrix.soc }}/boot.zip | |
work/${{ matrix.soc }}/freeloader/freeloader.elf | |
work/${{ matrix.soc }}/freeloader_qemu.elf | |
work/${{ matrix.soc }}/buildstamp.txt | |
work/${{ matrix.soc }}/disk.img | |
work/${{ matrix.soc }}/*.sh | |
- name: Upload cached packages | |
if: matrix.core == 'ux900fd' && matrix.boot_mode == 'sd' && matrix.soc == 'evalsoc' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build_caching | |
path: | | |
buildroot/dl |