Skip to content

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

feat(ci): replaces circleci w/ github workflow

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

Workflow file for this run

name: Build and test
on:
push:
branches:
- master
- "*-rc"
pull_request:
types:
- opened
- synchronize
- reopened
branches:
- "**"
jobs:
clone_rskj_repo:
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
- 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: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: .
- uses: actions/cache@v4
name: Cache Gradle
id: cache-gradle
with:
path: |
.gradle/caches
gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Make executable
run: |
chmod +x configure.sh
chmod +x gradlew
- 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: Preserve permissions
run: |
tar -cf build_files.tar rskj-core/build gradle gradlew .gradle
- name: Persist Build files
uses: actions/upload-artifact@v4
with:
name: build_files
path: |
build_files.tar
# federator-tests:
# runs-on: ubuntu-latest
# container: openjdk:8-jdk
# needs: build_federator_node
# steps:
# - name: Download rskj
# uses: actions/download-artifact@v4
# with:
# name: rskj
# path: .
#
# - name: Download Build files
# uses: actions/download-artifact@v4
# with:
# name: build_files
# path: ./
#
# - name: Unpack build files
# run: |
# tar -xvf build_files.tar
#
# - 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 rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: ./
- name: Download Build files
uses: actions/download-artifact@v4
with:
name: build_files
path: ./
- name: Unpack build files
run: |
tar -xvf build_files.tar
- name: Run SonarQube analysis for PRs
if: github.event_name == 'pull_request'
run: |
EXTRA_FLAGS="-Dsonar.pullrequest.base=master \
-Dsonar.pullrequest.branch=${{ github.head_ref }} \
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }}"
echo EXTRA_FLAGS="$EXTRA_FLAGS" >> $GITHUB_ENV
- name: Run SonarQube analysis for push
if: github.event_name == 'push'
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"
./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
$extra_flags
-Dsonar.organization=$SONAR_ORG \
-Dsonar.projectKey=$SONAR_PROJECT_KEY \
-Dsonar.host.url="$SONAR_URL" \
-Dsonar.login="$SONAR_TOKEN"
# - name: Sonarquebe for PRs
# if: github.event_name == 'pull_request'
# run: |
# ./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
# -Dsonar.pullrequest.base="${{ github.base_ref }}" \
# -Dsonar.pullrequest.branch="${{ github.head_ref }}" \
# -Dsonar.pullrequest.key="${{ github.event.pull_request.number }}"
# -Dsonar.organization=rsksmart \
# -Dsonar.host.url="https://sonarcloud.io" \
# -Dsonar.token="${{ secrets.SONAR_TOKEN }}"
#
# - name: Sonarquebe for master and rc branches
# if: github.event_name != 'pull_request'
# run: |
# ./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
# -Dsonar.branch.name="${{ github.ref }}" \
# -Dsonar.organization=rsksmart \
# -Dsonar.host.url="https://sonarcloud.io" \
# -Dsonar.token="${{ secrets.SONAR_TOKEN }}"
#