Allow users to optionally use the CI from github. --- .github/actions/build-bsps/action.yml | 49 ++++++++ .github/actions/run-simulator/action.yml | 144 +++++++++++++++++++++++ .github/workflows/bsps.yml | 63 ++++++++++ .github/workflows/simulator.yml | 72 ++++++++++++ 4 files changed, 328 insertions(+) create mode 100644 .github/actions/build-bsps/action.yml create mode 100644 .github/actions/run-simulator/action.yml create mode 100644 .github/workflows/bsps.yml create mode 100644 .github/workflows/simulator.yml
diff --git a/.github/actions/build-bsps/action.yml b/.github/actions/build-bsps/action.yml new file mode 100644 index 0000000000..c06e560125 --- /dev/null +++ b/.github/actions/build-bsps/action.yml @@ -0,0 +1,49 @@ +name: "Build BSPs" +description: "Build BSPs for the given target architecture." + +inputs: + bsp: + description: "The bsp to build 'sparc/erc32'" + type: string + required: true + sources-rtems: + description: "Where to find the RTEMS sources. Use absolute path!" + type: string + required: true + prefix: + description: "Prefix directory with the installed tools. Use absolute path!" + type: string + required: true + +runs: + using: "composite" + steps: + - name: create name for logs + shell: bash + run: | + shortname=`echo "${{ inputs.bsp }}" | sed -e "s|/|_|g"` + echo "shortname=${shortname}" >> $GITHUB_ENV + - name: create log dir + shell: bash + run: mkdir "${GITHUB_WORKSPACE}"/bsp-logs + - name: Run BSP builder + shell: bash + run: | + "${{ inputs.prefix }}"/bin/rtems-bsp-builder \ + --build-path "${GITHUB_WORKSPACE}"/rtems-build \ + --prefix "${{ inputs.prefix }}" \ + --rtems-tools "${{ inputs.prefix }}/bin" \ + --rtems "${{ inputs.sources-rtems }}" \ + --bsp ${{ inputs.bsp }} \ + --log "${GITHUB_WORKSPACE}"/bsp-logs/log-${{ env.shortname }}.txt \ + --warnings-report "${GITHUB_WORKSPACE}"/bsp-logs/warnings-${{ env.shortname }}.txt \ + --failures-report "${GITHUB_WORKSPACE}"/bsp-logs/failures-${{ env.shortname }}.txt + - name: Archive log + uses: actions/upload-artifact@v3 + with: + name: log-${{ env.shortname }} + path: bsp-logs + - name: Check for errors + shell: bash + run: | + grep "Failures: 0" "$GITHUB_WORKSPACE"/bsp-logs/log-${{ env.shortname }}.txt diff --git a/.github/actions/run-simulator/action.yml b/.github/actions/run-simulator/action.yml new file mode 100644 index 0000000000..23aa70e8ea --- /dev/null +++ b/.github/actions/run-simulator/action.yml @@ -0,0 +1,144 @@ +name: "Run Simulator" +description: "Build BSPs for the given target/BSP and run tests on a simulator" + +inputs: + target: + description: "The Arch/BSP to run. For example 'sparc/erc32'" + type: string + required: true + sources-rtems: + description: "Where to find the RTEMS sources. Use absolute path!" + type: string + required: true + prefix: + description: "Prefix directory with the installed tools. Use absolute path!" + type: string + required: true + +runs: + using: "composite" + steps: + - shell: bash + run: | + # Find correct parameters for this simulator + args="" + found=0 + [ "${{ inputs.target }}" == "sparc/erc32" ] && \ + args="--rtems-bsp=erc32-sis" && \ + found=1 + [ "${{ inputs.target }}" == "sparc/gr740" ] && \ + args="--rtems-bsp=gr740-sis" && \ + found=1 + [ "${{ inputs.target }}" == "riscv/griscv" ] && \ + args="--rtems-bsp=griscv-sis" && \ + found=1 + [ "${{ inputs.target }}" == "arm/xilinx_zynq_a9_qemu" ] && \ + args="--rtems-bsp=xilinx_zynq_a9_qemu" && \ + found=1 + echo "rtems_test_args=${args}" >> $GITHUB_ENV + echo "simulator_supported=${found}" >> $GITHUB_ENV + - if: ${{ env.simulator_supported == 0 }} + shell: bash + run: | + # Check whether parameters for this simulator have been found + echo "${{ inputs.target }} is not supported for simulator runs" + false + - shell: bash + run: | + # create environment variables for paths and names + shortname=`echo "${{ inputs.target }}" | sed -e "s|/|_|g"` + echo "shortname=${shortname}" >> $GITHUB_ENV + echo "logdir=${GITHUB_WORKSPACE}/logs-${shortname}" >> $GITHUB_ENV + echo "builddir=${GITHUB_WORKSPACE}/build-${shortname}" >> $GITHUB_ENV + - shell: bash + run: | + # create directories + mkdir -p "${{ env.logdir }}" + mkdir -p "${{ env.builddir }}" + - shell: bash + run: | + # generate BSP config + echo -e "[${{ inputs.target }}]\nBUILD_TESTS = True" >> "${{ env.builddir }}/config.ini" + cat "${{ env.builddir }}/config.ini" + - shell: bash + run: | + # configure + cd ${{ env.builddir }} && ${{ inputs.sources-rtems }}/waf configure \ + --out="${{ env.builddir }}" \ + --rtems-config="${{ env.builddir }}/config.ini" \ + --top="${{ inputs.sources-rtems }}" \ + --prefix="${{ inputs.prefix }}" + - if: ${{ failure() }} + shell: bash + run: | + # print log + cat "${{ env.builddir }}/config.log" + - shell: bash + run: | + # compile + cd ${{ env.builddir }} && ${{ inputs.sources-rtems }}/waf \ + --out="${{ env.builddir }}" \ + --top="${{ inputs.sources-rtems }}" \ + --prefix="${{ inputs.prefix }}" + find ${{ env.builddir }} -name "*.exe" + - shell: bash + run: | + # run tests + # Note: PATH needs to be adapted so that for example qemu is found + PATH="${{ inputs.prefix }}/bin":$PATH rtems-test \ + --log="${{ env.logdir }}/test.log" \ + --log-mode=all \ + --report-path="${{ env.logdir }}/report" \ + --report-format=json \ + --warn-all \ + --rtems-tools="${{ inputs.prefix }}" \ + ${{ env.rtems_test_args }} \ + ${{ env.builddir }} + - name: Archive log + uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: test-logs-${{ env.shortname }} + path: logs-${{ env.shortname }} + - shell: bash + run: | + # Set default values + echo "results_total=-1" | tee -a $GITHUB_ENV + echo "tests_passed=0" | tee -a $GITHUB_ENV + echo "tests_user-input=0" | tee -a $GITHUB_ENV + echo "tests_expected-fail=0" | tee -a $GITHUB_ENV + echo "tests_benchmark=0" | tee -a $GITHUB_ENV + - shell: bash + run: | + # Count number of passed / failed / ... tests + jq -r '.reports | group_by(.result) | map({result: .[0].result, count: length})[] | ("tests_"+.result+"="+(.count|tostring))' ${{ env.logdir }}/report.json | tee -a $GITHUB_ENV + jq -r '.reports | ("results_total="+(length|tostring))' ${{ env.logdir }}/report.json | tee -a $GITHUB_ENV + - shell: bash + run: | + # Summarize tests + echo "results_ok=$(expr \ + ${{ env.tests_passed }} + \ + ${{ env.tests_user-input }} + \ + ${{ env.tests_expected-fail }} + \ + ${{ env.tests_benchmark }})" | tee -a $GITHUB_ENV + - shell: bash + run: | + # Generate ASCII-Table report + jq -r '.reports[] | ((.executable | split("testsuites/")[1] | split(".exe")[0])+";"+(if .result=="passed" or .result=="user-input" or .result=="benchmark" or .result=="expected-fail" then "\u001b[32m\u2714" else "\u001b[31m\u2716" end)+" "+.result+"\u001b[0m")' ${{ env.logdir }}/report.json | column -t -s\; + - shell: bash + run: | + # Summarize not passed tests on github step summary + echo "### Tests for ${{ inputs.target }}" >> $GITHUB_STEP_SUMMARY + jq -r '.reports | group_by(.result) | map({result: .[0].result, count: length})[] | ("- "+.result+": "+(.count|tostring))' ${{ env.logdir }}/report.json >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + if [ ${{ env.results_ok }} -ne ${{ env.results_total }} ]; then + echo "The following tests did not pass:" >> $GITHUB_STEP_SUMMARY + echo "| name | result |" >> $GITHUB_STEP_SUMMARY + echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY + jq -r '.reports[] | select(.result != "passed" and .result != "benchmark" and .result != "user-input" and .result != "expected-fail") | ("| "+(.executable | split("testsuites/")[1] | split(".exe")[0])+" | "+.result+" |")' ${{ env.logdir }}/report.json >> $GITHUB_STEP_SUMMARY + fi + - shell: bash + run: | + # check whether all tests worked as expected + echo "${{ env.results_ok }} of ${{ env.results_total }} worked as expected." + [ ${{ env.results_ok }} -eq ${{ env.results_total }} ] diff --git a/.github/workflows/bsps.yml b/.github/workflows/bsps.yml new file mode 100644 index 0000000000..c42e84cb5e --- /dev/null +++ b/.github/workflows/bsps.yml @@ -0,0 +1,63 @@ +name: BSPs + +on: + # Trigger manually from the Actions tab + workflow_dispatch: + +jobs: + setup-bsp-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v3 + with: + path: rtems + - name: Build matrix + id: set-matrix + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/rtems + out=$(./waf bsp_list | jq -R '.|split("/")|{ arch: .[0], bsp: .[1] }' | jq -sc '{include: .}') + echo "$out" + echo "::set-output name=matrix::$out" + + build: + needs: setup-bsp-matrix + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.setup-bsp-matrix.outputs.matrix) }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + path: rtems + - uses: actions/checkout@v3 + with: + path: rtems-actions + ref: ci + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install \ + python3 \ + python-is-python3 + - name: Download toolchain artifact + uses: dawidd6/action-download-artifact@v2 + with: + repo: RTEMS/rtems-source-builder + branch: ci + workflow: toolchain.yml + workflow_conclusion: completed + name: tools-${{ matrix.arch }} + - name: Unpack toolchain + run: | + mkdir -p "$GITHUB_WORKSPACE/toolchain" + for t in *.tar.bz2; do tar xf $t -v -C "$GITHUB_WORKSPACE/toolchain"; done + ls -la "$GITHUB_WORKSPACE/toolchain" + - name: Build BSPs + uses: ./rtems-actions/.github/actions/build-bsps + with: + bsp: "${{ matrix.arch }}/${{ matrix.bsp }}" + sources-rtems: "$GITHUB_WORKSPACE/rtems" + prefix: "$GITHUB_WORKSPACE/toolchain/opt/rtems/6" diff --git a/.github/workflows/simulator.yml b/.github/workflows/simulator.yml new file mode 100644 index 0000000000..7360e76a5e --- /dev/null +++ b/.github/workflows/simulator.yml @@ -0,0 +1,72 @@ +name: Simulator + +on: + # Triggers the workflow on push or pull request for the given branch + push: + branches: [ master ] + pull_request: + branches: [ master ] + + # Trigger manually from the Actions tab + workflow_dispatch: + +jobs: + build: + strategy: + fail-fast: false + matrix: + simulators: + - riscv/griscv + - sparc/gr740 + - arm/xilinx_zynq_a9_qemu + runs-on: ubuntu-latest + steps: + - name: split arch and BSP + shell: bash + run: | + arch=`echo "${{ matrix.simulators }}" | sed -e "s|/.*||g"` + bsp=`echo "${{ matrix.simulators }}" | sed -e "s|.*/||g"` + echo "arch=${arch}" >> $GITHUB_ENV + echo "bsp=${bsp}" >> $GITHUB_ENV + - uses: actions/checkout@v3 + with: + path: rtems + - uses: actions/checkout@v3 + with: + path: rtems-actions + ref: ci + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install \ + python3 \ + python-is-python3 \ + jq + - name: Download toolchain artifact + uses: dawidd6/action-download-artifact@v2 + with: + repo: RTEMS/rtems-source-builder + branch: ci + workflow: toolchain.yml + workflow_conclusion: completed + name: tools-${{ env.arch }} + - name: Download qemu artifact + uses: dawidd6/action-download-artifact@v2 + with: + repo: RTEMS/rtems-source-builder + branch: ci + workflow: toolchain.yml + workflow_conclusion: completed + name: devel-qemu + - name: Unpack toolchain + run: | + mkdir -p "$GITHUB_WORKSPACE/toolchain" + for t in *.tar.bz2; do tar xf $t -v -C "$GITHUB_WORKSPACE/toolchain"; done + ls -la "$GITHUB_WORKSPACE/toolchain" + - name: Start simulator run + id: simulator + uses: ./rtems-actions/.github/actions/run-simulator + with: + target: ${{ matrix.simulators }} + sources-rtems: "$GITHUB_WORKSPACE/rtems" + prefix: "$GITHUB_WORKSPACE/toolchain/opt/rtems/6" -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel