Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI Improvements #4183

Merged
merged 39 commits into from
May 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
69eb395
ci: Introduce artifacts
KrystalDelusion Feb 5, 2024
7873fe7
Makefile: ignore missing docs
KrystalDelusion Feb 5, 2024
8e2dae2
ci: Checkout Yosys
KrystalDelusion Feb 5, 2024
2bec6e3
ci: Move iverilog from build to test
KrystalDelusion Feb 5, 2024
1ef21ef
ci: working on test setup
KrystalDelusion Feb 5, 2024
93bee0f
ci: more context var use
KrystalDelusion Feb 5, 2024
5ceafea
ci: Default clang build
KrystalDelusion Feb 6, 2024
e3f77ff
ci: Add error reporting
KrystalDelusion Feb 6, 2024
aa470cc
ci: Unify test-*.yml
KrystalDelusion Feb 6, 2024
f408b4d
ci: fix compiler setup
KrystalDelusion Feb 6, 2024
8bc2069
ci: split test build from matrix
KrystalDelusion Feb 8, 2024
9348221
ci: simplify tests a bit
KrystalDelusion Feb 9, 2024
c9c6b96
ci: add missing macOS build
KrystalDelusion Feb 14, 2024
154464e
ci: add macos test build
KrystalDelusion Feb 14, 2024
326d802
ci: split test-compile from test-build
KrystalDelusion Feb 14, 2024
616848b
ci: Use aminya/setup-cpp
KrystalDelusion Mar 3, 2024
6244024
ci: Add CC_SHORT env var
KrystalDelusion Mar 3, 2024
d07323e
ci: Add action for reusable build env setup
KrystalDelusion Mar 4, 2024
3c65ddb
ci: Checkout goes first
KrystalDelusion Mar 4, 2024
6451a6a
ci: Fix action.yml
KrystalDelusion Mar 4, 2024
112a5cf
ci: Add testing for newer compilers
KrystalDelusion Mar 20, 2024
6f602e7
docs: Debugging macro test fail
KrystalDelusion Mar 20, 2024
0720020
ci: Drop gcc-12
KrystalDelusion Mar 20, 2024
a4c3dcc
docs: Fix macro_commands
KrystalDelusion Mar 21, 2024
7fbf286
ci: Update for main branch rename
KrystalDelusion Mar 21, 2024
c89c5c3
ci: Disable fail fast for test runs
KrystalDelusion Mar 21, 2024
7d8928a
ci: Remove macOS from test-docs
KrystalDelusion Mar 21, 2024
144d3c9
Add empty line to action.yml
KrystalDelusion Apr 24, 2024
fc48c3a
ci: Update OS/compiler targets
KrystalDelusion Apr 24, 2024
8fc7dcb
ci: Drop python2
KrystalDelusion Apr 24, 2024
eae7356
Cleanups and update of VS action
mmicko Apr 25, 2024
24b3690
test-build: Use macos-latest (macOS 14, M1)
KrystalDelusion Apr 29, 2024
6908330
ci: Reduce number of jobs
KrystalDelusion Apr 29, 2024
4d8ce13
compile-only: Include genfiles and extra_targets
KrystalDelusion Apr 29, 2024
ff730f4
ci: Add autoconf to macos dependencies
KrystalDelusion Apr 29, 2024
7905921
Remove test-docs.yml in favour of test-build
KrystalDelusion May 9, 2024
c24a906
Fix submodules
KrystalDelusion May 9, 2024
6dde810
Remove checkout for specific iverilog git version
mmicko May 10, 2024
5e6bb45
Merge branch 'main' into krys/refactor-workflows
mmicko May 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/actions/setup-build-env/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Build environment setup
description: Configure build env for Yosys builds
runs:
using: composite
steps:
- name: Install Linux Dependencies
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update
sudo apt-get install gperf build-essential bison flex libreadline-dev gawk tcl-dev libffi-dev git graphviz xdot pkg-config python3 libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev

- name: Install macOS Dependencies
if: runner.os == 'macOS'
shell: bash
run: |
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install bison flex gawk libffi pkg-config bash autoconf

- name: Linux runtime environment
if: runner.os == 'Linux'
shell: bash
run: |
echo "${{ github.workspace }}/.local/bin" >> $GITHUB_PATH
echo "procs=$(nproc)" >> $GITHUB_ENV

- name: macOS runtime environment
if: runner.os == 'macOS'
shell: bash
run: |
echo "${{ github.workspace }}/.local/bin" >> $GITHUB_PATH
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
echo "$(brew --prefix flex)/bin" >> $GITHUB_PATH
echo "procs=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
172 changes: 172 additions & 0 deletions .github/workflows/test-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
name: Build and run tests

on: [push, pull_request]

jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'

