diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..28958cb188 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,198 @@ +name: "CI" + +on: [push] +jobs: + Ubuntu: + runs-on: ubuntu-latest + outputs: + cache_misses: ${{ env.cache_misses }} + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: | + sudo apt-get update + sudo apt-get -y install apt-utils + sudo apt-get -y install git gcc g++ cmake python3 make ninja-build + sudo apt-get -y install tcpdump libgsl-dev libxml2-dev + sudo apt-get -y install curl unzip tar + sudo apt-get -y install ccache + - name: Get timestamp + id: time + run: python3 -c "from datetime import datetime; print('time='+datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))" >> $GITHUB_ENV + - name: Restore ccache + id: ccache + uses: actions/cache@v4 + with: + path: .ccache + key: ubuntu-ci-${{env.time}} + restore-keys: ubuntu-ci- + - name: Setup ccache + run: | + ccache --set-config=cache_dir="$GITHUB_WORKSPACE/.ccache" + ccache --set-config=max_size=400M + ccache --set-config=compression=true + ccache -z + - name: Configure CMake + run: | + ./ns3 configure -d release --enable-asserts --enable-examples --enable-tests --disable-werror -G"Ninja" + - name: Build ns-3 + run: | + ./ns3 build + - name: Print ccache statistics + id: ccache_results + run: | + ccache -s + python3 -c "import re, subprocess;print('cache_misses=%d' % int(re.findall('cache_miss(.*)', subprocess.check_output(['ccache', '--print-stats']).decode())[0]))" >> $GITHUB_ENV + - name: Run tests and examples + if: env.cache_misses != '0' + run: python3 test.py --no-build + + Codecov: + runs-on: ubuntu-latest + needs: Ubuntu + if: needs.Ubuntu.outputs.cache_misses != '0' + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: | + sudo apt-get update + sudo apt-get -y install apt-utils + sudo apt-get -y install git gcc g++ cmake python3 make ninja-build + sudo apt-get -y install tcpdump libgsl-dev libxml2-dev + sudo apt-get -y install curl unzip tar + sudo apt-get -y install ccache + sudo apt-get -y install lcov + - name: Get timestamp + id: time + run: python3 -c "from datetime import datetime; print('time='+datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))" >> $GITHUB_ENV + - name: Restore ccache + id: ccache + uses: actions/cache@v4 + with: + path: .ccache + key: ubuntu-coverage-${{env.time}} + restore-keys: ubuntu-coverage- + - name: Setup ccache + run: | + ccache --set-config=cache_dir="$GITHUB_WORKSPACE/.ccache" + ccache --set-config=max_size=400M + ccache --set-config=compression=true + ccache -z + - name: Configure CMake + run: | + ./ns3 configure --enable-asserts --enable-examples --enable-tests --disable-werror --enable-gcov -G"Ninja" + - name: Build ns-3 + run: | + ./ns3 build + - name: Print ccache statistics + id: ccache_results + run: | + ccache -s + python3 -c "import re, subprocess;print('cache_misses=%d' % int(re.findall('cache_miss(.*)', subprocess.check_output(['ccache', '--print-stats']).decode())[0]))" >> $GITHUB_ENV + - name: Generate coverage data and submit to codecov.io + if: env.cache_misses != '0' + run: | + ./ns3 build coverage_gcc + cd ./build/coverage + bash <(curl -s https://codecov.io/bash) -f ns3.info || echo "Codecov did not collect coverage reports" + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + Windows_MinGW: + runs-on: windows-latest + defaults: + run: + shell: msys2 {0} + steps: + - uses: actions/checkout@v4 + - uses: msys2/setup-msys2@v2 + - name: Install required msys2/mingw64 packages + run: | + pacman -S --noconfirm \ + unzip \ + tar \ + mingw-w64-x86_64-curl \ + mingw-w64-x86_64-binutils \ + mingw-w64-x86_64-cmake \ + mingw-w64-x86_64-gcc \ + mingw-w64-x86_64-ninja \ + mingw-w64-x86_64-python \ + mingw-w64-x86_64-ccache \ + mingw-w64-x86_64-gsl \ + mingw-w64-x86_64-libxml2 \ + mingw-w64-x86_64-lld \ + mingw-w64-x86_64-sed + pacman --noconfirm -Scc + - name: Get timestamp + id: time + run: python3 -c "from datetime import datetime; print('time='+datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))" >> $GITHUB_ENV + - name: Restore ccache + id: ccache + uses: actions/cache@v4 + with: + path: .ccache + key: msys2-${{env.time}} + restore-keys: msys2- + - name: Setup ccache + run: | + ccache --set-config=cache_dir="$GITHUB_WORKSPACE/.ccache" + ccache --set-config=max_size=400M + ccache --set-config=compression=true + ccache -z + - name: Configure CMake + run: | + python3 ns3 configure -d release --enable-asserts --enable-examples --enable-tests --disable-werror -G"Ninja" + - name: Build ns-3 + run: | + python3 ns3 build + - name: Print ccache statistics + id: ccache_results + run: | + ccache -s + python3 -c "import re, subprocess;print('cache_misses=%d' % int(re.findall('cache_miss(.*)', subprocess.check_output(['ccache', '--print-stats']).decode())[0]))" >> $GITHUB_ENV + - name: Run tests and examples + if: env.cache_misses != '0' + run: python3 test.py --no-build + + Mac_OS_X: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ macos-latest, macos-13 ] + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: | + brew install ninja cmake ccache libxml2 gsl open-mpi #qt5 + - name: Get timestamp + id: time + run: python3 -c "from datetime import datetime; print('time='+datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))" >> $GITHUB_ENV + - name: Restore ccache + id: ccache + uses: actions/cache@v4 + with: + path: .ccache + key: osx_brew-ci-${{env.time}} + restore-keys: osx_brew-ci- + - name: Setup ccache + run: | + export PATH=/usr/local/bin:$PATH #:/usr/local/opt/qt/bin + ccache --set-config=cache_dir="$GITHUB_WORKSPACE/.ccache" + ccache --set-config=max_size=400M + ccache --set-config=compression=true + ccache -z + - name: Configure CMake + run: | + export PATH=/usr/local/bin:$PATH #:/usr/local/opt/qt/bin + ./ns3 configure -d release --enable-asserts --enable-examples --enable-tests --disable-werror -G"Ninja" + - name: Build ns-3 + run: | + export PATH="$PATH" #:/usr/local/opt/qt/bin + ./ns3 build + - name: Print ccache statistics + id: ccache_results + run: | + ccache -s + python3 -c "import re, subprocess;print('cache_misses=%d' % int(re.findall('cache_miss(.*)', subprocess.check_output(['ccache', '--print-stats']).decode())[0]))" >> $GITHUB_ENV + - name: Run tests and examples + if: env.cache_misses != '0' + run: ./test.py --no-build