Skip to content

Commit

Permalink
Merge pull request #2078 from skalenetwork/feature/2031-run-all-tests…
Browse files Browse the repository at this point in the history
…-nightly

#2031 run all tests nightly for open prs
  • Loading branch information
DmytroNazarenko authored Jan 16, 2025
2 parents 2105787 + f291087 commit a12b847
Show file tree
Hide file tree
Showing 3 changed files with 345 additions and 1 deletion.
67 changes: 67 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Run nightly tests

on:
schedule:
- cron: '0 0 * * *'

workflow_dispatch:

defaults:
run:
shell: bash
jobs:
identify-prs:
runs-on: ubuntu-latest
outputs:
pr-data: ${{ steps.get-prs.outputs.pr-data }}
steps:
- name: Identify Open Non-Draft PRs with Recent Commits
id: get-prs
uses: actions/github-script@v6
with:
script: |
const oneDayAgo = new Date();
oneDayAgo.setDate(oneDayAgo.getDate() - 1);
const prs = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
});
const filteredPRs = [];
for (const pr of prs.data) {
if (pr.draft) continue;
const commits = await github.rest.pulls.listCommits({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
});
const recentCommits = commits.data.filter(commit => {
const commitDate = new Date(commit.commit.author.date);
return commitDate >= oneDayAgo;
});
if (recentCommits.length > 0) {
filteredPRs.push({ branch: pr.head.ref, sha: pr.head.sha, number: pr.number });
}
}
console.log("Filtered PRs:", filteredPRs);
core.setOutput('pr-data', JSON.stringify(filteredPRs));
run-all-tests:
needs: [identify-prs]
if: ${{ needs.identify-prs.outputs.pr-data != '[]' && needs.identify-prs.outputs.pr-data != '' }}
strategy:
matrix:
pr: ${{fromJson(needs.identify-prs.outputs.pr-data)}}
uses: ./.github/workflows/test-all.yml
with:
branch_name: ${{ matrix.pr.branch }}
sha: ${{ matrix.pr.sha }}
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
277 changes: 277 additions & 0 deletions .github/workflows/test-all.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,277 @@
name: Build skaled and run all tests
on:
workflow_call:
inputs:
branch_name:
type: string
description: 'Branch name'
required: true
sha:
type: string
description: 'SHA'
required: true
secrets:
DOCKER_USERNAME:
required: true
DOCKER_PASSWORD:
required: true
defaults:
run:
shell: bash
jobs:
testAll:
runs-on: self-hosted
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
NO_ULIMIT_CHECK: 1
ccache_compress: 'true'
ccache_compresslevel: 9
steps:
- name: Extract repo name
run: echo ::set-env name=REPOSITORY_NAME::$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}')
shell: bash
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
- name: checkout
uses: actions/checkout@v2
with:
ref: ${{ inputs.branch_name }}
- name: Cache apt packages
uses: actions/cache@v2
with:
path: |
/var/cache/apt/archives
key: ${{ runner.os }}-apt-cache
ttl: 1000000 # purge cache every 1000000 seconds (10 days). This is to pull updated packages
- name: update apt
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test || true
sudo apt-get update || true
- name: install packages
run: |
sudo apt-get -y remove libzmq* || true
sudo apt-get -y install software-properties-common gcc-11 g++-11 || true
- name: Use g++-11 and gcov-11 by default
run: |
echo "Updating all needed alternatives"
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11
sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-11 11
sudo update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-11 11
sudo update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-11 11
echo "Checking alternative for gcc"
which gcc
gcc --version
echo "Checking alternative for g++"
which g++
g++ --version
echo "Checking alternative for gcov"
which gcov
gcov --version
echo "Checking alternative for gcov-dump"
which gcov-dump
gcov-dump --version
echo "Checking alternative for gcov-tool"
which gcov-tool
gcov-tool --version
- name: Get newest lcov
run: |
# sudo apt-get install libcapture-tiny-perl
echo "Removing previous lcov version..."
sudo apt-get remove lcov || true
echo "Installing newest lcov version..."
rm -rf newer_lcov || true
mkdir newer_lcov
cd newer_lcov
git clone https://github.com/linux-test-project/lcov --recursive --recurse-submodules
cd lcov
git checkout 92e2121
sudo make install
cd ..
cd ..
echo "Checking installed lcov version..."
which lcov
lcov --version
- name: Submodule update
run: |
rm -rf ./libconsensus || true
ls -1
git submodule update --init --recursive
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
shell: cmake -P {0}
run: |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
message("::set-output name=timestamp::${current_date}")
- name: Ccache cache files
uses: actions/[email protected]
with:
path: .ccache
key: ${ { matrix.config.name } }-ccache-${ { steps.ccache_cache_timestamp.outputs.timestamp } }
restore-keys: |
${ { matrix.config.name } }-ccache-
- name: Update gcc-11
run: |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11
- name: Configure ccache cache size, zero ccache counters and print ccache stats before start
run: |
ccache --max-size=15G
ccache -z
ccache --show-stats
- name: Build dependencies
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
export CC=gcc-11
export CXX=g++-11
export TARGET=all
export CMAKE_BUILD_TYPE=Debug
cd deps
#######################################./clean.sh
rm -f ./libwebsockets-from-git.tar.gz
./build.sh DEBUG=1 PARALLEL_COUNT=$(nproc)
cd ..
- name: Configure all
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
export CC=gcc-11
export CXX=g++-11
export TARGET=all
export CMAKE_BUILD_TYPE=Debug
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE ..
cd ..
- name: Print ccache stats for deps
run: |
ccache --show-stats
- name: Build all
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
export CC=gcc-11
export CXX=g++-11
export TARGET=all
export CMAKE_BUILD_TYPE=Debug
cd build
make testeth -j$(nproc)
cd ..
- name: Print ccache stats after full build
run : |
ccache --show-stats
- name: Testeth all verbosity 4
id: TestCore
run : |
cd build/test
export NO_NTP_CHECK=1
export NO_ULIMIT_CHECK=1
function run_test() { ./testeth --report_level=detailed -t "$1" -- --all --verbosity 4; }
run_test boostTests
run_test CommonJSTests
run_test FixedHashTests
run_test RangeMaskTest
run_test Crypto
run_test LibSnark
run_test commonjs
run_test KeyManagerTests
run_test TransitionTests
run_test TransactionTests
run_test VMTests
run_test LevelDBTests
run_test CoreLibTests
run_test RlpTests
run_test SharedSpaceTests
run_test EthashTests
run_test SealEngineTests
run_test DifficultyTests
run_test BlockSuite
run_test BlockChainMainNetworkSuite
run_test BlockChainFrontierSuite
run_test BlockQueueSuite
run_test ClientBase
run_test EstimateGas
run_test getHistoricNodesData
run_test ExtVmSuite
run_test GasPricer
run_test BasicTests
run_test InstanceMonitorSuite
run_test PrecompiledTests
run_test SkaleHostSuite
run_test StateUnitTests
run_test libethereum
run_test TransactionQueueSuite
run_test LegacyVMSuite
run_test SkaleInterpreterSuite
run_test SnapshotSigningTestSuite
run_test SkUtils
run_test BCGeneralStateTests
run_test BlockChainTests
run_test BlockChainTestSuite
run_test GeneralStateTests
run_test TestHelperSuite
run_test LevelDBHashBase
run_test memDB
run_test OverlayDBTests
run_test AccountHolderTest
run_test ClientTests
run_test JsonRpcSuite
run_test SingleConsensusTests
run_test ConsensusTests
sudo NO_ULIMIT_CHECK=1 NO_NTP_CHECK=1 ./testeth -t BtrfsTestSuite -- --all --verbosity 4
sudo NO_ULIMIT_CHECK=1 NO_NTP_CHECK=1 ./testeth -t HashSnapshotTestSuite -- --all --verbosity 4
sudo NO_ULIMIT_CHECK=1 NO_NTP_CHECK=1 ./testeth -t ClientSnapshotsSuite -- --all --verbosity 4
cd ..
continue-on-error: true

