aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/infer.yml34
-rwxr-xr-x.github/workflows/inferbuild.sh58
-rwxr-xr-x.github/workflows/send_webhook_update.sh2
-rw-r--r--.gitignore2
-rw-r--r--build.gradle.kts3
5 files changed, 96 insertions, 3 deletions
diff --git a/.github/workflows/infer.yml b/.github/workflows/infer.yml
new file mode 100644
index 00000000..f7524223
--- /dev/null
+++ b/.github/workflows/infer.yml
@@ -0,0 +1,34 @@
+name: Infer
+
+on:
+ - pull_request
+ - workflow_dispatch
+jobs:
+ inferering:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ name: Checkout feature
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ - name: Set up JDK 17
+ uses: actions/setup-java@v2
+ with:
+ java-version: 17
+ distribution: temurin
+ cache: gradle
+ - name: Setup Infer
+ uses: srz-zumix/setup-infer@v1
+ - name: Run Infer on feature
+ run: ./.github/workflows/inferbuild.sh feature
+ - uses: actions/checkout@v2
+ name: Checkout base
+ with:
+ ref: ${{ github.event.pull_request.base.sha }}
+ clean: false
+ - name: Run Infer on base
+ run: ./.github/workflows/inferbuild.sh base
+ - name: Generate report
+ run: ./.github/workflows/inferbuild.sh report
+
diff --git a/.github/workflows/inferbuild.sh b/.github/workflows/inferbuild.sh
new file mode 100755
index 00000000..b692a1ee
--- /dev/null
+++ b/.github/workflows/inferbuild.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Copyright (C) 2022 NotEnoughUpdates contributors
+#
+# This file is part of NotEnoughUpdates.
+#
+# NotEnoughUpdates is free software: you can redistribute it
+# and/or modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation, either
+# version 3 of the License, or (at your option) any later version.
+#
+# NotEnoughUpdates is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+#
+
+gradlecommand="./gradlew clean test --no-daemon"
+
+currentcommit=$(git log --pretty=%s -1)
+mkdir -p ciwork
+
+case $1 in
+feature)
+ echo "::group::Gradle build on $currentcommit"
+ infer capture -- $gradlecommand
+ echo "::endgroup::"
+
+ echo "::group::Infer analyzering on $currentcommit"
+ infer analyze
+ echo "::endgroup::"
+
+ cp infer-out/report.json ciwork/report-feature.json
+ ;;
+base)
+ echo "::group::Gradle build on $currentcommit"
+ infer capture --reactive -- $gradlecommand
+ echo "::endgroup::"
+
+ echo "::group::Infer analyzation on $currentcommit"
+ infer analyze --reactive
+ echo "::endgroup::"
+ ;;
+report)
+ infer reportdiff --report-current ciwork/report-feature.json --report-previous infer-out/report.json
+ jq -r '.[] | select(.severity == "ERROR") | ("::error file="+.file +",line=" +(.line|tostring)+"::" + .qualifier)' <infer-out/differential/introduced.json
+ jq -r '.[] | select(.severity == "WARNING") | ("::warning file="+.file +",line=" +(.line|tostring)+"::" + .qualifier)' <infer-out/differential/introduced.json
+ fixcount=$(jq -r "length" <infer-out/differential/fixed.json)
+ unfixcount=$(jq -r "length" <infer-out/differential/introduced.json)
+ othercount=$(jq -r "length" <infer-out/differential/preexisting.json)
+ echo "This PR fixes $fixcount potential bug(s), introduces $unfixcount potential bug(s). (Total present in feature branch: $((unfixcount + othercount)))" >>$GITHUB_STEP_SUMMARY
+ if [[ $unfixcount != 1 ]]; then
+ exit 1
+ fi
+ ;;
+esac
diff --git a/.github/workflows/send_webhook_update.sh b/.github/workflows/send_webhook_update.sh
index 3ec20af3..f0eb0051 100755
--- a/.github/workflows/send_webhook_update.sh
+++ b/.github/workflows/send_webhook_update.sh
@@ -88,7 +88,7 @@ function make_request() {
curl -X $1 -H "Content-Type: multipart/form-data" -F "payload_json=$json" "$upload_arg" "$upload_name=@$to_upload" "$WEBHOOK_URL$2?wait=true"
}
-echo "Should replace message with id: $MESSAGE_ID"
+echo "Should replace message with id: <$MESSAGE_ID>"
if [ "$MESSAGE_ID" != "" ]; then
discord_output=$(make_request PATCH "/messages/$MESSAGE_ID")
RESULT=$?
diff --git a/.gitignore b/.gitignore
index 53814696..030ecff7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,5 @@ gradle.properties
eclipse
run
.vscode
+infer-out/
+ciwork/
diff --git a/build.gradle.kts b/build.gradle.kts
index 9f3c1715..f790ee5f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -37,8 +37,7 @@ val baseVersion = "2.1"
val buildExtra = mutableListOf<String>()
val buildVersion = properties["BUILD_VERSION"] as? String
if (buildVersion != null) buildExtra.add(buildVersion)
-val githubCi = properties["GITHUB_ACTIONS"] as? String
-if (githubCi == "true") buildExtra.add("ci")
+if (properties["CI"] as? String == "true") buildExtra.add("ci")
val stdout = ByteArrayOutputStream()
val execResult = exec {