Skip to content

Add Protobuf/gRPC-based EtsIR loader #9

Add Protobuf/gRPC-based EtsIR loader

Add Protobuf/gRPC-based EtsIR loader #9

Workflow file for this run

name: CI
on:
push:
branches:
- develop
- neo
pull_request:
branches:
- develop
- neo
workflow_dispatch:
jobs:
ci-core:
name: Run core tests on JDK ${{ matrix.jdk }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
jdk: [ 8, 11, 19 ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
# Only write to the cache for builds on the specific branches. (Default is 'main' only.)
# Builds on other branches will only read existing entries from the cache.
cache-read-only: ${{ github.ref != 'refs/heads/develop' && github.ref != 'ref/heads/neo' }}
- name: Build and run tests
run: ./gradlew --scan build -x :jacodb-ets:build
- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: "**/build/test-results/**/*.xml"
check_name: "Test results on JDK ${{ matrix.jdk }}"
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload Gradle reports
if: (!cancelled())
uses: actions/upload-artifact@v4
with:
name: gradle-reports-jdk${{ matrix.jdk }}
path: '**/build/reports/'
ci-lifecycle:
name: Run lifecycle tests
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: 8
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
# Only write to the cache for builds on the specific branches. (Default is 'main' only.)
# Builds on other branches will only read existing entries from the cache.
cache-read-only: ${{ github.ref != 'refs/heads/develop' && github.ref != 'refs/heads/neo' }}
- name: Build and run lifecycle tests
run: ./gradlew --scan lifecycleTest
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: "**/build/test-results/**/*.xml"
check_name: "Lifecycle test results"
ci-ets:
name: Run ETS tests
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: 11
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
# Only write to the cache for builds on the specific branches. (Default is 'main' only.)
# Builds on other branches will only read existing entries from the cache.
cache-read-only: ${{ github.ref != 'refs/heads/develop' && github.ref != 'ref/heads/neo' }}
- name: Set up ArkAnalyzer
run: |
REPO_URL="https://gitcode.com/Lipen/arkanalyzer"
DEST_DIR="arkanalyzer"
MAX_RETRIES=10
RETRY_DELAY=3 # Delay between retries in seconds
BRANCH="neo/2025-05-30b"
for ((i=1; i<=MAX_RETRIES; i++)); do
git clone --depth=1 --branch $BRANCH $REPO_URL $DEST_DIR && break
echo "Clone failed, retrying in $RETRY_DELAY seconds..."
sleep "$RETRY_DELAY"
done
if [[ $i -gt $MAX_RETRIES ]]; then
echo "Failed to clone the repository after $MAX_RETRIES attempts."
exit 1
else
echo "Repository cloned successfully."
fi
echo "ARKANALYZER_DIR=$(realpath $DEST_DIR)" >> $GITHUB_ENV
cd $DEST_DIR
npm install
npm run build
- name: Start ArkAnalyzer server
run: |
nohup npm --prefix $ARKANALYZER_DIR run server:start > grpc-server.log 2>&1 &
PID=$!
echo $PID > grpc-server.pid
echo "Started gRPC server with PID $PID"
- name: Wait for gRPC server to start
run: |
echo "Waiting for gRPC server to be ready..."
for i in {1..10}; do
nc -z localhost 50051 && echo "Server is up!" && exit 0
sleep 1
done
echo "Server failed to start" >&2
cat grpc-server.log
exit 1
- name: Run ETS tests
run: ./gradlew --scan :jacodb-ets:generateTestResources :jacodb-ets:test
- name: Upload Gradle reports
if: (!cancelled())
uses: actions/upload-artifact@v4
with:
name: gradle-reports-ets
path: '**/build/reports/'
- name: Upload gRPC server logs
if: (!cancelled())
uses: actions/upload-artifact@v4
with:
name: grpc-server-log
path: grpc-server.log
- name: Kill gRPC server
if: always()
run: |
if [ -f grpc-server.pid ]; then
PID=$(cat grpc-server.pid)
echo "Killing gRPC server with PID $PID"
kill $PID || echo "Process already terminated"
fi