Skip to content

Extract jacodb-storage module (#271) #1855

Extract jacodb-storage module (#271)

Extract jacodb-storage module (#271) #1855

name: Build and run tests
on:
push:
branches:
- develop
- neo
pull_request:
branches:
- develop
- neo
workflow_dispatch:
permissions:
contents: read
checks: write
pull-requests: write
jobs:
build:
# Skip duplicate build when pushing to already existing PR
# Note: we decided NOT to skip duplicate builds,
# since we upload test results via 'EnricoMi/publish-unit-test-result-action',
# which requires 'pull_request' trigger for the bot to be able to add a comment to PR.
# if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
name: Run tests on JDK ${{ matrix.jdk }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
jdk: [8, 11, 19]
env:
main_jdk: 8
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.jdk }}
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/gradle-build-action@v2
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/main' && github.ref != 'refs/heads/develop' }}
- name: Set up GraphViz
uses: ts-graphviz/setup-graphviz@v2
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Set up ArkAnalyzer
run: |
REPO_URL="https://gitee.com/Lipenx/arkanalyzer.git"
DEST_DIR="arkanalyzer"
MAX_RETRIES=10
RETRY_DELAY=3 # Delay between retries in seconds
BRANCH="neo/2024-08-16"
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: Generate test resources
run: ./gradlew :jacodb-ets:generateTestResources --scan
- name: Run ETS tests first
run: ./gradlew :jacodb-ets:test --scan
- name: Build and run tests
run: ./gradlew build --stacktrace --scan
- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
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 test results
# uses: actions/upload-artifact@v3
# with:
# name: test-results
# path: build/test-results/
- name: Upload Gradle reports
if: (!cancelled()) && matrix.jdk == env.main_jdk
uses: actions/upload-artifact@v3
with:
name: gradle-reports
path: '**/build/reports/'
retention-days: 1
lifecycleTests:
name: Run lifecycle tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: 8
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/gradle-build-action@v2
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/main' && github.ref != 'refs/heads/develop' }}
- name: Build and run lifecycle tests
run: ./gradlew lifecycleTest --stacktrace --scan
- 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: always()
with:
files: "**/build/test-results/**/*.xml"
check_name: "Lifecycle test results"