Skip to content

[DO NOT MERGE] circleci to GitHub workflow #92

[DO NOT MERGE] circleci to GitHub workflow

[DO NOT MERGE] circleci to GitHub workflow #92

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
fetch-depth: 0
- name: Determine branch to checkout for PR
if: github.event_name == 'pull_request'
working-directory: rskj
env:
PR_BRANCH: ${{ github.head_ref }}
run: |
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
env:
POW_REF: ${{ github.ref }}
run: |
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
with:
fetch-depth: 0
- 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: |
cat <<'EOF' >DONT-COMMIT-settings.gradle
includeBuild('./rskj') {
dependencySubstitution {
all { DependencySubstitution dependency ->
if (dependency.requested instanceof ModuleComponentSelector
&& dependency.requested.group == 'co.rsk'
&& dependency.requested.module == 'rskj-core'
&& (dependency.requested.version.endsWith('SNAPSHOT') || dependency.requested.version.endsWith('RC'))) {
def targetProject = project(":${dependency.requested.module}")
if (targetProject != null) {
println('---- USING LOCAL ' + dependency.requested.displayName + ' PROJECT ----')
dependency.useTarget targetProject
}
}
}
}
}
EOF
if [ -d ".gradle" ]; then rm -rfv .gradle; fi
./configure.sh
./gradlew --no-daemon --settings-file DONT-COMMIT-settings.gradle 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
- name: Persist test results for sonar
uses: actions/upload-artifact@v4
with:
name: test-results
path: |
build/test-results/
- name: Persist test reports for sonar
uses: actions/upload-artifact@v4
with:
name: test-reports
path: |
build/reports/
sonarqube:
runs-on: ubuntu-latest
needs: federator-tests
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
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- name: Download test results
uses: actions/download-artifact@v4
with:
name: test-results
path: |
build/test-results/
- name: Download test reports
uses: actions/download-artifact@v4
with:
name: test-reports
path: |
build/reports/
- name: Run SonarQube analysis
env:
GH_EVENT: ${{ github.event_name }}
GH_PR_NUMBER: ${{ github.event.pull_request.number }}
GH_PR_BASE_REF: ${{ github.base_ref }}
GH_PR_HEAD_REF: ${{ github.head_ref }}
GH_REF: ${{ github.ref }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
chmod +x gradlew
ls -R build/reports/jacoco/test
ls -R build/test-reports
if [ "$GH_EVENT" = pull_request ]; then
./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
-Dsonar.pullrequest.base="$GH_PR_BASE_REF" \
-Dsonar.pullrequest.branch="$GH_PR_HEAD_REF" \
-Dsonar.pullrequest.key="$GH_PR_NUMBER" \
-Dsonar.organization=rsksmart \
-Dsonar.projectKey=rsksmart_powpeg-node \
-Dsonar.host.url="https://sonarcloud.io" \
-Dsonar.junit.reportPaths=build/test-results/ \
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \
-Dsonar.token="$SONAR_TOKEN"
else
./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
-Dsonar.branch.name="$GH_REF" \
-Dsonar.organization=rsksmart \
-Dsonar.projectKey=rsksmart_powpeg-node \
-Dsonar.host.url="https://sonarcloud.io" \
-Dsonar.junit.reportPaths=build/test-results/ \
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \
-Dsonar.token="$SONAR_TOKEN"
fi