diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..3154a72b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,125 @@ +name: GraalVM Native Image builds + +on: + push: + branches: [ "main" ] + tags: + - '*' + pull_request: + branches: [ "main" ] + +jobs: + build-java: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v7 + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v6 + - name: Build with Gradle + env: + # The SWT image tests fail in the pipeline; disable them. + AC_SKIP_SWT_TESTS: true + run: ./gradlew build + - name: Upload 'ac' + uses: actions/upload-artifact@v7 + with: + name: build-artifacts + path: app/cli-ac/build/libs/AppleCommander-ac* + archive: false + if-no-files-found: error + - name: Upload 'acx' + uses: actions/upload-artifact@v7 + with: + name: build-artifacts + path: app/cli-acx/build/libs/AppleCommander-acx* + archive: false + if-no-files-found: error + + # This is a crude license header check. The ones I tested were susceptible to whitespace differences + # and I never got them to work. My primary goal is to ensure the headers exist, so this suffices. + license-check: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v7 + - name: Look for license phrase + run: | + outfile=$(mktemp) + find . -name "*.java" -not -name "Sleak.java" | xargs grep -L "GNU General Public License" > ${outfile} + if [ -s "${outfile}" ] + then + echo "License headers missing on the following files:" + cat ${outfile} + exit 1 + else + echo "License headers appear to be valid!" + fi + + build-native: + name: ac/acx on ${{ matrix.os }}-${{ matrix.arch }} + needs: [build-java, license-check] + runs-on: ${{ matrix.label }} + strategy: + matrix: + # Note that Graal v21 builds to the current architecture, and "--target" is not functional. + # Therefore, we try to find runners that fit our targets. + # See: https://docs.github.com/en/actions/concepts/runners/about-github-hosted-runners#overview-of-github-hosted-runners + # ... and follow the links to the related GitHub repositories + include: + - label: ubuntu-latest + os: linux + arch: x86_64 + - label: ubuntu-24.04-arm + os: linux + arch: aarch64 + - label: windows-latest + os: windows + arch: x86_64 + - label: macos-15-intel + os: darwin + arch: x86_64 + - label: macos-15 + os: darwin + arch: arm64 + steps: + - uses: actions/checkout@v7 + - uses: graalvm/setup-graalvm@v1 + with: + java-version: '25' + distribution: 'liberica' + github-token: ${{ secrets.GITHUB_TOKEN }} + native-image-job-reports: 'true' + - name: Build ac/acx + run: ./gradlew nativeCompile + env: + # Needed for Windows; not an issue for other OSes + GRADLE_OPTS: -Djava.io.tmpdir=${{ runner.temp }} + - name: Run UPX + uses: crazy-max/ghaction-upx@v4 + if: runner.os == 'Windows' || runner.os == 'Linux' + with: + files: | + app/cli-ac/build/native/nativeCompile/ac-* + app/cli-acx/build/native/nativeCompile/acx-* + - name: Run CLTH tests + if: ${{ matrix.os != 'windows' }} + shell: bash + run: ./scripts/run-clth-tests.sh + - name: Upload binary + uses: actions/upload-artifact@v7 + with: + name: ac-${{ matrix.os }}-${{ matrix.arch }} + path: app/cli-ac/build/native/nativeCompile/ac-* + archive: false + - name: Upload binary + uses: actions/upload-artifact@v7 + with: + name: acx-${{ matrix.os }}-${{ matrix.arch }} + path: app/cli-acx/build/native/nativeCompile/acx-* + archive: false diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml deleted file mode 100644 index e57ff1d3..00000000 --- a/.github/workflows/gradle.yml +++ /dev/null @@ -1,50 +0,0 @@ -# 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: Build AppleCommander - -on: - push: - branches: [ "main" ] - tags: - - '*' - pull_request: - branches: [ "main" ] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v7 - - name: Set up JDK 21 - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v6 - - name: Build with Gradle - env: - # The SWT image tests fail in the pipeline; disable them. - AC_SKIP_SWT_TESTS: true - run: ./gradlew build - - name: Collect artifacts - run: | - mkdir artifacts - cp $(find app/ -name "AppleCommander-*.jar") artifacts/ - - name: Upload artifacts - uses: actions/upload-artifact@v7 - with: - name: build-artifacts - path: artifacts/ - if-no-files-found: error diff --git a/.github/workflows/license.yml b/.github/workflows/license.yml deleted file mode 100644 index 1b998fb9..00000000 --- a/.github/workflows/license.yml +++ /dev/null @@ -1,36 +0,0 @@ -# This is a crude license header check. The ones I tested were susceptible to whitespace differences -# and I never got them to work. My primary goal is to ensure the headers exist, so this suffices. - -name: Verify AppleCommander has a license header - -on: - push: - branches: [ "main" ] - tags: - - '*' - pull_request: - branches: [ "main" ] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v7 - - name: Look for license phrase - run: | - outfile=$(mktemp) - find . -name "*.java" -not -name "Sleak.java" | xargs grep -L "GNU General Public License" > ${outfile} - if [ -s "${outfile}" ] - then - echo "License headers missing on the following files:" - cat ${outfile} - exit 1 - else - echo "License headers appear to be valid!" - fi diff --git a/.github/workflows/nativeCompile.yml b/.github/workflows/nativeCompile.yml deleted file mode 100644 index 95d78b9e..00000000 --- a/.github/workflows/nativeCompile.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: GraalVM Native Image builds - -on: - push: - branches: [ "main" ] - tags: - - '*' - pull_request: - branches: [ "main" ] - -jobs: - build: - name: ac/acx on ${{ matrix.os }}-${{ matrix.arch }} - runs-on: ${{ matrix.label }} - strategy: - matrix: - # Note that Graal v21 builds to the current architecture, and "--target" is not functional. - # Therefore, we try to find runners that fit our targets. - # See: https://docs.github.com/en/actions/concepts/runners/about-github-hosted-runners#overview-of-github-hosted-runners - # ... and follow the links to the related GitHub repositories - include: - - label: ubuntu-latest - os: linux - arch: x86_64 - - label: ubuntu-24.04-arm - os: linux - arch: aarch64 - - label: windows-latest - os: windows - arch: x86_64 - - label: macos-15-intel - os: darwin - arch: x86_64 - - label: macos-15 - os: darwin - arch: arm64 - steps: - - uses: actions/checkout@v7 - - - uses: graalvm/setup-graalvm@v1 - with: - java-version: '25' - distribution: 'liberica' - github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - - name: Build ac/acx - run: ./gradlew nativeCompile - env: - # Needed for Windows; not an issue for other OSes - GRADLE_OPTS: -Djava.io.tmpdir=${{ runner.temp }} - - - name: Run CLTH tests - if: ${{ matrix.os != 'windows' }} - shell: bash - run: ./scripts/run-clth-tests.sh - - - name: Upload binary - uses: actions/upload-artifact@v7 - with: - name: ac-${{ matrix.os }}-${{ matrix.arch }} - path: app/cli-ac/build/native/nativeCompile/ac-* - - name: Upload binary - uses: actions/upload-artifact@v7 - with: - name: acx-${{ matrix.os }}-${{ matrix.arch }} - path: app/cli-acx/build/native/nativeCompile/acx-*