|
1 | | -name: Build Pipeline |
| 1 | +name: CI (build & test) |
| 2 | + |
2 | 3 | on: |
3 | 4 | push: |
4 | | - branches: |
5 | | - - master |
| 5 | + branches: [ master ] |
6 | 6 | pull_request: |
7 | 7 | types: [opened, synchronize, reopened] |
| 8 | + |
| 9 | +concurrency: |
| 10 | + group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
| 11 | + cancel-in-progress: true |
| 12 | + |
8 | 13 | jobs: |
9 | 14 | build: |
10 | | - name: Build and analyze |
11 | | - runs-on: ubuntu-latest |
| 15 | + name: Gradle build on ${{ matrix.os }} |
| 16 | + strategy: |
| 17 | + fail-fast: false |
| 18 | + matrix: |
| 19 | + os: [ubuntu-latest, windows-latest] |
| 20 | + runs-on: ${{ matrix.os }} |
| 21 | + permissions: |
| 22 | + contents: read |
| 23 | + env: |
| 24 | + GRADLE_OPTS: -Dorg.gradle.daemon=false |
| 25 | + defaults: |
| 26 | + run: |
| 27 | + working-directory: de.peeeq.wurstscript |
| 28 | + |
12 | 29 | steps: |
13 | | - - uses: actions/checkout@v3 |
| 30 | + - name: Checkout |
| 31 | + uses: actions/checkout@v4 |
14 | 32 | with: |
15 | | - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis |
16 | | - - name: Set up JDK 17 |
17 | | - uses: actions/setup-java@v3 |
| 33 | + fetch-depth: 0 |
| 34 | + |
| 35 | + - name: Setup Temurin JDK 25 |
| 36 | + uses: actions/setup-java@v4 |
18 | 37 | with: |
19 | | - java-version: 25 |
20 | | - distribution: 'zulu' # Alternative distribution options are available |
21 | | - - name: Cache Gradle packages |
22 | | - uses: actions/cache@v3 |
| 38 | + distribution: temurin |
| 39 | + java-version: '25' |
| 40 | + cache: 'gradle' |
| 41 | + |
| 42 | + # Linux only: use a portable, pristine Temurin 25 for jlink |
| 43 | + - name: (Linux) Install portable Temurin 25 |
| 44 | + if: runner.os == 'Linux' |
| 45 | + shell: bash |
| 46 | + run: | |
| 47 | + set -euo pipefail |
| 48 | + URL="https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25%2B36/OpenJDK25U-jdk_x64_linux_hotspot_25_36.tar.gz" |
| 49 | + mkdir -p "$RUNNER_TEMP/temurin25" |
| 50 | + curl -fsSL "$URL" -o "$RUNNER_TEMP/temurin25/jdk.tar.gz" |
| 51 | + tar -xzf "$RUNNER_TEMP/temurin25/jdk.tar.gz" -C "$RUNNER_TEMP/temurin25" |
| 52 | + PORTABLE_JAVA_HOME="$(find "$RUNNER_TEMP/temurin25" -maxdepth 1 -type d -name 'jdk-25*' | head -n1)" |
| 53 | + echo "PORTABLE_JAVA_HOME=$PORTABLE_JAVA_HOME" >> "$GITHUB_ENV" |
| 54 | + echo "$PORTABLE_JAVA_HOME/bin" >> "$GITHUB_PATH" |
| 55 | +
|
| 56 | + # Pin Gradle toolchain to the active JDK (portable on Linux, setup-java on Windows) |
| 57 | + - name: Pin Gradle toolchain |
| 58 | + shell: bash |
| 59 | + run: | |
| 60 | + ACTIVE_JAVA_HOME="${PORTABLE_JAVA_HOME:-$JAVA_HOME}" |
| 61 | + echo "JAVA_HOME=${ACTIVE_JAVA_HOME}" >> "$GITHUB_ENV" |
| 62 | + echo "${ACTIVE_JAVA_HOME}/bin" >> "$GITHUB_PATH" |
| 63 | + echo "org.gradle.java.installations.paths=${ACTIVE_JAVA_HOME}" >> gradle.properties |
| 64 | + echo "org.gradle.java.installations.auto-detect=false" >> gradle.properties |
| 65 | +
|
| 66 | + - name: Show Java & jlink |
| 67 | + shell: bash |
| 68 | + run: | |
| 69 | + echo "JAVA_HOME=$JAVA_HOME" |
| 70 | + "$JAVA_HOME/bin/java" -version |
| 71 | + "$JAVA_HOME/bin/jlink" --version |
| 72 | +
|
| 73 | + - name: Validate Gradle wrapper |
| 74 | + uses: gradle/actions/wrapper-validation@v4 |
| 75 | + |
| 76 | + - name: Setup Gradle (cache) |
| 77 | + uses: gradle/actions/setup-gradle@v4 |
| 78 | + |
| 79 | + # ---- FAIL FAST: package first (so jlink issues show immediately) ---- |
| 80 | + - name: Package slim runtime (fail fast) |
| 81 | + shell: bash |
| 82 | + run: ./gradlew checksumSlimCompilerDist --no-daemon --stacktrace |
| 83 | + |
| 84 | + - name: Run tests |
| 85 | + shell: bash |
| 86 | + run: ./gradlew test --no-daemon --stacktrace |
| 87 | + |
| 88 | + - name: Upload packaged artifact (per-OS) |
| 89 | + uses: actions/upload-artifact@v4 |
23 | 90 | with: |
24 | | - path: ~/.gradle/caches |
25 | | - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} |
26 | | - restore-keys: ${{ runner.os }}-gradle |
27 | | - - name: Build & Run Tests |
28 | | - working-directory: ./de.peeeq.wurstscript |
29 | | - env: |
30 | | - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any |
31 | | - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} |
32 | | - run: ./gradlew test --info |
| 91 | + name: wurst-compiler-${{ matrix.os }} |
| 92 | + path: | |
| 93 | + de.peeeq.wurstscript/build/releases/*.zip |
| 94 | + de.peeeq.wurstscript/build/releases/*.tar.gz |
| 95 | + de.peeeq.wurstscript/build/releases/*.sha256 |
| 96 | + if-no-files-found: error |
| 97 | + retention-days: 7 |
0 commit comments