New build setup #4922
Workflow file for this run
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: '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: 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: '' | |
- 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' | |
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 update --depth 1 --init --recursive \ | |
third_party/{surelog,yosys} \ | |
; | |
- 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 update --depth 1 --init --recursive \ | |
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 | |
# See https://github.com/actions/upload-artifact/issues/38 | |
- name: Extract | |
run: tar -xf binaries.tar | |
- 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 | |
# 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 out/share/yosys/plugins/systemverilog.so install_plugin.sh | |
- 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 | |
install-plugin: | |
name: Release Package Installation Test | |
runs-on: [self-hosted, Linux, X64] | |
container: debian:latest | |
needs: release | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
GHA_MACHINE_TYPE: "n2-standard-2" | |
steps: | |
- name: Install Yosys and dependencies | |
run: | | |
apt-get update -q | |
apt-get upgrade -y | |
apt-get install -y \ | |
curl \ | |
jq \ | |
libreadline-dev \ | |
wget \ | |
yosys \ | |
yosys-dev \ | |
; | |
- name: Download and extract UHDM plugin | |
run: | | |
curl https://api.github.com/repos/chipsalliance/synlig/releases/latest -L | jq .assets[1] | grep "browser_download_url" | grep -Eo 'https://[^\"]*' | xargs wget -O - | tar -xz | |
- name: Install it | |
run: | | |
./install_plugin.sh | |
- name: Run Yosys and load SystemVerilog plugin | |
run: yosys -p "plugin -i systemverilog" | |
# 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 |