Skip to content

Stable rs

Stable rs #5267

Workflow file for this run

name: 'main'
run-name: ${{ github.event_name == 'workflow_dispatch' && github.ref_name || '' }}
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
GHA_CUSTOM_LINE_PREFIX: "▌"
jobs:
emit-workflow-info:
name: Emit Workflow Info
if: ${{ github.event_name == 'workflow_dispatch' }}
runs-on: [self-hosted, Linux, X64]
container: 'bitnami/git:2.40.1-debian-11-r4'
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
style-check:
name: Style check
runs-on: [self-hosted, Linux, X64]
container: bitnami/git:2.40.1-debian-11-r4
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Install dependencies
run: |
apt-get update -q
apt-get install -y clang-format
- name: Sources format check
run: |
./.github/scripts/format_sources.sh
if ! git diff --exit-code; then
echo
echo "Format locally using: ./.github/scripts/format_sources.sh"
echo
false
fi
- name: Sort check
run: |
./.github/scripts/sort_passlists.sh
if ! git diff --exit-code; then
echo
echo "Sort locally using: ./.github/scripts/sort_passlists.sh"
echo
false
fi
build-binaries:
strategy:
matrix:
include:
- name: 'Build Binaries'
artifact-name: 'binaries'
cc: 'gcc'
cxx: 'g++'
apt-extra-deps: 'gcc g++'
build-binaries-args: ''
debian-patch: false
- name: 'Build Binaries (for Debian)'
artifact-name: 'binaries-debian'
cc: 'gcc'
cxx: 'g++'
apt-extra-deps: 'gcc g++'
build-binaries-args: ''
debian-patch: true
- name: 'Build Binaries (ASAN)'
artifact-name: 'binaries-asan'
cc: 'clang-15'
cxx: 'clang++-15'
apt-extra-deps: 'clang-15'
build-binaries-args: 'ENABLE_ASAN:=1'
debian-patch: false
name: ${{ matrix.name }}
runs-on: [self-hosted, Linux, X64]
container: debian:bookworm
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
BUILD_BINARIES_ARGS: ${{ matrix.build-binaries-args }}
CCACHE_DIR: "${{ github.workspace }}/.cache/"
DEBIAN_FRONTEND: noninteractive
GHA_MACHINE_TYPE: "n2-highmem-8"
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Install dependencies
run: |
apt-get update -q
apt-get install -y \
ant \
bison \
build-essential \
ccache \
cmake \
default-jre \
flex \
git \
google-perftools \
libffi-dev \
libfl-dev \
libgoogle-perftools-dev \
libreadline-dev \
pkg-config \
python3 \
python3-dev \
python3-pip \
python3-orderedmultidict \
swig \
tcl-dev \
tclsh \
uuid \
uuid-dev \
wget \
${{ matrix.apt-extra-deps }} \
;
- name: Checkout submodules
run: |
git submodule sync
git submodule update --depth 1 --init --recursive --checkout \
third_party/{surelog,yosys} \
;
- name: Apply Debian patch
if: ${{ matrix.debian-patch }}
run: |
git -C third_party/yosys apply ../yosys_mod/yosys_debian.patch
- name: Setup cache
uses: actions/cache@v2
with:
path: ${{ env.CCACHE_DIR }}
key: cache_${{ matrix.artifact-name }}_${{ github.run_id }}
restore-keys: cache_${{ matrix.artifact-name }}_
- name: Build binaries
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
make -rR -j$(nproc) -Oline -f build_binaries.mk ${BUILD_BINARIES_ARGS} \
install-surelog install-yosys install-plugin
# By default actions/upload-artifact@v2 do not preserve file permissions
# tar directory to workaround this issue
# See https://github.com/actions/upload-artifact/issues/38
tar -cvf ${{ matrix.artifact-name }}.tar out
- name: Upload binaries
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.artifact-name }}
path: |
${{ matrix.artifact-name }}.tar
- name: Upload load graphs
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v2
with:
name: plots
path: |
**/plot_*.svg
build-sv2v:
name: Build sv2v
runs-on: [self-hosted, Linux, X64]
container: ubuntu:jammy
env:
DEBIAN_FRONTEND: noninteractive
GHA_MACHINE_TYPE: "n2-standard-4"
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Set up common Ubuntu configuration
run: ./.github/scripts/set-up-common-ubuntu-configuration.sh
- name: Install dependencies
run: |
apt-get update -q
apt-get install -y \
git \
wget \
;
- name: 'Read submodule revisions'
id: rev
run: |
CACHE_HASH_LENGTH=20
repo_hash="$(git submodule status third_party/sv2v)"
# Skip first character which is ' ' or '+'
repo_hash="${repo_hash:1:$CACHE_HASH_LENGTH}"
printf '::set-output name=%s::%s\n' 'sv2v-submodule-rev' "${repo_hash}"
- name: Try restoring build results from cache
id: cache-restore
uses: actions/cache/restore@v3
with:
path: third_party/sv2v/bin/sv2v
key: sv2v@${{ steps.rev.outputs.sv2v-submodule-rev }}
- name: Checkout submodules
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' }}
run: |
git submodule sync
git submodule update --depth 1 --init --recursive --checkout \
third_party/sv2v \
;
- name: Build binaries
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' }}
run: |
export PATH=$PWD/install/bin:/usr/local/bin:${PATH}
wget -qO- https://get.haskellstack.org/ | sh -s - -f -d /usr/local/bin
make -j$(nproc) -C $PWD/third_party/sv2v
- name: Upload binaries
uses: actions/upload-artifact@v2
with:
name: sv2v
path: |
third_party/sv2v/bin/sv2v
- name: Save build results to cache
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' && ! (failure() || cancelled()) }}
uses: actions/cache/save@v3
with:
path: third_party/sv2v/bin/sv2v
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
- name: Upload load graphs
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v2
with:
name: plots
path: |
**/plot_*.svg
tests-parsing:
name: Parsing Tests
uses: ./.github/workflows/parsing-tests.yml
secrets:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
permissions:
pull-requests: write
needs: build-binaries
tests-formal-verification:
name: Formal Verification Tests
uses: ./.github/workflows/formal-verification.yml
needs:
- build-binaries
- build-sv2v
tests-bsg-micro-designs-diff:
name: Diff generated BSG Micro Designs tests
uses: ./.github/workflows/bsg-test-diff.yml
needs:
- build-binaries
tests-large-designs:
name: Large Designs Tests
uses: ./.github/workflows/large-designs.yml
needs: build-binaries
release:
name: Release Package
needs:
- build-binaries
- tests-parsing
- tests-formal-verification
- tests-large-designs
runs-on: ubuntu-22.04
if: ${{github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')}}
steps:
- uses: actions/checkout@v2
with:
# Download complete repository + tags
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@v2
with:
name: binaries
- name: Download Debian artifacts
uses: actions/download-artifact@v2
with:
name: binaries-debian
# See https://github.com/actions/upload-artifact/issues/38
- name: Extract
run: |
tar -xf binaries.tar
mkdir debian
tar -xf binaries-debian.tar -C debian
- name: Generate tarball and apply TAG
run: |
GIT_VERSION=${GIT_VERSION:-$(git rev-parse --short "$GITHUB_SHA")}
DATE=$(git show -s --date=short --format=%cd)
FULL_TARBALL=synlig-$GIT_VERSION-$DATE.tar.gz
PLUGIN_TARBALL=synlig-plugin-$GIT_VERSION-$DATE.tar.gz
PLUGIN_DEBIAN_TARBALL=synlig-plugin-debian-$GIT_VERSION-$DATE.tar.gz
# Create a tag of form 2021-12-06-ad2466e
TAG="${TAG:-$(git show -s --date=short --format=%cd-%h)}"
git tag "$TAG" || true
echo "TAG=$TAG" >> $GITHUB_ENV
ls -lah out
tar -zcvf $FULL_TARBALL out
tar -zcvf $PLUGIN_TARBALL install_plugin.sh out/current/share/yosys/plugins/systemverilog.so
tar -zcvf $PLUGIN_DEBIAN_TARBALL install_plugin.sh -C debian out/current/share/yosys/plugins/systemverilog.so
- name: Get PR data
uses: 8BitJonny/[email protected]
with:
sha: ${{ github.event.pull_request.head.sha }}
id: release_pr
- name: Deploy release
env:
RELEASE_NAME: >
${{ steps.release_pr.outputs.pr_found == 'true'
&&
format('{0}: #{1}: {2}',
env.TAG,
steps.release_pr.outputs.number,
steps.release_pr.outputs.pr_title)
||
env.TAG }}
RELEASE_BODY: >
${{ steps.release_pr.outputs.pr_found == 'true'
&&
steps.release_pr.outputs.pr_body
||
'' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: synlig-*.tar.gz
tag: ${{ env.TAG }}
release_name: ${{ env.RELEASE_NAME }}
body: ${{ env.RELEASE_BODY }}
overwrite: true
file_glob: true
test-release-with-packaged-yosys:
name: Release Package Installation Test
runs-on: [self-hosted, Linux, X64]
container: debian:trixie
needs: release
env:
DEBIAN_FRONTEND: noninteractive
PIPX_BIN_DIR: /usr/local/bin
steps:
- name: Prepare Repository
uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Install Prerequisites
run: |
apt update -qq
apt install -y --no-install-recommends pipx git
pipx install git+https://github.com/antmicro/tuttest#egg=tuttest
- name: Install Dependencies
run: |
tuttest README.md install-yosys-debian | bash -
- name: Install Plugin
run: |
tuttest README.md download-plugin | bash -
tuttest README.md install-plugin | bash -
- name: Load Plugin
run: |
tuttest README.md load-plugin | yosys -Q | tee log.txt
grep ^ERROR log.txt || exit 0
exit 1
- name: Test Plugin
run: |
tuttest README.md example-verilog | bash -
tuttest README.md example-multiple-files | yosys
- name: Test sv2v pull and build
run: |
export PATH=`pwd`/out/current/bin:$PATH
tuttest README.md sv2v-update | bash -
tuttest README.md sv2v-build | bash -
test-readme-install-from-source:
name: Test "Installation from source" from README
runs-on: [self-hosted, Linux, X64]
container: debian:trixie
env:
DEBIAN_FRONTEND: noninteractive
PIPX_BIN_DIR: /usr/local/bin
steps:
- name: Prepare Repository
uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Install Prerequisites
run: |
apt update -qq
apt install -y --no-install-recommends pipx git
pipx install git+https://github.com/antmicro/tuttest#egg=tuttest
- name: Install Dependencies
run: |
tuttest README.md dependencies | bash -
- name: Build Binaries
run: |
tuttest README.md build-binaries | bash -
- name: Test Binaries
run: |
tuttest README.md load-plugin | (. <(tuttest README.md path-setup) && yosys)
(tuttest README.md path-setup; tuttest README.md example-verilog) | bash -
(tuttest README.md path-setup; tuttest README.md example-uhdm-ver1) | bash -
(tuttest README.md path-setup; tuttest README.md example-uhdm-ver2) | bash -
tuttest README.md example-multiple-files | (. <(tuttest README.md path-setup) && yosys)
test-plugin-with-packaged-yosys:
name: Test With Packaged Yosys
runs-on: [self-hosted, Linux, X64]
container: debian:trixie
needs: build-binaries
env:
DEBIAN_FRONTEND: noninteractive
PIPX_BIN_DIR: /usr/local/bin
steps:
- uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Download binaries
uses: actions/download-artifact@v2
with:
name: binaries-debian
- name: Extract
run: tar -xf binaries-debian.tar
- name: Install Yosys & Plugin
run: |
apt update -q
apt install -y yosys yosys-dev
./install_plugin.sh
- name: Load Plugin
run: |
yosys -Q -m systemverilog \
-p "help read_systemverilog" \
-p "help read_uhdm" 2>&1 | tee log.txt
grep ^ERROR log.txt || exit 0
exit 1
# needed for test linting
upload-event-file:
name: Upload GHA event file
runs-on: ubuntu-latest
steps:
- run: cp "$GITHUB_EVENT_PATH" ./event.json
- name: Upload event file as artifact
uses: actions/upload-artifact@v2
with:
name: event.json
path: event.json