Skip to content

feat(ci): migrates circleci to github actions #46

feat(ci): migrates circleci to github actions

feat(ci): migrates circleci to github actions #46

name: Build and Test
on:
push:
branches:
- '**'
pull_request:
types: [opened, reopened, ready_for_review]
branches:
- '**'
jobs:
build:
runs-on: ubuntu-latest
container:
image: openjdk:8-jdk
env:
_JAVA_OPTIONS: "-Xmx3G -Xms2G"
defaults:
run:
working-directory: .
steps:
- uses: actions/checkout@v2
- name: Setup System Tools
run: |
apt update -y
apt install -y gnupg2 curl
- name: Install Node.js
run: |
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
- name: Check Node.js version
run: node --version
- name: Verify files
run: |
curl -sSL https://secchannel.rsk.co/SUPPORT.asc | gpg2 --import -
gpg2 --verify SHA256SUMS.asc && sha256sum --check SHA256SUMS.asc
- uses: actions/cache@v4
name: Cache Gradle
with:
path: |
.gradle/caches
gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- uses: actions/cache@v4
name: Cache build
with:
path: |
build
key: ${{ runner.os }}-build-${{ hashFiles('build') }}
restore-keys: |
${{ runner.os }}-build-
- name: Build
run: |
./configure.sh
./gradlew --no-daemon dependencies
./gradlew --no-daemon --stacktrace build -x test
ls -la ./gradle/wrapper/gradle-wrapper.jar
sonarqube:
needs: build
runs-on: ubuntu-latest
container:
image: eclipse-temurin:17-jdk
defaults:
run:
working-directory: .
steps:
- uses: actions/checkout@v2
- name: Run SonarQube analysis
run: |
echo "Installing git"
apt-get update && apt-get install -yqq git
extra_flags=""
echo "Get GH event type"
event_name="${{ github.event_name }}"
if [ "$event_name" = "pull_request" ]; then
echo "Setting up PR analysis"
echo "switch to master"
git branch -f master origin/master
pr_number=${{ github.event.pull_request.number }}
echo "PR number: $pr_number"
extra_flags="-Dsonar.pullrequest.base=master -Dsonar.pullrequest.branch=${{ github.head_ref }} -Dsonar.pullrequest.key=$pr_number"
echo "PR analysis flags: $extra_flags"
else
echo "Setting up branch analysis"
extra_flags="-Dsonar.branch.name=master"
echo "Branch analysis flags: $extra_flags"
fi
sonar_url=${{ secrets.SONAR_URL }}
sonar_token=${{ secrets.SONAR_TOKEN }}
echo "Event name: $event_name"
echo "Sonar URL: $sonar_url"
echo "Running SonarQube analysis"
./configure.sh
./gradlew sonarqube --no-daemon -x build -x test $extra_flags \
-Dsonar.organization=rsksmart -Dsonar.host.url="$sonar_url" -Dsonar.login="$sonar_token"
tests:
needs: build
runs-on: ubuntu-latest
container:
image: openjdk:8-jdk
defaults:
run:
working-directory: .
steps:
- uses: actions/checkout@v2
- name: Setup System Tools
run: |
apt update -y
apt install -y curl
- name: Install Node.js
run: |
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
- name: Check Node.js version
run: node --version
- uses: actions/cache@v4
name: Restore gradle cache
with:
path: |
.gradle/caches
gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Get Gradle jar
run: |
./configure.sh
- name: Unit tests
run: |
chmod +x ./gradlew
./gradlew --no-daemon --stacktrace test
- name: Integration tests
run: |
chmod +x ./gradlew
./gradlew --no-daemon --stacktrace test
- name: Save test results
run: |
mkdir -p ~/junit/
find rskj-core/build/test-results -type f -name "*.xml" -exec cp {} ~/junit/ \;
if: always()
mining-tests:
needs: build
runs-on: ubuntu-latest
container:
image: cimg/openjdk:8.0.242-node
defaults:
run:
working-directory: .
#
# services:
# bitcoind01:
# image: kylemanna/bitcoind:latest
# env:
# DISABLEWALLET: "0"
# ENTRYPOINT: "/usr/local/bin/bitcoind -printtoconsole -regtest -debug -server -listen -port=31591 -connect=localhost:31592 -rpcbind=0.0.0.0:32591 -rpcallowip=0.0.0.0/0 -rpcuser=admin -rpcpassword=admin"
# ports:
# - 31591:31591
## options: >-
## --entrypoint "/usr/local/bin/bitcoind -printtoconsole -regtest -debug -server -listen -port=31591 -connect=localhost:31592 -rpcbind=0.0.0.0:32591 -rpcallowip=0.0.0.0/0 -rpcuser=admin -rpcpassword=admin"
#
# bitcoind02:
# image: kylemanna/bitcoind:latest
# env:
# DISABLEWALLET: "0"
# ports:
# - 31592:31592
## options: >-
## --entrypoint "/usr/local/bin/bitcoind -printtoconsole -regtest -debug -server -listen -port=31592 -connect=localhost:31591 -rpcbind=0.0.0.0:32591 -rpcallowip=0.0.0.0/0 -rpcuser=admin -rpcpassword=admin"
steps:
- name: Setup System Tools
run: |
apt update -y
apt install -y curl
- name: Install Node.js
run: |
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
- name: Check Node.js version
run: node --version
- name: Checkout RSKj
uses: actions/checkout@v2
- name: Checkout Mining Integration Tests Repository
uses: actions/checkout@v2
with:
repository: rsksmart/mining-integration-tests
ref: ${{ secrets.MINING_INTEGRATION_TESTS_REF }}
token: ${{ secrets.GITHUB_TOKEN }}
path: mining-integration-tests
# - uses: actions/cache@v4
# name: Restore gradle cache
# with:
# path: |
# .gradle/caches
# gradle/wrapper
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
# restore-keys: |
# ${{ runner.os }}-gradle-
#
# - name: Get Gradle jar
# run: |
# ./configure.sh
- name: Install Mining Integration Tests dependencies
working-directory: mining-integration-tests
run: |
npm install
- name: Start Bitcoin nodes
run: |
/usr/bin/docker run -d --name bitcoind01 -p 31591:31591 --entrypoint /usr/local/bin/bitcoind kylemanna/bitcoind:latest -printtoconsole -regtest -debug -server -listen -port=31591 -connect=localhost:31592 -rpcbind=0.0.0.0:32591 -rpcallowip=0.0.0.0/0 -rpcuser=admin -rpcpassword=admin
/usr/bin/docker run -d --name bitcoind02 -p 31592:31592 --entrypoint /usr/local/bin/bitcoind kylemanna/bitcoind:latest -printtoconsole -regtest -debug -server -listen -port=31592 -connect=localhost:31591 -rpcbind=0.0.0.0:32592 -rpcallowip=0.0.0.0/0 -rpcuser=admin -rpcpassword=admin
- name: Test bitcoin nodes
run: |
echo Test bitcoin node 1
curl -s -u admin:admin --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getblockchaininfo","params":[]}' -H 'content-type:text/plain;' http://localhost:32591
echo Test bitcoin node 2
curl -s -u admin:admin --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getblockchaininfo","params":[]}' -H 'content-type:text/plain;' http://localhost:32592
- name: Generate BTC blocks
working-directory: mining-integration-tests
run: |
node generateBtcBlocks.js
- uses: actions/cache@v4
name: Restore build
with:
path: |
build
key: ${{ runner.os }}-build-${{ hashFiles('build') }}
restore-keys: |
${{ runner.os }}-build-
- name: Get RSKj version
run: |
version=$(tr -d "'\"" < rskj-core/src/main/resources/version.properties \
| cut -d = -f 2- | paste -sd - -)
- name: Start RSKj
run: |
java -Drsk.conf.file=./rsk-integration-test.conf -cp rskj-core/build/libs/rskj-core-"$version"-all.jar co.rsk.Start --regtest
rskpid=$!
echo "RSKj PID: $rskpid"
until nc -z 127.0.0.1 4444
do
echo "Waiting for RskJ..."
sleep 1
done
- name: Run Mining Integration Tests
working-directory: mining-integration-tests
run: |
npm test
- name: Stop RSKj
if: always()
run: |
kill $rskpid
- name: Stop and Remove Docker Containers
if: always()
run: |
/usr/bin/docker stop bitcoind01 bitcoind02
/usr/bin/docker rm bitcoind01 bitcoind02