Skip to content

Modify BtcReleaseClient onBestBlock such that it process svpSpendTxWaitingForSignatures #304

Modify BtcReleaseClient onBestBlock such that it process svpSpendTxWaitingForSignatures

Modify BtcReleaseClient onBestBlock such that it process svpSpendTxWaitingForSignatures #304

name: Build and test
on:
push:
branches:
- master
- "*-rc"
pull_request:
types:
- opened
- synchronize
- reopened
branches:
- "**"
permissions:
contents: read
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_name }}
run: |
IS_RSKJ_REF=$(git ls-remote --heads origin "$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
env:
CHECKOUT_REF: ${{ env.CHECKOUT_REF }}
run: |
git switch "$CHECKOUT_REF"
- name: Persist RSKJ
uses: actions/upload-artifact@v4
with:
name: rskj
path: rskj
retention-days: 7
build_federator_node:
runs-on: ubuntu-latest
needs: clone_rskj_repo
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java & Gradle
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'gradle'
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- uses: actions/cache@v4
name: Cache Gradle Wrapper
id: cache-gradle-wrapper
with:
path: |
gradle/wrapper/gradle-wrapper.jar
key: gradle-wrapper-v1
- name: Get Gradle wrapper
if: steps.cache-gradle-wrapper.outputs.cache-hit != 'true'
run: |
./configure.sh
- name: Set DONT-COMMIT-settings.gradle
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
- 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
retention-days: 7
federator-tests-java17:
runs-on: ubuntu-latest
needs: build_federator_node
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Java & Gradle
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'gradle'
- 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
- uses: actions/cache/restore@v4
name: Restore Gradle Wrapper
with:
path: |
gradle/wrapper/gradle-wrapper.jar
key: gradle-wrapper-v1
fail-on-cache-miss: true
- 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/
retention-days: 7
- name: Persist test reports for sonar
uses: actions/upload-artifact@v4
with:
name: test-reports
path: |
build/reports/
retention-days: 7
federator-tests-java21:
runs-on: ubuntu-latest
needs: build_federator_node
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Java & Gradle
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'
- 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
- uses: actions/cache/restore@v4
name: Restore Gradle Wrapper
with:
path: |
gradle/wrapper/gradle-wrapper.jar
key: gradle-wrapper-v1
fail-on-cache-miss: true
- name: Perform federator tests
run: |
./gradlew --no-daemon --stacktrace test
sonarqube:
runs-on: ubuntu-latest
needs: federator-tests-java17
steps:
- 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: Setup Java & Gradle
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'gradle'
- uses: actions/cache/restore@v4
name: Restore Gradle Wrapper
with:
path: |
gradle/wrapper/gradle-wrapper.jar
key: gradle-wrapper-v1
fail-on-cache-miss: true
- 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 }}
IS_FORK: ${{ github.event.pull_request.head.repo.fork }}
run: |
chmod +x gradlew
if [ "$GH_EVENT" = "pull_request" ]; then
if [ "$IS_FORK" != "true" ]; 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
echo "Skipping SonarQube analysis for pull request from a forked repo."
fi
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