build-yosys:
name: Reusable build
runs-on: ${{ matrix.os }}
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
env:
CC: clang
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
fail-fast: false
steps:
- name: Checkout Yosys
uses: actions/checkout@v4
with:
submodules: true

- name: Setup environment
uses: ./.github/actions/setup-build-env

- name: Build
shell: bash
run: |
mkdir build
cd build
make -f ../Makefile config-$CC
make -f ../Makefile -j$procs

- name: Log yosys-config output
run: |
./yosys-config || true

- name: Log yosys-config output
run: |
./yosys-config || true

- name: Compress build
shell: bash
run: |
cd build
tar -cvf ../build.tar share/ yosys yosys-*

- name: Store build artifact
uses: actions/upload-artifact@v4
with:
name: build-${{ matrix.os }}
path: build.tar
retention-days: 1

test-yosys:
name: Run tests
runs-on: ${{ matrix.os }}
needs: [build-yosys, pre_job]
if: needs.pre_job.outputs.should_skip != 'true'
env:
CC: clang
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
fail-fast: false
steps:
- name: Checkout Yosys
uses: actions/checkout@v4

- name: Setup environment
uses: ./.github/actions/setup-build-env

- name: Get iverilog
shell: bash
run: |
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_ENV

- name: Cache iverilog
id: cache-iverilog
uses: actions/cache@v4
with:
path: .local/
key: ${{ matrix.os }}-${{ env.IVERILOG_GIT }}

- name: Build iverilog
if: steps.cache-iverilog.outputs.cache-hit != 'true'
shell: bash
run: |
mkdir -p ${{ github.workspace }}/.local/
cd iverilog
autoconf
CC=gcc CXX=g++ ./configure --prefix=${{ github.workspace }}/.local
make -j$procs
make install

- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-${{ matrix.os }}

- name: Uncompress build
shell: bash
run:
tar -xvf build.tar

- name: Log yosys-config output
run: |
./yosys-config || true

- name: Run tests
shell: bash
run: |
make -j$procs test TARGETS= EXTRA_TARGETS= CONFIG=$CC

- name: Report errors
if: ${{ failure() }}
shell: bash
run: |
find tests/**/*.err -print -exec cat {} \;

test-docs:
name: Run docs tests
runs-on: ${{ matrix.os }}
needs: [build-yosys, pre_job]
if: needs.pre_job.outputs.should_skip != 'true'
env:
CC: clang
strategy:
matrix:
os: [ubuntu-latest]
fail-fast: false
steps:
- name: Checkout Yosys
uses: actions/checkout@v4

- name: Setup environment
uses: ./.github/actions/setup-build-env

- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: build-${{ matrix.os }}

- name: Uncompress build
shell: bash
run:
tar -xvf build.tar

- name: Log yosys-config output
run: |
./yosys-config || true

- name: Run tests
shell: bash
run: |
make -C docs test -j${{ env.procs }}
79 changes: 79 additions & 0 deletions .github/workflows/test-compile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Compiler testing

on: [push, pull_request]

jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
# cancel previous builds if a new commit is pushed
cancel_others: 'true'
# only run on push *or* pull_request, not both
concurrent_skipping: 'same_content_newer'

test-compile:
runs-on: ${{ matrix.os }}
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
env:
CXXFLAGS: ${{ startsWith(matrix.compiler, 'gcc') && '-Wp,-D_GLIBCXX_ASSERTIONS' || ''}}
CC_SHORT: ${{ startsWith(matrix.compiler, 'gcc') && 'gcc' || 'clang' }}
strategy:
matrix:
os:
- ubuntu-latest
compiler:
# oldest supported
- 'clang-14'
- 'gcc-10'
# newest
- 'clang'
- 'gcc'
include:
# macOS
- os: macos-13
compiler: 'clang'
# oldest clang not available on ubuntu-latest
- os: ubuntu-22.04
compiler: 'clang-11'
fail-fast: false
steps:
- name: Checkout Yosys
uses: actions/checkout@v4
with:
submodules: true

- name: Setup environment
uses: ./.github/actions/setup-build-env

- name: Setup Cpp
uses: aminya/setup-cpp@v1
with:
compiler: ${{ matrix.compiler }}

- name: Tool versions
shell: bash
run: |
$CC --version
$CXX --version

# minimum standard
- name: Build C++11
shell: bash
run: |
make config-$CC_SHORT
make -j$procs CXXSTD=c++11 compile-only

# maximum standard, only on newest compilers
- name: Build C++20
if: ${{ matrix.compiler == 'clang' || matrix.compiler == 'gcc'}}
shell: bash
run: |
make config-$CC_SHORT
make -j$procs CXXSTD=c++20 compile-only
58 changes: 0 additions & 58 deletions .github/workflows/test-docs.yml

This file was deleted.

Loading
Loading