- name: Configure all as historic
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
export CC=gcc-11
export CXX=g++-11
export TARGET=all
export CMAKE_BUILD_TYPE=Debug
mkdir -p build_historic
cd build_historic
cmake -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -DHISTORIC_STATE=1 ..
cd ..
- name: Build all historic
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
export CC=gcc-11
export CXX=g++-11
export TARGET=all
export CMAKE_BUILD_TYPE=Debug
cd build_historic
make testeth -j$(nproc)
cd ..
- name: Print ccache stats after full historic build
run : |
ccache --show-stats
- name: Testeth historic
id: TestHistoric
run : |
cd build_historic/test
export NO_NTP_CHECK=1
export NO_ULIMIT_CHECK=1
./testeth -t JsonRpcSuite -- --all --verbosity 4
continue-on-error: true
- name: Update PR Status
uses: actions/github-script@v6
with:
script: |
const state = '${{ steps.testCore.outcome }}' === 'success' ? ('${{ steps.testHistoric.outcome }}' === 'success' ? 'success' : 'failure') : 'failure';
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: '${{ inputs.sha }}',
state,
context: 'Nightly tests',
description: state === 'success' ? 'Nightly tests passed' : 'Nightly tests failed',
target_url: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}`
});
2 changes: 1 addition & 1 deletion test/unittests/libskale/HashSnapshot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ BOOST_AUTO_TEST_CASE( noSnapshotMajority ) {

BOOST_AUTO_TEST_SUITE_END()

BOOST_AUTO_TEST_SUITE( HashSnapshotTestSuite, *boost::unit_test::precondition( option_all_test ) )
BOOST_AUTO_TEST_SUITE( HashSnapshotTestSuite, *boost::unit_test::precondition( option_all_tests ) )

#define WAIT_FOR_THE_NEXT_BLOCK() { \
auto bn = client->number(); \
Expand Down

0 comments on commit a12b847

Please sign in to comment.