Skip to content

Commit

Permalink
CI(github): add math check and cross-platform build
Browse files Browse the repository at this point in the history
  • Loading branch information
halibobo1205 committed Nov 26, 2024
1 parent e5428a8 commit d2786e1
Show file tree
Hide file tree
Showing 3 changed files with 194 additions and 0 deletions.
53 changes: 53 additions & 0 deletions .github/workflows/arm64-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: arm64-Platform Matrix

on:
push:
branches: [ "exp/arm64" ]
pull_request:
branches: [ "exp/arm64" ]

jobs:
build:

name: ${{ matrix.os }} - ${{ matrix.os-version }}
runs-on: ${{ matrix.runner }}

strategy:
fail-fast: false
matrix:
include:
# Apple Silicon runners (using latest available)
- os: macOS
arch: arm64
runner: macos-14
os-version: "14"
- os: macOS
arch: arm64
runner: macos-15
os-version: "15"

permissions:
contents: read

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0

- name: Build with Gradle Wrapper
run: ./gradlew clean build --no-daemon
79 changes: 79 additions & 0 deletions .github/workflows/math-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Check Math Usage

on:
push:
branches: [ "exp/arm64" ]
pull_request:
branches: [ "exp/arm64" ]
workflow_dispatch:

jobs:
check-math:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Check for java.lang.Math usage
id: check-math
shell: bash
run: |
echo "Checking for java.lang.Math usage..."
touch math_usage.txt
while IFS= read -r file; do
perl -0777 -ne '
s/"([^"\\]|\\.)*"//g;
s/'\''([^'\''\\]|\\.)*'\''//g;
s!/\*([^*]|\*[^/])*\*/!!g;
s!//[^\n]*!!g;
$hasMath = 0;
$hasMath = 1 if /^[\s]*import[\s]+java\.lang\.Math\b/m;
$hasMath = 1 if /\bjava\s*\.\s*lang\s*\.\s*Math\s*\./;
$hasMath = 1 if /(?<![\w\.])(?<!Strict)Math\s*\./;
print "$ARGV\n" if $hasMath;
' "$file" >> math_usage.txt
done < <(find . -type f -name "*.java")
sort -u math_usage.txt -o math_usage.txt
if [ -s math_usage.txt ]; then
echo "Found Math usage in:"
cat math_usage.txt
echo "math_found=true" >> $GITHUB_OUTPUT
else
echo "No Math usage found"
echo "math_found=false" >> $GITHUB_OUTPUT
fi
- name: Upload findings
if: steps.check-math.outputs.math_found == 'true'
uses: actions/upload-artifact@v4
with:
name: math-usage-report
path: math_usage.txt

- name: Create comment
if: github.event_name == 'pull_request' && steps.check-math.outputs.math_found == 'true'
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const findings = fs.readFileSync('math_usage.txt', 'utf8');
const body = `### Math Usage Detection Results
Found usage of \`java.lang.Math\` in the following files:
\`\`\`
${findings}
\`\`\`
Please review if this usage is intended.`;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: body
});
62 changes: 62 additions & 0 deletions .github/workflows/x86_64-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: X86_64-Platform Matrix

on:
push:
branches: [ "exp/arm64" ]
pull_request:
branches: [ "exp/arm64" ]

jobs:
build:

name: ${{ matrix.os }} - ${{ matrix.os-version }}
runs-on: ${{ matrix.runner }}

strategy:
fail-fast: false
matrix:
include:
# Macos Intel runners
- os: macOS
arch: x86_64
runner: macos-12
os-version: "12"
- os: macOS
arch: x86_64
runner: macos-13
os-version: "13"
# Linux x86_64 runners
- os: Linux
arch: x86_64
runner: ubuntu-20.04
os-version: "20.04"
- os: Linux
arch: x86_64
runner: ubuntu-22.04
os-version: "22.04"

permissions:
contents: read

steps:
- uses: actions/checkout@v4
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'zulu'

# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0

- name: Build with Gradle Wrapper
run: ./gradlew clean build --no-daemon

0 comments on commit d2786e1

Please sign in to comment.