Skip to content

Nightly

Nightly #48

Workflow file for this run

# Copyright lowRISC contributors (OpenTitan project).
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
name: Nightly
on:
schedule:
- cron: "00 04 * * *"
workflow_dispatch:
inputs:
branch:
description: 'Branch to run the nightly (for SiVal job only)'
required: true
type: string
permissions:
id-token: write
contents: read
env:
VIVADO_VERSION: "2021.1"
jobs:
fpga_cw310_sival_nightly:
name: FPGA CW310 SiVal tests
runs-on: [ubuntu-22.04-fpga, cw310]
env:
GS_PATH: opentitan-test-results
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
ref: ${{ inputs.branch || 'earlgrey_1.0.0' }} # Schedule only work on the default branch, but we want to run on a different branch.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Update hyperdebug
# We run the update command twice to workaround an issue with udev on the container.
# Where rusb cannot dynamically update its device list in CI (udev is not completely
# functional). If the device is in normal mode, the first thing that opentitantool
# does is to switch it to DFU mode and wait until it reconnects. This reconnection is
# never detected. But if we run the tool another time, the device list is queried again
# and opentitantool can finish the update. The device will now reboot in normal mode
# and work for the hyperdebug job.
run: |
./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware \
|| ./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware
- name: Run tests after ROM boot stage
if: success() || failure()
run: |
module load xilinx/vivado
bazel_tests="$(mktemp)"
./bazelisk.sh query 'attr("tags", "[\[ ]cw310_sival[,\]]", tests(//sw/device/...))' \
| grep -v examples \
| grep -v penetrationtests \
> "$bazel_tests"
./bazelisk.sh test --build_tests_only --test_tag_filters=-slow_test --target_pattern_file="$bazel_tests"
- name: Run tests after ROM_EXT boot stage
if: success() || failure()
run: |
module load xilinx/vivado
bazel_tests="$(mktemp)"
./bazelisk.sh query 'attr("tags", "[\[ ]cw310_sival_rom_ext[,\]]", tests(//sw/device/...))' \
| grep -v examples \
| grep -v penetrationtests \
> "$bazel_tests"
./bazelisk.sh test --build_tests_only --test_tag_filters=-slow_test --target_pattern_file="$bazel_tests"
- name: Compute bucket destination
id: bucket_destination
if: ${{ !cancelled() }}
run: |
BUCKET_PATH=$GS_PATH/job/${{ github.job }}/branch/${{ inputs.branch || 'earlgrey_1.0.0'}}/$(date +%Y-%m-%d-%H%M%S)_test_results.xml
echo "BUCKET_PATH=$BUCKET_PATH" >> $GITHUB_OUTPUT
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: fpga_cw310_sival_nightly-test-results
bucket-destination: ${{ steps.bucket_destination.outputs.BUCKET_PATH }}
fpga_cw340_sival_nightly:
name: FPGA CW340 SiVal tests
runs-on: [ubuntu-22.04-fpga, cw340]
env:
GS_PATH: opentitan-test-results
BAZEL_TEST_RESULTS: test_results.xml
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
ref: ${{ inputs.branch || 'earlgrey_1.0.0' }} # Schedule only work on the default branch, but we want to run on a different branch.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Update hyperdebug
# We run the update command twice to workaround an issue with udev on the container.
# Where rusb cannot dynamically update its device list in CI (udev is not completely
# functional). If the device is in normal mode, the first thing that opentitantool
# does is to switch it to DFU mode and wait until it reconnects. This reconnection is
# never detected. But if we run the tool another time, the device list is queried again
# and opentitantool can finish the update. The device will now reboot in normal mode
# and work for the hyperdebug job.
run: |
./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware \
|| ./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware
- name: Run tests after ROM boot stage
if: success() || failure()
run: |
module load xilinx/vivado
bazel_tests="$(mktemp)"
./bazelisk.sh query 'attr("tags", "[\[ ]cw340_sival[,\]]", tests(//sw/device/...))' \
| grep -v examples \
| grep -v penetrationtests \
> "$bazel_tests"
./bazelisk.sh test --build_tests_only --test_tag_filters=-slow_test --target_pattern_file="$bazel_tests"
- name: Run tests after ROM_EXT boot stage
if: success() || failure()
run: |
module load xilinx/vivado
bazel_tests="$(mktemp)"
./bazelisk.sh query 'attr("tags", "[\[ ]cw340_sival_rom_ext[,\]]", tests(//sw/device/...))' \
| grep -v examples \
| grep -v penetrationtests \
> "$bazel_tests"
./bazelisk.sh test --build_tests_only --test_tag_filters=-slow_test --target_pattern_file="$bazel_tests"
- name: Compute bucket destination
id: bucket_destination
if: ${{ !cancelled() }}
run: |
BUCKET_PATH=$GS_PATH/job/${{ github.job }}/branch/${{ inputs.branch || 'earlgrey_1.0.0'}}/$(date +%Y-%m-%d-%H%M%S)_test_results.xml
echo "BUCKET_PATH=$BUCKET_PATH" >> $GITHUB_OUTPUT
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: fpga_cw340_sival_nightly-test-results
bucket-destination: ${{ steps.bucket_destination.outputs.BUCKET_PATH }}
fpga_cw340_slow_sival_nightly:
name: FPGA CW340 slow SiVal tests
runs-on: [ubuntu-22.04-fpga, cw340]
env:
GS_PATH: opentitan-test-results
BAZEL_TEST_RESULTS: test_results.xml
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
ref: ${{ inputs.branch || 'earlgrey_1.0.0' }} # Schedule only work on the default branch, but we want to run on a different branch.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Update hyperdebug
# We run the update command twice to workaround an issue with udev on the container.
# Where rusb cannot dynamically update its device list in CI (udev is not completely
# functional). If the device is in normal mode, the first thing that opentitantool
# does is to switch it to DFU mode and wait until it reconnects. This reconnection is
# never detected. But if we run the tool another time, the device list is queried again
# and opentitantool can finish the update. The device will now reboot in normal mode
# and work for the hyperdebug job.
run: |
./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware \
|| ./bazelisk.sh run //sw/host/opentitantool -- --interface=hyperdebug_dfu transport update-firmware
- name: Run tests
if: success() || failure()
run: |
module load xilinx/vivado
bazel_tests="$(mktemp)"
./bazelisk.sh query 'attr("tags", "[\[ ]cw340_sival_rom_ext[,\]]", tests(//sw/device/...))' \
'intersect attr("tags", "slow_test", tests(//sw/device/...))' \
| grep -v examples \
| grep -v penetrationtests \
> "$bazel_tests"
./bazelisk.sh test --build_tests_only --target_pattern_file="$bazel_tests"
- name: Compute bucket destination
id: bucket_destination
if: ${{ !cancelled() }}
run: |
BUCKET_PATH=$GS_PATH/job/${{ github.job }}/branch/${{ inputs.branch || 'earlgrey_1.0.0'}}/$(date +%Y-%m-%d-%H%M%S)_test_results.xml
echo "BUCKET_PATH=$BUCKET_PATH" >> $GITHUB_OUTPUT
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: fpga_cw340_slow_sival_nightly-test-results
bucket-destination: ${{ steps.bucket_destination.outputs.BUCKET_PATH }}
rom_e2e:
name: ROM E2E Tests
runs-on: [ubuntu-22.04-fpga, cw310]
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Run all ROM E2E tests
run: |
module load "xilinx/vivado/${VIVADO_VERSION}"
./bazelisk.sh test \
--define DISABLE_VERILATOR_BUILD=true \
--define bitstream=gcp_splice \
--test_tag_filters=-verilator,-dv,-broken \
--build_tests_only \
--test_output=errors \
//sw/device/silicon_creator/rom/e2e/...
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: rom_e2e-test-results
slow_otbn_crypto_tests:
name: Slow OTBN Crypto Tests
runs-on: ubuntu-22.04
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Run the tests
run: |
./bazelisk.sh test --test_tag_filters=nightly //sw/otbn/crypto/...
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: slow_otbn_crypto_tests-test-results
bob_spi_i2c:
name: "BoB: SPI and I2C Tests"
runs-on: [ubuntu-22.04-fpga, cw310]
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for the bitstream cache to work.
- name: Prepare environment
uses: ./.github/actions/prepare-env
with:
service_account_json: '${{ secrets.BAZEL_CACHE_CREDS }}'
- name: Run the PMOD tests with Test ROM
run: |
module load "xilinx/vivado/${VIVADO_VERSION}"
./bazelisk.sh test \
--define DISABLE_VERILATOR_BUILD=true \
--define bitstream=gcp_splice \
--build_tests_only \
--test_output=errors \
--test_tag_filters="cw310_test_rom" \
$(./bazelisk.sh query 'attr("tags", "[\[ ]pmod[,\]]", tests(//...))')
- name: Run the PMOD tests for SiVal
run: |
module load "xilinx/vivado/${VIVADO_VERSION}"
./bazelisk.sh test \
--define DISABLE_VERILATOR_BUILD=true \
--define bitstream=gcp_splice \
--build_tests_only \
--test_output=errors \
--test_tag_filters=cw310_sival,-broken \
$(./bazelisk.sh query 'attr("tags", "[\[ ]pmod[,\]]", tests(//...))')
- name: Publish Bazel test results
uses: ./.github/actions/publish-bazel-test-results
if: ${{ !cancelled() }}
with:
artifact-name: bob_spi_i2c-test-results