Skip to content

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

feat(ci): replaces circleci w/ github workflow

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

Workflow file for this run

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: |
cat <<'EOF' >temp-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 temp-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
with:
fetch-depth: 0
- 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: find test reports # TODO: REMOVE ME
run: |
apt-get install tree
tree build/reports
tree build/test-results
- name: Persist test reports for sonar
uses: actions/upload-artifact@v4
with:
name: test-report
path: |
build/test-results/
build/reports/
.git/
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
path: ./
- name: Download rskj
uses: actions/download-artifact@v4
with:
name: rskj
path: rskj
- name: Download test reports
uses: actions/download-artifact@v4
with:
name: test-report
path: |
build/test-results/
build/reports/
.git/
- name: Prepare PR flags for SonarQube analysis
if: github.event_name == 'pull_request'
run: |
pr_number=${{ github.event.pull_request.number }}
extra_flags="-Dsonar.pullrequest.base=${{ github.base_ref }} \
-Dsonar.pullrequest.branch=${{ github.head_ref }} \
-Dsonar.pullrequest.key=$pr_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 }}" >> $GITHUB_ENV
- name: Run SonarQube analysis
run: |
extra_flags="${{ env.EXTRA_FLAGS }}"
chmod +x gradlew
./gradlew sonarqube --warning-mode all --no-daemon --stacktrace --info -x build -x test \
$extra_flags \
-Dsonar.organization=rsksmart \
-Dsonar.projectKey=rsksmart_powpeg-node \
-Dsonar.host.url="https://sonarcloud.io" \
-Dsonar.token="${{ secrets.SONAR_TOKEN }}"