specify upstream #18
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
name: CI | |
on: | |
push: # This now triggers on pushes to any branch | |
jobs: | |
Bus-Wrap: | |
runs-on: ubuntu-latest | |
name: Generate | |
steps: | |
- name: Set variables | |
run: | | |
github_repo=${{ github.repository }} | |
github_repo=${github_repo#*/} | |
echo "BUSWRAP_PATH=./bus-wrap" >> $GITHUB_ENV | |
echo "BUSWRAP_REPO=efabless/BusWrap" >> $GITHUB_ENV | |
echo "BUSWRAP_REF=main" >> $GITHUB_ENV | |
echo "IP_PATH=./ip" >> $GITHUB_ENV | |
echo "IP_NAME=${github_repo}" >> $GITHUB_ENV | |
- name: Install iverilog | |
run: | | |
sudo apt-get update -qq | |
sudo apt-get install -y iverilog | |
- name: Install dependencies | |
shell: bash | |
run: | | |
sudo apt-get -y install --no-install-recommends git python3 python3-click python3-unidiff | |
- name: Install Verible | |
uses: chipsalliance/verible-actions-common/install-verible@main | |
- uses: actions/checkout@v4 | |
name: Checkout ${{ env.BUSWRAP_REPO }} | |
with: | |
repository: ${{ env.BUSWRAP_REPO }} | |
path: ${{ env.BUSWRAP_PATH }} | |
ref: ${{ env.BUSWRAP_REF }} | |
- uses: actions/checkout@v4 | |
name: Checkout ${{ github.repository }} | |
with: | |
path: ${{ env.IP_PATH }} | |
- name: Generate Wrapper | |
run: | | |
set -x | |
ip_dir=${{ env.IP_PATH }} | |
ip_name=${{ env.IP_NAME }} | |
bus_wrap_dir=${{ env.BUSWRAP_PATH }} | |
rm -rf ${ip_dir}/hdl/rtl/bus_wrappers | |
git -C ${{ env.IP_PATH }} status | |
mkdir -p ${ip_dir}/hdl/rtl/bus_wrappers/dft | |
# wrapper | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -apb > ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.dev.v | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -apb -dft > ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.dev.v | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -wb > ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.dev.v | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -wb -dft > ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.dev.v | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -ahbl > ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.dev.v | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -ahbl -dft > ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.v ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.v ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.v ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.v ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.v ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.dev.v | |
iverilog -E -I$bus_wrap_dir/includes/rtl -o ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.v ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.dev.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.v | |
verible-verilog-format --inplace ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.v | |
sed -i '/^$/N;/^\n$/D' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.v | |
# add line between timescale and default_nettype | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_APB.v | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_APB_DFT.v | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_WB.v | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_WB_DFT.v | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/${ip_name}_AHBL.v | |
sed -i 's/`timescale 1ns \/ 1ps `default_nettype none/`timescale 1ns \/ 1ps\n`default_nettype none/' ${ip_dir}/hdl/rtl/bus_wrappers/dft/${ip_name}_AHBL_DFT.v | |
- name: Generate Docs | |
run: | | |
set -x | |
ip_dir=${{ env.IP_PATH }} | |
ip_name=${{ env.IP_NAME }} | |
bus_wrap_dir=${{ env.BUSWRAP_PATH }} | |
rm -rf ${ip_dir}/README.md | |
rm -rf ${ip_dir}/verify/README.md | |
git -C ${{ env.IP_PATH }} status | |
# doc | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -ahbl -md | head -n -18 > ${ip_dir}/README.md | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -ahbl -md | tail -n 18 > ${ip_dir}/verify/README.md | |
- name: Generate FW | |
run: | | |
set -x | |
ip_dir=${{ env.IP_PATH }} | |
ip_name=${{ env.IP_NAME }} | |
bus_wrap_dir=${{ env.BUSWRAP_PATH }} | |
rm -rf ${ip_dir}/fw/${ip_name}_regs.h | |
git -C ${{ env.IP_PATH }} status | |
# fw | |
python3 $bus_wrap_dir/scripts/bus_wrap.py ${ip_dir}/${ip_name}.yaml -ch > ${ip_dir}/fw/${ip_name}_regs.h | |
- name: Set Variables | |
id: vars | |
run: | | |
diffs_log=diffs.log | |
echo "diffs_log=$diffs_log" >> $GITHUB_OUTPUT | |
echo "buswrap_head_commit=$(git -C ${{ env.BUSWRAP_PATH }} rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" | |
echo "ip_head_commit=$(git -C ${{ env.IP_PATH }} rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" | |
echo "ip_branch_name=${{ github.head_ref || github.ref_name }}" >> "$GITHUB_OUTPUT" | |
- name: Check Diff | |
id: check_diff | |
run: | | |
if [ -n "$(git -C ${{ env.IP_PATH }} status --porcelain)" ]; then | |
echo "changed=true" >> $GITHUB_OUTPUT | |
else | |
echo "changed=false" >> $GITHUB_OUTPUT | |
fi | |
git -C ${{ env.IP_PATH }} status | |
- name: Push to branch | |
if: ${{ steps.check_diff.outputs.changed == 'true' }} | |
run: | | |
branch="ci-${{steps.vars.outputs.buswrap_head_commit}}-${{steps.vars.outputs.ip_branch_name}}" | |
echo "there are changes pushing to $branch" | |
cd ${{ env.IP_PATH }} | |
git config --local user.name "github-actions[bot]" | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git checkout -b $branch | |
git add . | |
git commit -m "run bus_wrap(${{steps.vars.outputs.buswrap_head_commit}}) on ${{ steps.vars.outputs.ip_head_commit }}" | |
git push -f --set-upstream origin $branch | |
- name: Not Push to branch | |
if: ${{ steps.check_diff.outputs.changed == 'false' }} | |
run: | | |
branch="ci-${{steps.vars.outputs.buswrap_head_commit}}-${{steps.vars.outputs.ip_branch_name}}" | |
echo "there are changes pushing to $branch" | |
- name: Check Context | |
shell: bash | |
if: always() | |
run: | | |
cat << 'EOF' | |
"${{ toJSON(steps) }}" | |
"${{ toJSON(inputs) }}" | |
EOF |