Skip to content

Test parallel test actions #7947

Test parallel test actions

Test parallel test actions #7947

Workflow file for this run

name: Java 21 CI (MC 1.20.6+)

Check failure on line 1 in .github/workflows/java-21-builds.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/java-21-builds.yml

Invalid workflow file

(Line: 17, Col: 15): Unrecognized named-value: 'env'. Located at position 1 within expression: env.JAVA_VERSION, (Line: 83, Col: 15): Unrecognized named-value: 'env'. Located at position 1 within expression: env.JAVA_VERSION
on:
push:
branches:
- master
- 'dev/**'
pull_request:
env:
ENVIRONMENTS: 1.20.6,1.21.3,1.21.4,1.21.5,1.21.8,1.21.10
PARALLEL_JOBS: 3
JAVA_VERSION: 21
jobs:
prepare:
name: Java ${{ env.JAVA_VERSION }} CI - Parallelize Tests
if: "! contains(toJSON(github.event.commits.*.message), '[ci skip]')"
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Generate matrix
id: set-matrix
run: |
# Use environment variables
N=${{ env.PARALLEL_JOBS }}
JAVA_VERSION=${{ env.JAVA_VERSION }}
# Convert to array and transform
IFS=',' read -ra ENVS <<< "${{ env.ENVIRONMENTS }}"
TRANSFORMED=()
for env in "${ENVS[@]}"; do
TRANSFORMED+=("java${JAVA_VERSION}/paper-${env}")
done
TOTAL=${#TRANSFORMED[@]}
# avoid creating more jobs than needed
JOBS=$((TOTAL < N ? TOTAL : N))
# environments per job
BASE=$((TOTAL / JOBS))
EXTRA=$((TOTAL % JOBS))
# Build matrix JSON
# Format is:
# [{"id":1,"envs":"java21/paper-1.20.6,java21/paper-1.21.3","display":"1.20.6, 1.21.3"},...]
# Where "envs" is the actual environment strings and "display" is for easier identification
MATRIX="["
INDEX=0
for ((i=0; i<JOBS; i++)); do
# Determine count for this job (BASE + 1 if i < EXTRA)
COUNT=$BASE
if [ $i -lt $EXTRA ]; then
COUNT=$((COUNT + 1))
fi
# Build envs and display strings
GROUP=""
DISPLAY_GROUP=""
for ((j=0; j<COUNT; j++)); do
if [ -n "$GROUP" ]; then
GROUP="$GROUP,"
DISPLAY_GROUP="$DISPLAY_GROUP, "
fi
GROUP="$GROUP${TRANSFORMED[$INDEX]}"
DISPLAY_GROUP="$DISPLAY_GROUP${ENVS[$INDEX]}"
INDEX=$((INDEX + 1))
done
# add to matrix with separating comma if needed
if [ $i -gt 0 ]; then
MATRIX="$MATRIX,"
fi
MATRIX="$MATRIX{\"id\":$((i+1)),\"envs\":\"$GROUP\",\"display\":\"$DISPLAY_GROUP\"}"
done
MATRIX="$MATRIX]"
echo "matrix={\"include\":$MATRIX}" >> $GITHUB_OUTPUT
echo "Generated matrix: {\"include\":$MATRIX}"
build:
name: Java ${{ env.JAVA_VERSION }} CI (${{ matrix.display }})
needs: prepare
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJSON(needs.prepare.outputs.matrix) }}
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: validate gradle wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Set up JDK ${{ env.JAVA_VERSION }}
uses: actions/setup-java@v5
with:
java-version: '${{ env.JAVA_VERSION }}'
distribution: 'adopt'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build Skript and run test scripts
run: ./gradlew clean customTest -PtestEnvs="${{ matrix.envs }}" -PtestEnvJavaVersion=${{ env.JAVA_VERSION }}
- name: Upload Nightly Build
uses: actions/upload-artifact@v4
if: success() && matrix.id == 1
with:
name: skript-nightly
path: build/libs/*