Node Builder V2 #8730
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
tags: | |
- v*.** | |
paths-ignore: | |
- "docs/**" | |
merge_group: | |
pull_request: | |
types: [opened, synchronize, reopened] | |
paths-ignore: | |
- "docs/**" | |
jobs: | |
build: | |
runs-on: self-hosted | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
cp gradle.properties.example gradle.properties | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: "zulu" | |
java-version: "17" | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.21 | |
- name: Setup neo4j | |
run: | | |
docker run -d --env NEO4J_AUTH=neo4j/password -p7474:7474 -p7687:7687 neo4j || true | |
- name: Determine Version | |
run: | | |
# determine version from tag | |
export VERSION=$(echo "${GITHUB_REF}" | cut -d "/" -f3) | |
if [[ $VERSION != v* ]] | |
then | |
export VERSION="" | |
echo "Building version-less (main or feature branch)" | |
else | |
# make version more Java-friendly by dropping the 'v' | |
export VERSION=${VERSION:1:${#VERSION}} | |
echo "Building as ${VERSION}" | |
fi | |
# store version in GitHub environment file | |
echo "version=$VERSION" >> $GITHUB_ENV | |
- name: Install JEP | |
run: | | |
pip3 install jep==$(grep "black.ninia:jep" gradle/libs.versions.toml | grep -o -E "[0-9]\d*(\.[0-9]\d*)*") | |
if [ -d "/opt/hostedtoolcache/Python" ]; then | |
find /opt/hostedtoolcache/Python/ -name libjep.so -exec sudo cp '{}' /usr/lib/ \; | |
fi | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Build ${{ env.version }} | |
run: | | |
./gradlew --parallel -Pversion=$VERSION spotlessCheck -x spotlessApply build -x distZip -x distTar koverXmlReport koverHtmlReport performanceTest integrationTest | |
id: build | |
env: | |
VERSION: ${{ env.version }} | |
- name: Upload Code Coverage | |
uses: codecov/codecov-action@v5 | |
with: | |
fail_ci_if_error: true | |
files: ./cpg-all/build/reports/kover/report.xml | |
token: ${{ secrets.CODECOV_TOKEN }} | |
verbose: true | |
- name: Prepare test and coverage reports | |
if: ${{ always() }} | |
run: | | |
zip -r reports.zip **/build/reports/**/** || true | |
- name: Archive test and coverage reports | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: reports | |
path: reports.zip | |
- name: Publish to Maven Central | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') | |
run: | | |
export ORG_GRADLE_PROJECT_signingKey=`echo ${{ secrets.GPG_PRIVATE_KEY }} | base64 -d` | |
./gradlew --no-daemon -Dorg.gradle.internal.publish.checksums.insecure=true --parallel -Pversion=$VERSION -PenableJavaFrontend=true -PenableCXXFrontend=true -PenableGoFrontend=true -PenablePythonFrontend=true -PenableLLVMFrontend=true -PenableTypeScriptFrontend=true -PenableRubyFrontend=true publishToSonatype closeSonatypeStagingRepository | |
env: | |
VERSION: ${{ env.version }} | |
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_PASSWORD }} | |
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} | |
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} | |
- name: Download old dokka versions (version) | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') | |
run: | | |
# make sure the previousDocs folder exists | |
mkdir -p previousDocs && cd previousDocs | |
# retrieve the previous documentation folders for each published version (this also includes "main") | |
wget -O - https://github.com/Fraunhofer-AISEC/cpg/archive/gh-pages.tar.gz | tar -xz --strip=2 cpg-gh-pages/dokka || echo "No dokka directory present. Will continue as if nothing happened" | |
- name: Download old dokka versions (main) | |
if: github.ref == 'refs/heads/main' | |
run: | | |
# make sure the previousDocs folder exists | |
mkdir -p previousDocs && cd previousDocs | |
# retrieve the previous documentation folders for each published version (this also includes "main") | |
wget -O - https://github.com/Fraunhofer-AISEC/cpg/archive/gh-pages.tar.gz | tar -xz --strip=2 cpg-gh-pages/dokka || echo "No dokka directory present. Will continue as if nothing happened" | |
# in order to avoid duplicate mains, remove the "main" version from the previous versions | |
rm -rf main | |
- name: Build JavaDoc | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') || github.ref == 'refs/heads/main' | |
run: | | |
./gradlew --no-daemon -Pversion=$VERSION dokkaHtmlMultiModule | |
env: | |
VERSION: ${{ env.version }} | |
- name: Publish JavaDoc (version) | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
folder: build/dokkaCustomMultiModuleOutput/${{ env.version }} | |
target-folder: dokka/${{ env.version }} | |
- name: Publish JavaDoc (version as main) | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
folder: build/dokkaCustomMultiModuleOutput/${{ env.version }} | |
target-folder: dokka/main | |
- name: Publish JavaDoc (main) | |
if: github.ref == 'refs/heads/main' | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
folder: build/dokkaCustomMultiModuleOutput/main | |
target-folder: dokka/main | |
- name: Create Release | |
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, 'beta') && !contains(github.ref, 'alpha') | |
id: create_release | |
uses: softprops/action-gh-release@v2 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
name: ${{ env.version }} | |
draft: false | |
prerelease: false |