Skip to content

feat(ci): replaces circleci w/ github workflow #24

feat(ci): replaces circleci w/ github workflow

feat(ci): replaces circleci w/ github workflow #24

name: Build and test
on:
push:
branches:
- master
- "*-rc"
pull_request:
types:
- opened
- synchronize
- reopened
branches:
- "**"
jobs:
verify_files:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
run: |
sudo apt-get update -y && sudo apt-get install -y gnupg2
- name: Verify files
run: |
curl -sSL https://secchannel.rsk.co/SUPPORT.asc | gpg --import -
gpg --verify SHA256SUMS.asc && sha256sum --check SHA256SUMS.asc
clone_rskj_repo:
needs: verify_files
runs-on: ubuntu-latest
steps:
- name: Checkout RSKj repo
uses: actions/checkout@v4
with:
repository: rsksmart/rskj
token: ${{ secrets.GITHUB_TOKEN }}
path: rskj
- name: Determine branch to checkout for PR
if: github.event_name == 'pull_request'
working-directory: rskj
run: |
PR_BRANCH="${{ github.head_ref }}"
IS_RSKJ_BRANCH=`git ls-remote --heads origin $PR_BRANCH`
if test -n "${IS_RSKJ_BRANCH}"; then
echo "Found matching branch name in RSKj repo"
CHECKOUT_REF="$PR_BRANCH"
else
echo "Using master for RSKj"
CHECKOUT_REF="master"
fi
echo "CHECKOUT_REF=$CHECKOUT_REF" >> $GITHUB_ENV
- name: Determine branch to checkout for push
if: github.event_name != 'pull_request'
working-directory: rskj
run: |
POW_REF="${{ github.ref }}"
IS_RSKJ_REF=`git ls-remote --refs $POW_REF`
if test -n "${IS_RSKJ_REF}"; then
echo "Found matching ref in RSKj"
CHECKOUT_REF="$POW_REF"
else
echo "Using master for RSKj"
CHECKOUT_REF="master"
fi
echo "CHECKOUT_REF=$CHECKOUT_REF" >> $GITHUB_ENV
- name: Check out appropriate rskj reference
working-directory: rskj
run: |
git switch "${{ env.CHECKOUT_REF }}"
- name: Persist RSKJ
uses: actions/upload-artifact@v4
with:
name: rskj
path: rskj
build_federator_node:
runs-on: ubuntu-latest
container: openjdk:8-jdk
needs: clone_rskj_repo
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- uses: actions/cache@v4
name: Cache Gradle
id: cache-gradle
with:
path: |
.gradle/caches
gradle/wrapper
DONT-COMMIT-settings.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Get gradle wrapper and build dependencies
if: steps.cache-gradle.outputs.cache-hit != 'true'
run: |
echo "includeBuild('./rskj') {" > DONT-COMMIT-settings.gradle
echo " dependencySubstitution {" >> DONT-COMMIT-settings.gradle
echo " all { DependencySubstitution dependency ->" >> DONT-COMMIT-settings.gradle
echo " if (dependency.requested instanceof ModuleComponentSelector" >> DONT-COMMIT-settings.gradle
echo " && dependency.requested.group == 'co.rsk'" >> DONT-COMMIT-settings.gradle
echo " && dependency.requested.module == 'rskj-core'" >> DONT-COMMIT-settings.gradle
echo " && (dependency.requested.version.endsWith('SNAPSHOT') || dependency.requested.version.endsWith('RC'))) {" >> DONT-COMMIT-settings.gradle
echo " def targetProject = project(\":\${dependency.requested.module}\")" >> DONT-COMMIT-settings.gradle
echo " if (targetProject != null) {" >> DONT-COMMIT-settings.gradle
echo " println('---- USING LOCAL ' + dependency.requested.displayName +' PROJECT ----')" >> DONT-COMMIT-settings.gradle
echo " dependency.useTarget targetProject" >> DONT-COMMIT-settings.gradle
echo " }" >> DONT-COMMIT-settings.gradle
echo " }" >> DONT-COMMIT-settings.gradle
echo " }" >> DONT-COMMIT-settings.gradle
echo " }" >> DONT-COMMIT-settings.gradle
echo "}" >> DONT-COMMIT-settings.gradle
rm -rfv .gradle
./configure.sh
./gradlew --no-daemon dependencies
- name: Build node
run: |
./gradlew --no-daemon --stacktrace clean build -x test
- name: Persist Build files
uses: actions/upload-artifact@v4
with:
name: build_files
path: |
./
!rskj
federator-tests:
runs-on: ubuntu-latest
container: openjdk:8-jdk
needs: build_federator_node
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Build files
uses: actions/download-artifact@v4
with:
name: build_files
path: ./
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- name: Perform federator tests
run: |
./gradlew --no-daemon --stacktrace test
sonarqube:
runs-on: ubuntu-latest
needs: build_federator_node
steps:
- name: Setup Java JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Download Build files
uses: actions/download-artifact@v4
with:
name: build_files
path: ./
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- name: Prepare PR flags for SonarQube analysis
if: github.event_name == 'pull_request'
run: |
EXTRA_FLAGS="-Dsonar.pullrequest.base=${{ github.base_ref }} -Dsonar.pullrequest.branch=${{ github.head_ref }} -Dsonar.pullrequest.key=${{ github.event.pull_request.number }}"
echo EXTRA_FLAGS="$EXTRA_FLAGS" >> $GITHUB_ENV
- name: Prepare push flags for SonarQube analysis
if: github.event_name != 'pull_request'
run: |
echo EXTRA_FLAGS="-Dsonar.branch.name=${{ github.ref }}"
- name: Run SonarQube analysis
run: |
EXTRA_FLAGS="${{ env.EXTRA_FLAGS }}"
echo "Running sonarqube with $EXTRA_FLAGS"
ls -al
chmod +x gradlew
./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
"$EXTRA_FLAGS" \
-Dsonar.organization=rsksmart \
-Dsonar.host.url="https://sonarcloud.io" \
-Dsonar.login="$SONAR_TOKEN"